1. 项目概述与背景
马铃薯作为全球第四大粮食作物,其生长过程对环境参数极为敏感。我在内蒙古某大型农场实地考察时发现,传统种植大棚依赖人工定时巡检温湿度计,经常出现响应滞后导致减产的情况。最典型的是2021年春季,一次突发的低温导致三个大棚的马铃薯幼苗冻伤,直接经济损失超过20万元。这促使我开始研发这套自动化监测系统。
系统采用主从架构设计,核心目标是实现三个维度的环境管控:
- 实时性:传感器数据采集间隔≤5秒
- 可靠性:RS485通信距离可达1200米(实测带屏蔽双绞线)
- 智能化:支持阈值触发和远程手动双控制模式
2. 硬件设计详解
2.1 核心器件选型对比
2.1.1 主控芯片方案
对比STM32F103C8T6与STM32F401CCU6后发现:
- F103的72MHz主频足够处理传感器数据
- 内置3个USART完美适配RS485、WiFi、调试接口
- 成本仅F401的60%(批量采购价18.5元/片)
关键提示:使用SWD接口下载程序时,务必在NRST引脚加0.1μF电容,否则会出现无法识别的故障
2.1.2 传感器选型实测
DHT11 vs SHT30实测数据:
| 参数 | DHT11 | SHT30 |
|---|---|---|
| 温度精度 | ±2℃ | ±0.3℃ |
| 响应时间 | 2s | 0.8s |
| 价格 | 8元 | 35元 |
| 通信方式 | 单总线 | I2C |
最终选择DHT11的原因:
- 马铃薯生长对±2℃精度完全够用
- 省下的成本可增加传感器布点密度
2.2 电路设计要点
2.2.1 RS485防雷设计
在农场实测中遭遇过雷击损坏问题,改进方案:
- 加入TVS二极管阵列(SM712)
- 通信线采用屏蔽双绞线(AWG22)
- 终端匹配120Ω电阻
2.2.2 执行机构驱动电路
风机驱动采用光耦隔离+MOSFET方案:
c复制// GPIO初始化代码示例
void FAN_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
3. 软件实现关键点
3.1 多任务调度设计
采用时间片轮询架构:
- 5ms定时器中断
- 任务优先级划分:
- 传感器采集(最高)
- RS485通信
- OLED刷新
- 按键扫描
3.2 传感器数据处理算法
3.2.1 滑动平均滤波
c复制#define FILTER_LEN 5
float temp_filter_buf[FILTER_LEN];
float Moving_Average(float new_val)
{
static uint8_t idx = 0;
float sum = 0;
temp_filter_buf[idx++] = new_val;
if(idx >= FILTER_LEN) idx = 0;
for(uint8_t i=0; i<FILTER_LEN; i++){
sum += temp_filter_buf[i];
}
return sum/FILTER_LEN;
}
3.2.2 阈值迟滞控制
避免执行机构频繁启停:
c复制// 温度控制逻辑示例
if(current_temp < (target_temp - 1.0f)){
HEATER_ON();
}
else if(current_temp > (target_temp + 0.5f)){
HEATER_OFF();
}
4. 通信协议设计
4.1 RS485数据帧格式
| 字节位置 | 内容 | 说明 |
|---|---|---|
| 0 | 0xAA | 帧头 |
| 1 | 从机地址 | 1-255 |
| 2 | 命令字 | 0x01:查询 0x02:控制 |
| 3 | 数据长度N | |
| 4~4+N | 数据域 | |
| 4+N+1 | CRC8 | 多项式0x31 |
4.2 WiFi通信优化
ESP8266固件需要修改:
- 关闭TCP Nagle算法(AT+CIPSNO=1)
- 设置心跳包间隔(AT+PING=60)
- 启用JSON压缩传输:
json复制{
"dev":2,
"t":25.6,
"h":68,
"co2":420,
"st":1638594123
}
5. 实测问题与解决方案
5.1 传感器异常排查
现象:DHT11偶尔返回85℃
解决方法:
- 增加10K上拉电阻
- 两次采集间隔≥1s
- 超时重试机制(最多3次)
5.2 RS485通信冲突
多从机响应冲突的解决步骤:
- 设置从机响应延时 = 地址值×5ms
- 主机超时等待设置为50ms
- 加入冲突检测重发机制
5.3 电源干扰处理
发现风机启停导致单片机复位:
- 主控电源增加1000μF电解电容
- 继电器线圈并联1N4148续流二极管
- 采用独立电源给数字和模拟部分供电
6. 系统优化建议
- 扩展功能:增加土壤湿度传感器(建议使用YL-69)
- 升级方案:将ESP8266替换为4G模组(适合无WiFi覆盖区域)
- 数据存储:添加SD卡模块记录历史数据
- 能量收集:在日照充足地区可加装太阳能供电
实际部署时发现,在30m×50m标准大棚中布置2个从机节点(对角线位置)可获得最佳监测效果。系统连续运行6个月后统计显示:
- 温度波动范围从人工管理的±5℃缩小到±1.2℃
- 人力成本降低70%
- 平均增产15%-20%