第2章:温室项目需求分析
好,咱们进入正题。上一章我聊了RTOS的基本概念,这一章咱们来点实在的——温室项目到底要采集什么、控制什么、怎么通信。
说实话,很多初学者一上来就写代码,结果写到一半发现传感器型号不对,或者通信协议选错了。嗯,我当年也干过这种事。所以咱们先把需求理清楚,后面写代码才不慌。
2.1 传感器数据采集
温室里要监控的环境参数,说白了就三个核心指标:温湿度、光照强度、二氧化碳浓度。这三个参数直接决定了作物长得好不好。
2.1.1 温湿度采集
我个人习惯用DHT22或者SHT30。DHT22便宜,但精度一般;SHT30贵一点,但稳定。如果你做产品,我建议用SHT30。
这里有个坑——DHT22的时序要求很严格,主频稍微跑偏就读不到数据。我曾经在一个项目里,因为RTOS任务切换太快,导致DHT22读取失败。后来加了临界区保护才搞定。
| 传感器 | 接口 | 精度 | 采样周期 |
|---|---|---|---|
| DHT22 | 单总线 | ±0.5°C, ±2%RH | 2秒 |
| SHT30 | I2C | ±0.3°C, ±1.5%RH | 0.5秒 |
2.1.2 光照采集
光照传感器我用得最多的是BH1750。这玩意儿通过I2C通信,直接输出lux值,不用自己算。你想想看,如果让你自己搭光敏电阻加ADC,还得做曲线拟合,多麻烦。
BH1750有几种测量模式,我一般用高分辨率模式,精度1lux,够用了。注意一点:传感器要加遮光罩,避免直射阳光导致饱和。我在一个户外项目中吃过这个亏,大中午的数据直接爆表。
2.1.3 CO2浓度采集
CO2传感器比较贵,常用的有MH-Z19B(串口)和SCD30(I2C)。MH-Z19B性价比高,但需要预热30秒才能读到稳定数据。
这里要提醒一下:CO2传感器功耗比较大,如果电池供电,不能一直开着。我建议用定时唤醒的方式,每5分钟采集一次就够了。温室里CO2变化没那么快。
2.2 执行器控制
采集数据是为了控制。温室里常见的执行器有三个:风扇、水泵、补光灯。每个执行器的控制方式不一样,咱们一个一个说。
2.2.1 风扇控制
风扇一般用PWM调速,或者继电器开关。我建议用PWM,因为可以无极调速,省电又安静。
控制逻辑很简单:温度高了,风扇转速加快;湿度高了,风扇也转。但要注意——不能同时开所有风扇,否则电流太大。我在一个项目中用RTOS的任务优先级来控制风扇启动顺序,效果不错。
2.2.2 水泵控制
水泵通常是开关控制,用继电器或者MOS管。这里有个关键点:水泵不能频繁启停,否则容易烧电机。我一般设置最小间隔时间,比如30秒内不允许重复开关。
另外,水泵启动瞬间电流很大,如果MCU供电不足,会导致复位。嗯,这个坑我踩过。后来加了软启动电路才解决。
2.2.3 补光灯控制
补光灯用PWM调光比较常见。LED灯珠对PWM频率有要求,太低会闪烁,太高会发热。我一般用1kHz左右,人眼看不出来,灯珠也不烫。
光照强度低于阈值就开灯,高于阈值就关灯。但要注意加个迟滞区间,不然灯会在阈值附近来回跳。比如设定值2000lux,低于1800开灯,高于2200关灯。
2.3 通信协议选择
温室项目里,传感器和执行器分布在各个角落,通信协议选对了,事半功倍。咱们常用的就三种:UART、I2C、SPI。
2.3.1 UART(串口)
UART最常用,简单可靠。CO2传感器MH-Z19B就是UART接口。注意波特率要匹配,我一般用9600或115200。
UART的缺点是一对一通信,不能挂多个设备。如果你有多个串口设备,MCU的UART口可能不够用。这时候可以用软件模拟UART,但稳定性不如硬件。
2.3.2 I2C
I2C是温室项目的首选。SHT30、BH1750、SCD30都是I2C接口。一根SDA、一根SCL,可以挂几十个设备。
I2C的坑在于地址冲突。不同厂家的设备可能用同一个地址。我遇到过BH1750和某款OLED屏幕地址都是0x23,结果两个设备不能同时用。解决办法是换地址或者用I2C多路复用器。
2.3.3 SPI
SPI速度快,适合大数据量传输。但温室项目里很少用,因为传感器数据量不大。除非你要接高速ADC或者显示屏。
SPI的缺点是线多,至少4根线。而且每个设备需要一个片选引脚,MCU引脚不够用就麻烦了。
| 协议 | 速度 | 线数 | 适用场景 |
|---|---|---|---|
| UART | 慢 | 2 | 一对一,简单设备 |
| I2C | 中 | 2 | 多设备,传感器 |
| SPI | 快 | 4+ | 高速,大数据 |
2.4 需求总结
好了,咱们把需求理一理。温室项目需要:
- 传感器:温湿度(SHT30)、光照(BH1750)、CO2(MH-Z19B)
- 执行器:风扇(PWM)、水泵(继电器)、补光灯(PWM)
- 通信:I2C为主,UART为辅
下一章,咱们开始搭建RTOS任务框架。到时候你会看到,这些需求怎么映射到任务里。嗯,先卖个关子。
对了,如果你手头有开发板,建议先焊好传感器模块,后面调试会方便很多。我当年就是边焊边写代码,结果焊点虚了,查了半天bug……