3、传感器选型与原理:温湿度、CO₂、PM2.5、光照
好,咱们进入正题。这一章聊传感器选型,说白了就是给空气站挑「眼睛」和「鼻子」。选对了,数据靠谱;选错了,后面全是坑。我这些年踩过的雷不少,今天把经验掰开揉碎讲给你听。
3.1 温湿度传感器:SHT30
温湿度是农业环境的基础参数。你想想看,大棚里温度差个两度,作物长势可能就天差地别。SHT30 是我个人非常喜欢的一款数字温湿度传感器。
工作原理
SHT30 内部集成了一个电容式湿度传感元件和一个带隙温度传感元件。湿度测量靠的是高分子薄膜吸湿后电容变化,温度测量则利用 PN 结正向压降与温度的线性关系。芯片内部有 ADC 和校准逻辑,直接输出数字信号,用 I²C 接口读取就行。
关键参数:
- 温度精度:±0.3°C(典型值)
- 湿度精度:±2% RH(典型值)
- 工作电压:2.4V ~ 5.5V
- 接口:I²C(地址 0x44 或 0x45)
选型依据
为什么选 SHT30 而不是更便宜的 DHT11?我刚开始做项目时也图便宜用过 DHT11,结果发现湿度数据跳得厉害,根本没法用。SHT30 贵不了几块钱,但稳定性好太多。农业场景下,温湿度变化缓慢,SHT30 的精度完全够用,而且它支持周期性采集模式,功耗很低。
我的经验:SHT30 的 I²C 地址可以通过 ADDR 引脚配置。如果总线上挂多个传感器,记得错开地址。我曾经因为两个 SHT30 地址冲突,排查了半天才发现是硬件焊错了。
3.2 CO₂ 传感器:MH-Z19B
CO₂ 浓度直接影响植物光合作用效率。大棚里 CO₂ 浓度低了,作物就「饿肚子」。MH-Z19B 是非色散红外(NDIR)原理的传感器,测 CO₂ 很准。
工作原理
NDIR 的原理其实不复杂。红外光源发出特定波长的光,穿过气室后被探测器接收。CO₂ 分子会吸收 4.26μm 波长的红外光,吸收程度与浓度成正比。传感器内部有参考通道和测量通道,通过比较两个通道的信号强度,就能算出 CO₂ 浓度。
// MH-Z19B 读取 CO₂ 浓度示例(UART 模式)
uint8_t cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
uint8_t resp[9];
// 发送读取命令
uart_send(cmd, 9);
delay(10);
// 接收响应
uart_receive(resp, 9);
// 校验和检查
if (resp[0] == 0xFF && resp[1] == 0x86) {
uint16_t co2 = (resp[2] << 8) | resp[3];
printf("CO₂: %d ppm\n", co2);
}
选型依据
MH-Z19B 支持 UART 和 PWM 两种输出方式,我习惯用 UART,数据直接读,方便。它的量程是 400~5000ppm,农业场景绰绰有余。注意一点:它需要预热,刚上电前几分钟数据不准。我一般会在代码里加个延时,等传感器稳定后再开始采集。
避坑指南:MH-Z19B 对气流敏感。如果传感器放在密闭空间里,CO₂ 浓度可能测不准。我曾在温室里把传感器装在一个小盒子里,结果读数一直偏高——因为盒子内部空气不流通。后来在盒子上开了通风孔,问题就解决了。
3.3 PM2.5 传感器:PMS5003
PM2.5 是衡量空气质量的重要指标。农业场景下,扬尘、花粉、霉菌孢子都可能影响作物健康。PMS5003 是激光散射原理的传感器,测颗粒物很靠谱。
工作原理
激光散射法,说白了就是让空气穿过一个激光束。颗粒物经过时会把光散射到各个方向,传感器用光电探测器接收散射光信号。信号强弱和颗粒物浓度成正比。PMS5003 内部有算法,能区分 PM1.0、PM2.5、PM10 的浓度。
关键参数:
- 量程:0~1000 μg/m³
- 分辨率:1 μg/m³
- 工作电压:5V
- 接口:UART(默认 9600bps)
选型依据
PMS5003 的优点是精度高、响应快。但它有个缺点:功耗大(约 80mA)。如果做电池供电的产品,需要做间歇采集。我一般让它每 5 分钟工作 30 秒,这样平均功耗能降到 8mA 左右。
我的经验:PMS5003 的风扇是易损件。连续运行半年以上,风扇噪音会变大,数据也可能漂移。建议在产品设计时预留风扇更换接口,或者定期校准。我曾经有个项目,客户反馈数据不准,结果拆开一看,风扇被灰尘堵死了。
3.4 光照传感器:BH1750
光照强度直接影响植物光合作用速率。BH1750 是数字光照传感器,测的是可见光强度,单位是 lux。
工作原理
BH1750 内部有一个光电二极管,把光信号转成电流信号。电流信号经过 ADC 转换成数字值,再通过 I²C 接口输出。它有两个 I²C 地址可选(0x23 或 0x5C),支持连续测量和单次测量模式。
// BH1750 初始化示例(连续高分辨率模式)
void bh1750_init() {
uint8_t cmd = 0x10; // 连续高分辨率模式
i2c_write(0x23, &cmd, 1);
delay(180); // 等待测量完成
}
// 读取光照强度
uint16_t bh1750_read() {
uint8_t buf[2];
i2c_read(0x23, buf, 2);
uint16_t lux = (buf[0] << 8) | buf[1];
return lux / 1.2; // 根据手册换算
}
选型依据
BH1750 的测量范围是 1~65535 lux,农业大棚里完全够用。它的光谱响应接近人眼,测的是「人眼感受到的亮度」,而不是全光谱辐射。如果你需要测光合有效辐射(PAR),那得用专门的量子传感器。但一般农业监测,BH1750 足够了。
注意:BH1750 对红外光不敏感。如果你用 LED 补光灯,要注意 LED 的光谱成分。有些 LED 的红外成分多,BH1750 测出来可能偏低。我遇到过客户用红外补光灯,BH1750 读数只有实际照度的一半。后来换了带红外补偿的传感器才解决。
3.5 传感器选型总结
好了,四个传感器都聊完了。我整理了一张表,方便你对比:
| 传感器 | 测量参数 | 接口 | 精度 | 功耗 | 价格(参考) |
|---|---|---|---|---|---|
| SHT30 | 温度、湿度 | I²C | ±0.3°C / ±2% RH | 低(~2μA 待机) | ~10 元 |
| MH-Z19B | CO₂ 浓度 | UART / PWM | ±50 ppm | 中(~20mA) | ~80 元 |
| PMS5003 | PM1.0/2.5/10 | UART | ±10 μg/m³ | 高(~80mA) | ~60 元 |
| BH1750 | 光照强度 | I²C | ±1 lux | 低(~0.2mA) | ~5 元 |
选型时记住一句话:够用就好,别盲目追求高精度。农业场景下,温湿度 ±0.5°C、CO₂ ±50ppm、PM2.5 ±10μg/m³、光照 ±10% 的精度已经能做出很好的产品了。省下来的钱,用在结构设计和防护上,比堆传感器参数更实在。
下一章,咱们聊传感器接口电路设计。到时候我会讲讲怎么把这些传感器接到单片机上,以及怎么处理信号干扰的问题。嗯,那部分内容更硬核,做好准备。