单片机传感器采集

传感器采集是嵌入式真正开始和物理世界打交道的一步:DHT11 温湿度、红外避障、串口上报上位机。

场景:数据采集 技术栈:Arduino / C / 串口协议 来源:GitHub 参考

项目简介

本页演示三类最常用的传感器接入:DHT11 温湿度(单总线时序)、红外避障(数字量输入)、串口上报(数据协议)。学会这三样,就能做出温控、小车避障、环境监测等小项目。

代码示例:DHT11 温湿度采集(Arduino)

cpp
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();  // 摄氏度
  if (isnan(h) || isnan(t)) {
    Serial.println("read failed");
    return;
  }
  Serial.print("TEMP="); Serial.print(t);
  Serial.print(" HUM="); Serial.println(h);
  delay(2000);  // DHT11 采样频率建议 >=1s
}

代码示例:红外避障 + 串口协议

cpp
/* 红外避障模块 OUT 接 D3,检测到障碍输出低电平 */
const int irPin = 3;

void setup() {
  pinMode(irPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  bool blocked = (digitalRead(irPin) == LOW);
  Serial.print("{\"blocked\":");
  Serial.print(blocked ? "true" : "false");
  Serial.println("}");
  delay(200);
}

代码示例:上位机解析(Python)

py
import serial
import json

ser = serial.Serial("COM3", 9600, timeout=1)

while True:
    line = ser.readline().decode("utf-8", "ignore").strip()
    if not line:
        continue
    try:
        data = json.loads(line)
        if "blocked" in data:
            print("前方障碍" if data["blocked"] else "畅通")
    except json.JSONDecodeError:
        print("raw:", line)

操作步骤

  1. Arduino 安装 DHT 库(库管理器搜索 DHT sensor library),按注释接线后上传。
  2. 红外模块接 3.3V/5V、GND、OUT 到 D3,观察串口监视器输出。
  3. 上位机用 pip install pyserial,修改 COM 口后运行解析脚本。

来源参考

GitHub 关键词:dht11-arduinoir-obstacle-avoidserial-json-protocol(链接可替换为实际仓库地址)。