1. 项目背景与核心功能
智慧农业大棚监控系统是现代农业技术的典型应用,它通过物联网技术将传统农业种植升级为数字化管理。我去年在山东某草莓种植基地实地考察时,发现农户们最头疼的就是需要24小时人工巡查大棚环境。这个基于STM32的系统就是为了解决这个问题而设计的,它能实现:
- 环境参数全监控:同时采集空气温湿度、光照、CO₂浓度、土壤湿度等关键指标,精度比人工测量高3-5倍
- 双模控制:既支持根据预设阈值自动调节(比如温度超过30℃自动开风扇),也能通过手机APP远程手动控制
- 实时警报:当土壤湿度低于40%或CO₂超过2000ppm时,现场蜂鸣器会立即报警
提示:STM32F103C8T6这款芯片特别适合农业场景,72MHz主频处理传感器数据绰绰有余,而且批量采购单价不到20元,成本优势明显。
2. 硬件设计实战解析
2.1 核心控制器选型
对比过Arduino和树莓派后,最终选择STM32F103C8T6有三个原因:
- 内置12位ADC能直接读取土壤传感器的模拟信号
- 5个USART接口完美适配多个串口设备
- 待机电流仅2μA,配合太阳能供电可连续工作30天
// 芯片初始化示例
void MCU_Init(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 释放JTAG引脚
}
2.2 传感器组网方案
传感器选型要考虑农业大棚的特殊环境:
- DHT22:比DHT11贵但精度更高,温度误差±0.5℃
- YL-69土壤传感器:需要做防腐蚀处理,我在探头镀了一层金膜
- MH-Z19B:NDIR原理的CO₂传感器,不受湿度影响
| 传感器类型 | 接口方式 | 采样频率 | 功耗 |
|---|---|---|---|
| 光照BH1750 | I2C | 1Hz | 0.12mA |
| 土壤YL-69 | ADC | 0.5Hz | 5mA |
| CO₂ MH-Z19 | UART | 1/60Hz | 18mA |
2.3 无线通信模块
ESP8266的固件烧写是个坑,我推荐使用AT固件v1.7.0版本,稳定性最好。实测中发现:
- 在金属大棚内信号衰减严重,要外接PCB天线
- 每次发送数据后需延时500ms,否则容易丢包
- 配网时要用SmartConfig而非AT指令,农户操作更简单
3. PCB设计避坑指南
3.1 电路设计要点
四层板布局经验:
- 电源层单独划分,给模拟电路和数字电路独立供电
- 传感器信号走线要远离ESP8266的射频部分
- 所有IO口加上TVS二极管防静电
# 使用KiCad设计时的DRC规则设置
drc_rules = {
"min_track": 0.2, # 6mil线宽
"min_via": 0.3, # 12mil过孔
"clearance": 0.15 # 6mil间距
}
3.2 抗干扰设计
在大棚实测时遇到继电器动作导致传感器读数跳变,解决方案:
- 在继电器线圈并联1N4148续流二极管
- ADC基准源改用REF3030
- 模拟地线采用星型接地
4. 软件系统开发
4.1 数据采集优化
采用滑动窗口滤波算法,比简单均值滤波响应更快:
#define WINDOW_SIZE 5
float sliding_window[WINDOW_SIZE];
float filter_update(float new_val) {
static int index = 0;
sliding_window[index++] = new_val;
if(index >= WINDOW_SIZE) index = 0;
float sum = 0;
for(int i=0; i<WINDOW_SIZE; i++) {
sum += sliding_window[i];
}
return sum/WINDOW_SIZE;
}
4.2 控制逻辑实现
采用状态机设计模式,比简单if-else更易维护:
typedef enum {
STATE_NORMAL,
STATE_HIGH_TEMP,
STATE_LOW_HUMIDITY
} SystemState;
void control_logic(void) {
static SystemState state = STATE_NORMAL;
switch(state) {
case STATE_NORMAL:
if(temp > 30) state = STATE_HIGH_TEMP;
break;
case STATE_HIGH_TEMP:
fan_on();
if(temp < 28) state = STATE_NORMAL;
break;
// 其他状态处理...
}
}
5. APP开发关键点
使用Flutter跨平台框架开发,重点功能:
- 数据看板:用ECharts实现动态曲线
- 设备控制:采用MQTT协议,QoS设置为1保证指令必达
- 阈值设置:本地存储最近10组预设值
// MQTT消息处理示例
void _onMessage(String topic, Uint8List payload) {
final message = utf8.decode(payload);
setState(() {
_sensorData = jsonDecode(message);
});
}
6. 系统测试经验
在内蒙古某马铃薯种植基地的测试数据:
| 指标 | 预期值 | 实测值 | 偏差 |
|---|---|---|---|
| 温度控制精度 | ±1℃ | ±0.8℃ | 达标 |
| 响应延迟 | <3s | 2.4s | 达标 |
| 无线距离 | 50m | 35m | 需改进 |
遇到的典型问题:
- 早晨结露导致土壤传感器短路 - 解决方法:涂三防漆
- ESP8266夏季高温死机 - 解决方法:增加散热片
- 锂电池冬季续航下降 - 改用耐低温电池
这个项目最让我自豪的是帮助农户减少了70%的人工巡查时间。有个细节想特别提醒:大棚金属骨架会屏蔽信号,天线位置要避开钢结构。
&spm=1001.2101.3001.5002&articleId=155654365&d=1&t=3&u=30873156216d4d64b15ad30d0f88efcf)
364

被折叠的 条评论
为什么被折叠?



