第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变化没那么快。

注意: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+ 高速,大数据
我的建议:温室项目优先用I2C。如果设备不支持I2C,再用UART。SPI除非必要,否则别碰。线多容易接错,调试起来很痛苦。

2.4 需求总结

好了,咱们把需求理一理。温室项目需要:

  • 传感器:温湿度(SHT30)、光照(BH1750)、CO2(MH-Z19B)
  • 执行器:风扇(PWM)、水泵(继电器)、补光灯(PWM)
  • 通信:I2C为主,UART为辅

下一章,咱们开始搭建RTOS任务框架。到时候你会看到,这些需求怎么映射到任务里。嗯,先卖个关子。

对了,如果你手头有开发板,建议先焊好传感器模块,后面调试会方便很多。我当年就是边焊边写代码,结果焊点虚了,查了半天bug……