1. 系统整体架构解析
这个智能农情监测预警系统的核心设计理念是通过多传感器协同工作,实现对农业生产环境的全方位监控。系统采用模块化设计思路,主要由数据采集层、控制处理层和执行输出层三大部分构成。
数据采集层包含多个专业传感器:
- DS18B20数字温度传感器:采用单总线协议,测量精度±0.5℃
- TRSD土壤湿度传感器:基于电阻式测量原理
- 光敏电阻模块:检测环境光照强度
- MQ-2烟雾传感器:检测可燃气体浓度
控制处理层以STM32F103C8T6单片机为核心,这款Cortex-M3内核的MCU具有72MHz主频,内置64KB Flash和20KB SRAM,完全满足多任务处理需求。系统特别设计了双工作模式:
- 自动模式:根据预设阈值自主决策
- 手动模式:通过四个物理按键进行人工干预
执行输出层包含:
- 继电器组:控制水泵、通风设备等大功率负载
- LED补光灯:采用PWM调光技术
- 有源蜂鸣器:报警声压级可达85dB
2. 硬件设计细节剖析
2.1 核心控制器选型
选择STM32F103C8T6主要基于以下考量:
- 丰富的外设接口:具有3个USART、2个SPI和2个I2C接口,便于扩展
- 充足的GPIO数量:37个可用IO口满足多传感器接入
- 低功耗特性:运行模式电流仅36mA,适合野外部署
实际开发中发现,STM32的PB3/PB4引脚默认是JTAG功能,需要先禁用JTAG才能作为普通GPIO使用,这是新手常遇到的坑。
2.2 传感器电路设计要点
温度传感器采用DS18B20时需注意:
- 单总线上必须接4.7kΩ上拉电阻
- 读取时序要严格遵循datasheet要求
- 建议每500ms采样一次,避免总线冲突
土壤湿度传感器使用技巧:
- 探头不宜长期插在土壤中,建议每6小时采样一次
- 使用前需先校准:在完全干燥和浸水状态下记录AD值
- 探头表面可涂覆防水漆延长使用寿命
3. 软件实现关键技术
3.1 多任务调度方案
系统采用时间片轮询架构,任务调度时序如下:
| 任务名称 | 执行周期 | 优先级 |
|---|---|---|
| 温湿度采集 | 1s | 高 |
| 光照采集 | 2s | 中 |
| 气体检测 | 5s | 低 |
| 屏幕刷新 | 100ms | 最高 |
c复制void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t tick = 0;
tick++;
if(tick % 10 == 0) ReadTempTask(); // 每秒执行
if(tick % 20 == 0) ReadLightTask(); // 每2秒执行
// ...其他任务调度
}
3.2 报警逻辑实现
采用多级报警策略:
- 初级预警:数值超过阈值10%时LED闪烁
- 中级报警:超过阈值30%时蜂鸣器间歇鸣响
- 紧急报警:超过阈值50%时继电器动作并持续报警
报警消抖算法:
c复制#define ALARM_DEBOUNCE 3
uint8_t CheckAlarm(float current, float threshold)
{
static uint8_t count = 0;
if(current > threshold){
if(++count >= ALARM_DEBOUNCE){
count = ALARM_DEBOUNCE;
return 1;
}
}else{
count = 0;
}
return 0;
}
4. 系统优化经验分享
4.1 电源管理技巧
野外部署时建议:
- 采用太阳能供电时,蓄电池容量≥20Ah
- 所有传感器共用电源前加磁珠滤波
- 继电器线圈两端并联续流二极管
实测发现,加入0.1μF去耦电容后,系统稳定性提升明显:
- 复位次数从日均3次降为0次
- 传感器读数波动减少40%
4.2 抗干扰设计
- 信号线采用双绞线传输
- 模拟信号走线避开高频数字信号
- 关键IO口添加TVS二极管防护
- 软件上采用中值滤波算法:
c复制float MedianFilter(float new_data)
{
static float buffer[5] = {0};
static uint8_t index = 0;
buffer[index++] = new_data;
if(index >= 5) index = 0;
// 排序取中值
float temp[5];
memcpy(temp, buffer, sizeof(temp));
BubbleSort(temp, 5);
return temp[2];
}
5. 典型问题解决方案
5.1 WiFi连接不稳定
常见原因及对策:
- 天线位置不当:应远离金属物体
- 供电不足:确保3.3V电源纹波<50mV
- 固件版本过旧:升级至最新AT固件
实测发现,在ESP8266模块的VCC引脚并联470μF电容后:
- 连接成功率从75%提升至98%
- 平均传输延时降低60ms
5.2 屏幕显示异常
TFT屏常见问题处理:
- 花屏:检查FSMC时序配置
- 残影:增加消隐时间
- 颜色失真:重新校准Gamma值
优化后的刷新策略:
- 局部刷新代替全屏刷新
- 使用DMA传输数据
- 开启帧缓冲机制
6. 系统扩展方向
- 增加LoRa无线组网功能,传输距离可达5km
- 集成NB-IoT模块,实现蜂窝网络接入
- 添加摄像头模块,实现作物生长图像监测
- 结合机器学习算法,实现病虫害预警
在现有系统中添加Modbus RTU协议后,成功实现了与PLC控制系统的对接,这是很多农业大棚项目需要的功能。具体实现时要注意:
- 保持波特率一致(通常9600bps)
- 正确配置从机地址
- 处理CRC校验时注意字节顺序
