1. 项目概述:当STM32遇上智慧养殖
去年参观某现代化养猪场时,我被其环境控制系统震撼到了——温湿度传感器实时监测,自动喂料机精准投喂,这些设备的核心控制器清一色都是STM32。作为嵌入式开发者,我决定用最普及的STM32F103C8T6开发板,搭建一套低成本高可靠的生猪养殖监控系统原型。
这个系统需要解决三个核心问题:环境参数监测(温湿度、氨气浓度)、饲料投喂自动化、异常情况预警。相比传统人工巡查方式,单片机系统能实现24小时不间断监控,数据记录误差小于1%,饲料浪费可减少30%以上。特别适合中小型养殖场进行智能化改造,硬件总成本控制在500元以内。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 硬件组成框图
整个系统采用模块化设计,核心部件包括:
- 主控单元:STM32F103C8T6最小系统板(72MHz主频,64KB Flash)
- 环境监测模块:
- DHT22温湿度传感器(±0.5℃精度)
- MQ-135氨气传感器(10-1000ppm量程)
- 执行机构:
- 5V直流减速电机(控制饲料闸门)
- 继电器模块(控制通风设备)
- 人机交互:
- 0.96寸OLED显示屏(128x64分辨率)
- 蜂鸣器报警模块
- 通信模块:
- ESP8266 WiFi模块(上传数据至云平台)
- TF卡存储模块(本地数据备份)
2.2 软件架构设计
采用分层架构确保系统可靠性:
- 硬件驱动层:HAL库封装各外设操作
- 业务逻辑层:
- 环境数据采集任务(100ms周期)
- 喂食控制任务(定时+手动触发)
- 异常检测任务(阈值比较)
- 应用层:
- 本地OLED界面显示
- 云端数据同步(MQTT协议)
关键设计要点:所有传感器采用防潮封装,电机驱动电路加入光耦隔离,通信模块做好抗干扰处理。
3. 核心功能实现细节
3.1 环境数据采集系统
传感器数据采集采用DMA+ADC方式提高效率:
c复制// ADC多通道DMA配置示例
void ADC_Config(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DMAContinuousRequests = ENABLE;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_1; // 温度
sConfig.Rank = ADC_REGULAR_RANK_1;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_2; // 氨气
sConfig.Rank = ADC_REGULAR_RANK_2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
数据处理采用滑动平均滤波:
c复制#define FILTER_LEN 5
float temp_filter[FILTER_LEN] = {0};
float moving_average(float new_val) {
static uint8_t idx = 0;
temp_filter[idx++] = new_val;
if(idx >= FILTER_LEN) idx = 0;
float sum = 0;
for(uint8_t i=0; i<FILTER_LEN; i++) {
sum += temp_filter[i];
}
return sum/FILTER_LEN;
}
3.2 自动喂食控制逻辑
喂食策略采用时间触发+条件触发双模式:
- 定时喂食(每天6:00、12:00、18:00)
- 体重触发(需连接电子秤模块)
- 紧急手动喂食(按键触发)
电机驱动采用PWM调速控制:
c复制// 步进电机控制示例
void Feed_Motor_Control(uint8_t angle) {
TIM_OC_InitTypeDef sConfigOC = {0};
htim3.Instance->CCR1 = angle; // 修改占空比
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
}
4. 实际部署中的经验总结
4.1 电磁干扰处理方案
养殖场环境存在以下干扰源:
- 饲料粉碎机(大功率电机启停)
- 高压冲洗设备(水雾导致短路风险)
- 无线设备(对WiFi模块的2.4G干扰)
应对措施:
- 所有信号线使用双绞线+磁环
- 电源输入端加入TVS二极管
- 外壳做IP65防水处理
- WiFi天线外置并远离金属物体
4.2 数据可靠性保障
为防止突发断电导致数据丢失:
- 采用"缓存+TF卡"双备份策略
- 每次数据更新先写入内部Flash
- 每10分钟同步到TF卡
- 云端数据采用MQTT QoS1级别
异常处理流程:
mermaid复制graph TD
A[传感器数据异常] --> B{是否连续3次异常}
B -->|是| C[触发蜂鸣器报警]
B -->|否| D[标记为脏数据]
C --> E[发送短信通知]
E --> F[等待人工确认]
5. 系统优化方向
5.1 功耗优化方案
当前系统待机功耗约120mA,可通过以下方式降低:
- 使用STM32L系列低功耗MCU
- 传感器采用间歇工作模式(如每分钟唤醒一次)
- 关闭未使用的外设时钟
实测数据对比:
| 模式 | 电流消耗 | 响应延迟 |
|---|---|---|
| 全速运行 | 150mA | <10ms |
| 低功耗模式 | 35mA | 200ms |
| 深度睡眠 | 5mA | 1s |
5.2 扩展功能建议
- 增加AI摄像头(识别猪只行为异常)
- 部署LoRa无线传感器网络(大型猪舍适用)
- 添加水质监测模块(饮水系统监控)
- 对接政府检疫数据平台
这个项目最让我意外的是STM32的ADC在潮湿环境下会出现基准电压漂移,后来在VDDA引脚加装0.1μF+10μF并联电容才解决。建议所有农业应用项目都要重点考虑环境适应性设计,包括防潮、防尘、防腐蚀三个维度。
