1. 项目概述
作为一名长期从事农业物联网开发的工程师,我最近完成了一个很有意思的项目——基于STM32的红薯窖空气质量检测系统。这个项目源于我们当地红薯种植大户的实际需求,他们每年都会因为窖藏环境控制不当而损失大量红薯。
传统的红薯窖管理主要依靠人工经验,管理人员定期下窖查看,凭感觉判断是否需要通风。这种方式不仅效率低下,而且很难及时发现环境异常。特别是在北方冬季,窖内温湿度波动大,氧气浓度变化快,稍有不慎就会导致整窖红薯腐烂。
我们的系统通过部署温湿度传感器、氧气传感器和空气质量传感器,实现了对窖内环境的24小时不间断监测。当检测到异常数据时,系统会自动触发报警,并通过GSM模块向管理人员发送预警短信。经过三个月的实际运行测试,使用该系统的红薯窖损耗率降低了65%,效果非常显著。
2. 系统设计方案
2.1 核心需求分析
在设计之初,我们深入调研了红薯储存的环境要求:
-
温度控制:理想储存温度为12-15℃。低于10℃会导致冷害,高于18℃会加速发芽和腐烂。
-
湿度控制:相对湿度应保持在85%-90%。湿度过低会使红薯失水皱缩,过高则易滋生霉菌。
-
氧气浓度:最佳范围为18%-21%。低于15%会引发无氧呼吸,产生酒精等有害物质。
-
有害气体:需要监测CO2(阈值<2000ppm)和NH3(阈值<20ppm)浓度。
2.2 硬件架构设计
系统采用模块化设计,主要包含以下组件:
code复制[系统架构图]
传感器层 → 控制层 → 执行层 → 通信层
(STM32)
-
传感器层:
- SHT30温湿度传感器(±0.3℃精度)
- ME2-O2电化学氧气传感器(0-25%量程)
- CCS811空气质量传感器(TVOC和eCO2检测)
- 备用接口(可扩展其他传感器)
-
控制层:
- STM32F103C8T6最小系统板
- 硬件看门狗电路
- RTC时钟模块(DS1307)
-
执行层:
- 继电器控制的通风扇
- 加热片(低温时防冻)
- 声光报警器
-
通信层:
- SIM800L GSM模块(短信报警)
- ESP8266 WiFi模块(可选配)
2.3 关键器件选型
在选择STM32型号时,我们对比了以下方案:
| 型号 | Flash | RAM | 价格 | 适用性评估 |
|---|---|---|---|---|
| STM32F103C8 | 64KB | 20KB | 低 | 完全满足需求 |
| STM32F407VG | 1MB | 192KB | 高 | 性能过剩 |
| STM32L052K8 | 64KB | 8KB | 中 | RAM不足 |
最终选择STM32F103C8T6的原因:
- 充足的存储资源(我们的固件编译后约45KB)
- 丰富的外设接口(3个USART、2个SPI、2个I2C)
- 成熟的生态和开发工具链
- 极具竞争力的价格(约15元/片)
3. 系统实现细节
3.1 传感器数据采集
传感器均采用I2C接口连接,硬件连接示意图:
code复制VCC 3.3V ────┬─────┬─────┬─────
│ │ │
SHT30 ME2-O2 CCS811
│ │ │
GND ─────────┴─────┴─────┴─────
│ │ │
SCL ─────────┴─────┴─────┴─────
│ │ │
SDA ─────────┴─────┴─────┴─────
数据采集采用轮询方式,关键代码片段:
c复制#define SENSOR_READ_INTERVAL 30000 // 30秒
void Sensor_ReadTask(void *argument) {
while(1) {
SHT30_ReadData(&temp, &humi);
O2_ReadData(&o2_level);
CCS811_ReadData(&tvoc, &eco2);
// 数据校验
if(!Data_Validate(temp, humi, o2_level)) {
Error_Handler();
}
osDelay(SENSOR_READ_INTERVAL);
}
}
注意事项:
- I2C总线需加上拉电阻(通常4.7KΩ)
- 电化学传感器需要预热时间(ME2-O2约5分钟)
- 定期校准传感器(建议每月一次)
3.2 数据处理算法
原始数据需要经过以下处理流程:
-
滑动平均滤波:消除瞬时干扰
c复制#define FILTER_SIZE 5 float temp_history[FILTER_SIZE]; float MovingAverage(float new_val) { static uint8_t index = 0; temp_history[index] = new_val; index = (index + 1) % FILTER_SIZE; float sum = 0; for(int i=0; i<FILTER_SIZE; i++) { sum += temp_history[i]; } return sum / FILTER_SIZE; } -
温度补偿:针对氧气传感器
c复制float O2_Compensate(float raw, float temp) { // 温度补偿公式来自传感器手册 return raw * (1 + 0.003 * (temp - 20)); } -
阈值判断:
c复制void CheckThresholds(void) { if(temp > TEMP_MAX || temp < TEMP_MIN) { Alarm_Trigger(TEMP_ALARM); } // 其他参数判断类似 }
3.3 报警逻辑设计
报警系统采用多级响应机制:
-
一级报警(轻微异常):
- 本地蜂鸣器间歇鸣响
- LED指示灯慢闪
- 记录异常日志
-
二级报警(严重异常):
- 蜂鸣器持续鸣响
- LED快闪
- 自动启动通风系统
- 发送短信通知
-
三级报警(危险状态):
- 所有报警装置激活
- 连续发送报警短信(每10分钟一次)
- 强制开启所有通风设备
报警解除条件:
- 手动按键确认
- 或持续30分钟参数恢复正常
4. 系统部署与优化
4.1 窖内传感器布置
根据实际测试,建议按照以下原则部署传感器:
-
空间分布:
- 每50平方米部署1组传感器
- 距地面1.2-1.5米高度(红薯堆放中层)
- 避开通风口和墙角
-
布线要点:
- 使用RVVP屏蔽电缆(抗干扰)
- 走线避免与电力线平行
- 接头处做好防水处理
-
供电方案:
- 主控采用220V转5V电源
- 传感器采用3.3V LDO稳压
- 备用18650电池(可维持4小时)
4.2 实际运行数据
以下是系统在3个典型红薯窖的运行数据对比:
| 窖号 | 温度波动(℃) | 湿度波动(%) | O2浓度(%) | 红薯损耗率 |
|---|---|---|---|---|
| #1 | ±0.8 | ±3 | 19.5-20.5 | 4.2% |
| #2 | ±1.5 | ±5 | 18-21 | 7.8% |
| 传统 | ±5 | ±15 | 15-23 | 22.3% |
4.3 系统功耗优化
通过以下措施将待机功耗降至12mA:
-
使用STM32的Stop模式(RTC保持运行)
c复制void Enter_LowPowerMode(void) { HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后需要重新初始化时钟 SystemClock_Config(); } -
传感器间歇工作模式(采集后立即断电)
-
关闭所有未使用的GPIO时钟
-
选用低功耗LDO(如HT7333)
5. 常见问题与解决方案
5.1 传感器数据异常
现象:氧气读数突然归零
排查步骤:
- 检查I2C总线电压(正常应为3.3V)
- 测量传感器供电电流(正常约15mA)
- 重新插拔传感器接头
- 查看传感器加热电阻是否正常(约50Ω)
根本原因:接头氧化导致接触不良
解决方案:更换镀金接插件,涂抹导电膏
5.2 GSM模块连接不稳定
典型表现:
- 短信发送失败
- 模块频繁重启
优化措施:
- 电源端增加1000μF电容
- 天线远离金属物体
- 添加AT指令重试机制:
c复制void GSM_SendSMS(const char *msg, uint8_t retry) { while(retry--) { if(GSM_AT_Command("AT+CMGS=\"138xxxx\"") == SUCCESS) { break; } HAL_Delay(1000); } }
5.3 低温环境运行问题
在北方冬季(-15℃以下)遇到的主要挑战:
-
液晶显示迟缓:
- 改用OLED屏幕(工作温度-40~85℃)
- 增加加热电路(PTC加热片)
-
传感器响应慢:
- 给传感器增加保温外壳
- 降低采样频率(从30秒改为5分钟)
-
锂电池容量下降:
- 选用低温型锂电池(如18650FD)
- 增加超级电容作为瞬时电源
6. 系统扩展与改进
6.1 手机APP监控
基于ESP8266开发的扩展功能:
-
功能特点:
- 实时数据显示曲线
- 历史数据查询
- 远程参数设置
- 报警推送通知
-
通信协议:
json复制{ "temp": 14.5, "humi": 87, "o2": 19.8, "alarm": 0, "timestamp": 1634567890 } -
安全措施:
- 采用MQTT over TLS
- 设备双向认证
- 数据加密传输
6.2 数据分析功能
基于采集的数据开发了以下分析模型:
-
腐烂预测算法:
- 输入:温度、湿度、O2、CO2
- 输出:未来7天腐烂概率
- 准确率:82%(实测数据)
-
最优通风策略:
- 根据内外温湿度差
- 结合天气预报数据
- 自动计算最佳通风时长
-
能耗优化模型:
- 平衡设备运行时间
- 考虑电价峰谷时段
- 可降低电费支出约15%
6.3 农业物联网集成
系统可无缝对接现有农业物联网平台:
-
数据对接方式:
- Modbus RTU over RS485
- HTTP REST API
- MQTT消息队列
-
典型应用场景:
- 与灌溉系统联动
- 库存管理系统集成
- 供应链质量追溯
-
边缘计算能力:
- 本地数据预处理
- 断网缓存机制
- 规则引擎支持
经过半年多的实际运行,这个系统已经帮助周边20多个红薯种植户实现了窖藏管理的智能化升级。最大的收获不仅是技术上的成功,更是看到农户们因为减少了损失而露出的笑容。农业物联网的应用前景广阔,但需要我们工程师真正深入田间地头,了解实际需求,才能做出有价值的产品。