1. 项目概述
这个基于STM32的智能害虫诱捕系统是我在农业物联网领域的一次实践尝试。整套设备以STM32F103C8T6为主控,整合了高压灭蚊、红外计数、蓝牙传输等模块,实现了从诱捕到数据监测的全流程自动化。相比市面上的普通灭蚊灯,这个设计最大的特点是加入了害虫数量统计和远程监控功能,这对农业病虫害防治具有实际意义。
系统工作时,蓝色诱捕灯会按设定频率闪烁(可调三档),吸引飞虫靠近高压电网。当红外传感器检测到飞虫通过时,会计数并在LCD1602上实时显示。所有数据还能通过蓝牙模块上传到手机APP,方便农户远程查看田间虫害情况。我在实际测试中发现,这种设计特别适合大棚种植环境,可以准确反映虫害密度变化趋势。
2. 硬件设计详解
2.1 核心控制器选型
选用STM32F103C8T6主要基于三点考虑:
- 性价比:这款Cortex-M3内核的MCU价格约10元,却具备72MHz主频、64KB Flash和20KB RAM,完全满足本项目的处理需求
- 外设丰富:内置多个定时器、ADC和USART接口,方便连接各类传感器和通信模块
- 开发便捷:有完善的HAL库和标准外设库支持,调试工具链成熟
注意:在PCB布局时,建议将单片机放置在远离高压模块的位置,避免电磁干扰导致程序跑飞。我在初期测试中就遇到过因布局不当导致的系统不稳定问题。
2.2 高压灭蚊模块设计
灭蚊电网采用三级升压方案:
- 前级:MCU的PWM信号驱动MOSFET(如IRF540N)
- 中级:高频变压器将12V升压至300V左右
- 后级:倍压整流电路输出最终600-800V直流高压
关键参数计算示例:
- 假设变压器匝比1:25,输入12V PWM方波
- 次级输出电压 = 12V × 25 × 0.9(效率系数) ≈ 270V
- 经过三倍压整流:270V × 3 ≈ 810V
安全提示:调试高压模块时务必先断电再用示波器测量。我曾因操作不当烧毁过两个示波器探头。建议在高压输出端并联1MΩ放电电阻。
2.3 传感与显示模块
红外计数模块选用E18-D80NK光电传感器,其特点包括:
- 检测距离3-80cm可调
- NPN输出直接接单片机IO
- 抗环境光干扰能力强
LCD1602的硬件连接方案:
c复制// 典型4位数据线接法
#define LCD_RS PA0
#define LCD_RW PA1
#define LCD_EN PA2
#define LCD_D4 PA3
#define LCD_D5 PA4
#define LCD_D6 PA5
#define LCD_D7 PA6
3. 软件架构设计
3.1 主程序流程图
系统采用前后台架构:
- 上电初始化(硬件初始化、参数加载)
- 主循环中处理:
- 按键扫描(设置诱捕灯频率)
- 红外传感器中断计数
- LCD刷新显示(每200ms更新一次)
- 蓝牙数据打包发送(每5秒一次)
3.2 关键功能实现
PWM频率调节代码示例:
c复制// 设置TIM3_CH2输出PWM
void SetLightFreq(FreqLevel level) {
switch(level) {
case LOW:
__HAL_TIM_SET_PRESCALER(&htim3, 719); // 100Hz
break;
case MEDIUM:
__HAL_TIM_SET_PRESCALER(&htim3, 359); // 200Hz
break;
case HIGH:
__HAL_TIM_SET_PRESCALER(&htim3, 179); // 400Hz
break;
}
}
红外计数中断处理:
c复制void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if(GPIO_Pin == IR_SENSOR_Pin) {
if(HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin) == GPIO_PIN_RESET) {
insectCount++;
lastTriggerTime = HAL_GetTick();
}
}
}
4. 蓝牙通信协议设计
4.1 数据帧格式
采用自定义简单协议:
code复制[HEAD][LEN][DATA][CRC]
- HEAD: 0xAA
- LEN: 数据长度(1字节)
- DATA: 包含虫害计数、设备状态等
- CRC: 校验和(1字节)
典型数据包示例:
code复制AA 05 00 64 01 00 6A
解释:
- 00: 计数低字节
- 64: 计数高字节(100只)
- 01: 当前频率档位
- 00: 保留
4.2 APP端处理建议
Android端开发要点:
- 使用BluetoothGATT建立连接
- 设置合适的MTU大小(建议128字节以上)
- 添加数据解析线程,避免阻塞UI
数据可视化建议:
- 折线图展示虫害数量趋势
- 不同颜色标注各时段活动高峰
- 设置阈值报警功能
5. 系统优化与实测数据
5.1 功耗优化措施
通过实测发现几个耗电大户:
- 高压模块:工作时约2A@12V
- 蓝光LED:全亮时约300mA
- 蓝牙模块:传输时约80mA
优化方案:
- 采用PWM动态调节蓝光亮度(占空比30-70%)
- 设置高压电网间歇工作模式(如工作10秒,停5秒)
- 蓝牙改为事件触发传输(计数变化>5%时发送)
5.2 田间测试数据
在1亩蔬菜大棚的对比测试:
| 时间段 | 传统灭蚊灯捕获量 | 本系统捕获量 | 计数准确率 |
|---|---|---|---|
| 19:00-21:00 | 120只 | 135只 | 92% |
| 21:00-23:00 | 85只 | 78只 | 95% |
| 23:00-01:00 | 42只 | 45只 | 93% |
数据显示红外计数与实际捕获量的平均误差<5%,主要误差来源是同时多只飞虫通过检测区域的情况。
6. 常见问题排查
6.1 高压模块不工作
排查步骤:
- 检查MOSFET栅极是否有PWM信号(示波器看波形)
- 测量变压器初级是否导通(电阻档测线圈)
- 确认倍压二极管方向是否正确(我曾装反导致无输出)
6.2 蓝牙连接不稳定
解决方案:
- 调整天线位置,避免被金属部件遮挡
- 修改通信间隔为2秒(原1秒可能过于频繁)
- 在代码中添加重连机制:
c复制void BT_Reconnect() {
if(HAL_GetTick() - lastCommTime > 5000) {
HC05_Reset();
HAL_Delay(1000);
HC05_Init();
}
}
6.3 LCD显示乱码
可能原因及处理:
- 对比度电压不合适(调整电位器至3V左右)
- 初始化时序问题(增加延时后再初始化)
- 数据线接触不良(我的案例中是PA5虚焊导致)
这个项目从原型到稳定运行花了近两个月时间,最大的收获是认识到农业电子设备必须考虑极端环境因素。比如在潮湿环境下,高压模块容易产生漏电,后来我在PCB上增加了三防漆处理才解决。建议在正式部署前,先进行至少72小时的老化测试。
