4、常见传感器(一):温度传感器(DS18B20、DHT11)、湿度传感器、原理与接线
做嵌入式这些年,我接触最多的传感器就是温度和湿度类的。说实话,这两个参数是物联网项目里最基础、也最常用的数据。不管是环境监测、农业大棚,还是智能家居,都离不开它们。
今天咱们就聊聊两款经典的温度传感器——DS18B20和DHT11,顺便把湿度传感器也一并讲清楚。嗯,这里要注意,DHT11其实是个温湿度一体模块,不是单纯的温度传感器。
4.1 温度传感器DS18B20:一根线就能搞定
DS18B20是我个人非常喜欢的一款数字温度传感器。为什么?因为它只需要一根数据线就能通信。你想想看,省IO口啊,这在引脚紧张的板子上简直是救星。
工作原理
DS18B20内部集成了一个温度敏感元件和一个12位的ADC。温度变化时,内部晶体管的压降会改变,ADC把这个模拟量转成数字量,然后通过单总线协议传出去。精度能做到±0.5°C,范围是-55°C到+125°C。
接线方式
它有三个引脚:VDD(电源)、GND(地)、DQ(数据)。
- VDD:接3.3V或5V,我一般用3.3V,省电
- GND:接地
- DQ:接单片机GPIO,注意要加一个4.7kΩ上拉电阻到VDD
我曾经在项目里忘了加上拉电阻,结果数据死活读不出来。DS18B20的单总线协议依赖这个电阻来维持高电平,不加的话通信会间歇性失败。别问我怎么知道的,调了一下午。
代码示例(Arduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // DS18B20数据线接D2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
Serial.print("温度: ");
Serial.println(temp);
delay(1000);
}
4.2 DHT11:温湿度二合一,便宜又好用
DHT11是入门级温湿度传感器的代表。说实话,它的精度不算高——温度±2°C,湿度±5%RH。但胜在便宜,几块钱一个,而且用起来简单。
工作原理
DHT11内部有一个电容式湿度感应元件和一个NTC温度感应元件。湿度变化时,电容的介电常数会变,从而改变电容值;温度则通过NTC电阻的变化来测量。内部有个8位MCU负责采集和转换,然后通过单总线协议输出40位数据包。
接线方式
- VCC:接3.3V或5V
- GND:接地
- DATA:接单片机GPIO,同样需要上拉电阻(5kΩ左右)
我建议DHT11的采样间隔不要小于1秒。它的数据手册明确写了最大采样率是1Hz。你如果读得太快,它会输出旧数据,甚至不响应。我在一个智能花盆项目里踩过这个坑,后来加了延时就好了。
代码示例(Arduino)
#include <DHT.h>
#define DHTPIN 2 // 数据引脚
#define DHTTYPE DHT11 // 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("读取失败!");
return;
}
Serial.print("湿度: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("温度: ");
Serial.print(t);
Serial.println(" °C");
delay(2000);
}
4.3 湿度传感器:不只是DHT11
说到湿度传感器,很多人第一反应就是DHT11。其实还有专门的湿度传感器,比如电容式湿度传感器HS1101、电阻式湿度传感器等。
电容式湿度传感器
它的核心是一个高分子薄膜电容。湿度变化时,薄膜吸收或释放水分子,介电常数改变,电容值随之变化。通过测量电容值就能算出湿度。精度高,响应快,但成本也高。
电阻式湿度传感器
这种传感器表面涂有吸湿性材料(比如氯化锂)。湿度高时,材料吸水,电阻变小;湿度低时,电阻变大。电路上一般接成电阻分压或电桥形式。便宜,但线性度差,容易老化。
我个人习惯是:
- 普通环境监测:DHT11够用,性价比高
- 需要精度:选SHT30或BME280,价格稍贵但数据靠谱
- 工业场景:用电容式湿度传感器+独立MCU处理
4.4 接线注意事项总结
| 传感器 | 引脚 | 接线说明 | 注意事项 |
|---|---|---|---|
| DS18B20 | VDD/GND/DQ | DQ接GPIO,加4.7kΩ上拉 | 寄生供电模式可省VDD线 |
| DHT11 | VCC/GND/DATA | DATA接GPIO,加5kΩ上拉 | 采样间隔≥1秒 |
| 电容式湿度 | VCC/GND/OUT | OUT接ADC引脚 | 需要标定,不同批次有差异 |
嗯,最后说一句。这些传感器看着简单,但实际项目里坑不少。比如线太长会导致信号衰减,电源纹波大会影响精度。我建议你在做原型时先用杜邦线,等验证没问题了再画PCB。这样能省不少事。
下一章咱们聊聊运动传感器——加速度计和陀螺仪,那个更有意思。