单片机传感器采集
传感器采集是嵌入式真正开始和物理世界打交道的一步:DHT11 温湿度、红外避障、串口上报上位机。
项目简介
本页演示三类最常用的传感器接入: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)操作步骤
- Arduino 安装 DHT 库(库管理器搜索 DHT sensor library),按注释接线后上传。
- 红外模块接 3.3V/5V、GND、OUT 到 D3,观察串口监视器输出。
- 上位机用
pip install pyserial,修改 COM 口后运行解析脚本。
来源参考
GitHub 关键词:dht11-arduino、ir-obstacle-avoid、serial-json-protocol(链接可替换为实际仓库地址)。