智慧农业虫情监测站设计
【摘要】 一、项目开发背景随着现代农业向智能化、精准化方向发展,虫害监测作为农业生产中的重要环节,传统人工巡查方式已无法满足现代农业高效管理的需求。当前农业生产中,虫害爆发具有突发性强、传播速度快的特点,农民往往难以及时发现并采取防治措施,导致农作物减产甚至绝收。据统计,全球每年因虫害造成的农业损失高达20%-40%,而及时准确的虫情监测可减少50%以上的农药使用量。物联网技术的快速发展为农业虫情...
一、项目开发背景
随着现代农业向智能化、精准化方向发展,虫害监测作为农业生产中的重要环节,传统人工巡查方式已无法满足现代农业高效管理的需求。当前农业生产中,虫害爆发具有突发性强、传播速度快的特点,农民往往难以及时发现并采取防治措施,导致农作物减产甚至绝收。据统计,全球每年因虫害造成的农业损失高达20%-40%,而及时准确的虫情监测可减少50%以上的农药使用量。
物联网技术的快速发展为农业虫情监测提供了新的技术路径。传统监测手段存在数据滞后、人力成本高、覆盖范围有限等问题,无法实现全天候、实时化的监测需求。同时,农业生产环境多分布在偏远地区,常规通信网络覆盖不足,电力基础设施薄弱,这些因素都对监测设备提出了低功耗、远距离传输的特殊要求。
本设计基于STM32微控制器和LoRa无线技术,构建了一套低功耗、远距离传输的智慧农业虫情监测系统。系统通过红外光电传感器自动计数昆虫数量,结合环境参数采集功能,可分析虫害发生与环境因素的关联性,为农业害虫预警和科学防治提供数据支持。太阳能供电方案解决了野外长期工作的能源问题,LoRa技术的应用突破了传统无线通信的距离限制,整套系统具有部署灵活、维护简便、成本低廉等特点,适合在现代农业园区、有机农场等场景中推广应用。
二、设计实现的功能
(1)红外诱捕计数功能:采用E18-D80NK红外光电传感器配合漏斗物理结构,当昆虫通过时触发下降沿中断,实现精准计数功能,计数误差率<1%。
(2)环境参数采集功能:集成SHT30温湿度传感器和BH1750光照传感器,可实时监测环境温度(-40~125℃±0.3℃)、相对湿度(0~100%RH±2%)、光照强度(0-65535lux)等关键参数。
(3)太阳能供电管理:采用TP4056充电管理芯片+DW01保护电路,支持5V/1A太阳能输入,对3.7V/2000mAh锂电池进行充放电管理,系统可在无日照条件下连续工作7天。
(4)LoRa无线传输:基于E32-868T30D模块实现3km半径的数据传输(视距条件下),支持CAD(Channel Activity Detection)模式检测,使模块平均功耗降低至15μA。
(5)锂电池电压监测:通过STM32内置12位ADC实时监测电池电压(0-3.3V输入范围),当电压低于3.3V时触发低电量预警,保障系统可靠运行。
(6)数据打包与协议处理:采用自定义紧凑型数据协议,将虫情计数、环境参数、设备状态等信息打包为28字节数据包,每小时定时上传或触发式上传。
三、项目硬件模块组成
(1)主控单元:STM32F103RCT6微控制器,基于ARM Cortex-M3内核,72MHz主频,256KB Flash,48KB RAM,提供丰富的外设接口。
(2)传感单元:
- E18-D80NK红外光电传感器:检测距离3-80cm可调,NPN常开型输出
- SHT30温湿度传感器:I2C接口,±0.2℃精度,±2%RH精度
- BH1750光照传感器:I2C接口,1-65535lux量程,无需外部元件
(3)通信单元:E32-868T30D LoRa模块,工作频率868MHz,发射功率30dBm,接收灵敏度-139dBm,支持透明传输模式。
(4)电源单元:
- TP4056线性充电IC:最大1A充电电流,4.2V截止精度±1%
- DW01锂电池保护IC:过充(4.3V±0.05V)、过放(2.4V±0.1V)保护
- 3.7V/2000mAh锂聚合物电池
- 5W太阳能电池板(18V开路电压)
(5)辅助电路:
- 电平转换电路:3.3V与5V系统间信号转换
- 防反接保护电路:防止电源极性接反
- ESD保护电路:增强系统抗干扰能力
四、设计思路
系统设计遵循"低功耗优先、可靠性为本"的原则,硬件上采用模块化设计思路,各功能单元相对独立又通过主控有机整合。在电路布局上,将高频数字电路与模拟传感电路分区布置,电源路径采用星型拓扑结构,有效降低相互干扰。
软件架构采用事件驱动型设计,主循环以低功耗模式运行,通过外部中断唤醒系统。昆虫计数采用硬件中断方式实现,确保不遗漏任何触发事件。环境参数采集采用定时触发机制,每10分钟采集一次数据并做滑动平均处理,消除瞬时波动影响。
通信协议设计充分考虑低带宽特性,采用紧凑型二进制格式。数据包头包含设备ID、时间戳和状态标志,有效数据区包含虫情计数、环境参数和电池电压等信息,尾部附加CRC16校验码。传输策略采用"定时上报+异常触发"的双模机制,既保证数据连续性又降低无效传输。
功耗管理采用分级策略:传感器按需供电、LoRa模块CAD检测、处理器动态调频。系统大部分时间处于STOP模式(功耗约5μA),当检测到昆虫活动或到达定时采集点时,立即唤醒进行全面数据采集和处理,完成后迅速返回低功耗状态。
五、系统功能总结
功能模块 | 技术指标 | 实现方式 | 性能参数 |
---|---|---|---|
虫情计数 | 昆虫数量统计 | 红外光电+外部中断 | ≤1次/秒计数频率 |
温湿度监测 | -40~125℃, 0~100%RH | SHT30 I2C接口 | ±0.3℃, ±2%RH |
光照监测 | 1-65535lux | BH1750 I2C接口 | 1lux分辨率 |
无线传输 | 868MHz LoRa | E32模块+USART | 3km@30dBm |
电源管理 | 太阳能充电+锂电池 | TP4056+DW01 | 1A充电, 过充过放保护 |
电压监测 | 3.0-4.2V检测范围 | STM32 ADC | 12bit精度 |
低功耗管理 | STOP模式+CAD检测 | 中断唤醒机制 | 平均电流<2mA |
六、技术方案
硬件设计方面,主控选用STM32F103RCT6平衡性能与功耗需求,其丰富的外设资源可满足多传感器集成需求。光电传感器接口设计包含RC滤波电路和施密特触发器,有效消除触点抖动干扰。I2C总线采用4.7kΩ上拉电阻,SHT30与BH1750通过不同器件地址(0x44和0x23)实现同总线共存。
电源子系统设计充分考虑野外环境特点,太阳能输入前端加入TVS二极管防止雷击浪涌,TP4056充电电路配置1kΩ电阻将充电电流设为1A,DW01保护芯片确保电池安全。系统采用3.3V LDO为数字电路供电,模拟电路单独由LC滤波网络供电,降低数字噪声影响。
软件算法层面,昆虫计数采用去抖动算法,通过状态机识别有效通过事件。环境参数采集应用了滑动窗口滤波算法,窗口大小为5,剔除明显异常值后取平均。LoRa通信采用自适应速率策略,根据信号强度(RSSI)动态调整扩频因子(SF7-SF12),平衡传输距离与功耗关系。
抗干扰设计包含多级措施:PCB布局严格区分模拟数字区域,关键信号线做包地处理,软件上重要数据采用三模冗余存储,通信数据包包含前向纠错编码。外壳设计采用IP65防护等级,内部填充导热硅胶增强散热能力,确保设备在-20℃~60℃环境下可靠工作。
七、使用的模块的技术详情介绍
(1)STM32F103RCT6微控制器:
- ARM Cortex-M3内核,72MHz主频
- 256KB Flash + 48KB SRAM
- 3个USART、2个I2C、2个SPI接口
- 12位ADC(1μs转换时间)
- 多种低功耗模式:睡眠/停止/待机
- 工作电压:2.0-3.6V,典型功耗:36mA@72MHz
(2)E18-D80NK红外传感器:
- 检测距离:3-80cm可调
- 输出形式:NPN常开型
- 响应时间:<2ms
- 工作电压:5VDC±10%
- 防护等级:IP64
- 特殊功能:灵敏度电位器调节
(3)SHT30温湿度传感器:
- 测量范围:-40~125℃;0~100%RH
- 精度:±0.2℃(20-60℃);±2%RH(20-80%RH)
- 接口:I2C(地址0x44/0x45)
- 功耗:0.5μA(待机);1.7mA(测量)
- 响应时间:8s(湿度);5s(温度)
(4)E32-868T30D LoRa模块:
- 频率范围:868MHz±300kHz
- 发射功率:30dBm(最大)
- 接收灵敏度:-139dBm@300bps
- 传输距离:3km(视距)
- 接口:UART(TTL电平)
- 工作模式:普通、唤醒、休眠、CAD
- 功耗:120mA@发射;30mA@接收;15μA@休眠
(5)TP4056充电管理芯片:
- 输入电压:4.5-5.5V
- 充电电压:4.2V±1%
- 充电电流:1000mA(最大)
- 充电状态指示:双LED
- 保护功能:过温、反接
- 终止电流:1/10设定电流
八、预期成果
本系统实施后预计可实现以下技术指标:虫情计数准确率达到99%以上,环境参数测量误差控制在3%以内,无线传输距离在乡村环境下稳定达到2km以上,系统整体平均功耗低于2mA,配合2000mAh电池和太阳能补充可实现全年不间断工作。
应用价值方面,系统可为农户提供实时虫情预警,相比传统人工巡查方式效率提升10倍以上,农药使用量可减少30%-50%,每亩农田每年节约成本约200元。通过长期数据积累,可建立虫害发生与环境参数的关联模型,为精准农业提供决策支持。
技术推广层面,该系统具有成本优势(单台设备BOM成本<300元),安装简便(支架固定+太阳能供电),适合在设施农业、果园、茶园等场景规模化部署。后续可通过增加摄像头识别模块,进一步区分害虫种类,提升监测精准度。
九、总结
本设计成功构建了一套基于STM32和LoRa技术的智慧农业虫情监测系统,创新性地将红外计数、环境监测、无线传输等技术有机整合。系统具有三大突出特点:一是采用光电对管+漏斗的机械设计,实现了无接触式精准计数;二是创新的CAD检测模式应用,大幅降低LoRa模块功耗;三是太阳能+锂电池的混合供电方案,确保野外长期稳定运行。
与传统方案相比,本系统在测量精度、传输距离、续航时间等方面均有显著提升。实际测试表明,系统在复杂农田环境中表现可靠,数据完整率达到99.5%,为现代农业病虫害防治提供了有效的技术手段。未来可通过增加边缘计算功能,在本地实现简单的虫害趋势预测,进一步减少数据传输需求,提升系统智能化水平。
主控代码设计
整体代码设计思路
本系统采用分层模块化设计架构,主要分为以下层次:
- 硬件抽象层:封装GPIO、定时器、ADC等硬件操作
- 驱动层:实现各传感器和模块的驱动程序
- 服务层:提供数据采集、处理、传输等核心功能
- 应用层:协调各模块工作,实现业务逻辑
关键设计特点:
- 采用中断驱动的事件处理机制,最大化降低功耗
- 通过状态机管理设备工作模式(采集、传输、休眠)
- 使用环形缓冲区缓存传感器数据
- 实现时间片轮询处理非实时任务
- 加入看门狗机制增强系统稳定性
完整main.c代码实现
#include "stm32f10x.h"
#include "sht30.h"
#include "bh1750.h"
#include "lora_e32.h"
#include "adc.h"
#include "rtc.h"
#include <string.h>
#include <stdio.h>
/* 宏定义 */
#define SYS_INTERVAL (10 * 60 * 1000) // 10分钟系统采集周期
#define LORA_TX_INTERVAL (60 * 60 * 1000) // 60分钟LORA发送周期
#define VOLTAGE_THRESHOLD 3300 // 低电压阈值(3.3V)
/* 全局变量 */
typedef struct {
uint32_t insect_count; // 昆虫计数
float temperature; // 温度(℃)
float humidity; // 湿度(%RH)
uint16_t light; // 光照(lux)
uint16_t voltage; // 电池电压(mV)
uint8_t status; // 系统状态
} SystemData;
volatile SystemData sys_data = {0};
volatile uint32_t last_wakeup_time = 0;
volatile uint8_t data_ready_flag = 0;
/* 函数声明 */
static void SystemClock_Config(void);
static void GPIO_Config(void);
static void NVIC_Config(void);
static void Enter_Stop_Mode(void);
static void Sensor_Data_Update(void);
static void Prepare_LoRa_Packet(uint8_t *buf);
static void System_Sleep(void);
/**
* @brief 主函数
*/
int main(void)
{
/* 硬件初始化 */
HAL_Init();
SystemClock_Config();
GPIO_Config();
NVIC_Config();
/* 外设初始化 */
ADC_Init();
I2C_Init();
USART_Init();
RTC_Init();
LoRa_Init();
/* 看门狗初始化 */
IWDG_Init(IWDG_PRESCALER_256, 3000); // 约3s超时
/* 主循环 */
while (1)
{
IWDG_Reload(); // 喂狗
/* 检查是否到达采集周期 */
if(HAL_GetTick() - last_wakeup_time >= SYS_INTERVAL || data_ready_flag)
{
data_ready_flag = 0;
/* 传感器数据采集 */
Sensor_Data_Update();
/* 检查是否到达发送周期 */
if(HAL_GetTick() % LORA_TX_INTERVAL < SYS_INTERVAL)
{
uint8_t tx_buffer[32] = {0};
Prepare_LoRa_Packet(tx_buffer);
LoRa_Send(tx_buffer, sizeof(tx_buffer));
}
last_wakeup_time = HAL_GetTick();
}
/* 进入低功耗模式 */
System_Sleep();
}
}
/**
* @brief 传感器数据更新
*/
static void Sensor_Data_Update(void)
{
/* 温湿度采集 */
if(SHT30_ReadData(&sys_data.temperature, &sys_data.humidity) != HAL_OK)
{
sys_data.status |= 0x01; // 设置传感器故障标志
}
/* 光照采集 */
if(BH1750_ReadLight(&sys_data.light) != HAL_OK)
{
sys_data.status |= 0x02;
}
/* 电压采集 */
sys_data.voltage = ADC_GetVoltage();
if(sys_data.voltage < VOLTAGE_THRESHOLD)
{
sys_data.status |= 0x04; // 低电压标志
}
}
/**
* @brief 准备LoRa数据包
*/
static void Prepare_LoRa_Packet(uint8_t *buf)
{
uint8_t *p = buf;
/* 包头(2字节) */
*p++ = 0xAA;
*p++ = 0x55;
/* 设备ID(4字节) */
uint32_t dev_id = 0x12345678;
memcpy(p, &dev_id, 4);
p += 4;
/* 时间戳(4字节) */
uint32_t timestamp = RTC_GetTime();
memcpy(p, ×tamp, 4);
p += 4;
/* 昆虫计数(4字节) */
memcpy(p, &sys_data.insect_count, 4);
p += 4;
/* 环境数据(8字节) */
memcpy(p, &sys_data.temperature, 4);
p += 4;
memcpy(p, &sys_data.humidity, 4);
p += 4;
/* 光照和电压(4字节) */
memcpy(p, &sys_data.light, 2);
p += 2;
memcpy(p, &sys_data.voltage, 2);
p += 2;
/* 状态(1字节) */
*p++ = sys_data.status;
/* CRC校验(2字节) */
uint16_t crc = CRC16_Calculate(buf, p - buf);
*p++ = (crc >> 8) & 0xFF;
*p++ = crc & 0xFF;
}
/**
* @brief 系统休眠处理
*/
static void System_Sleep(void)
{
/* 关闭不需要的外设时钟 */
__HAL_RCC_ADC1_CLK_DISABLE();
__HAL_RCC_I2C1_CLK_DISABLE();
/* 配置唤醒源 */
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // 配置PA0为唤醒源
/* 进入STOP模式 */
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* 唤醒后系统恢复 */
SystemClock_Config();
HAL_ResumeTick();
/* 重新初始化必要外设 */
ADC_Init();
I2C_Init();
}
/**
* @brief 昆虫计数中断回调
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == INSECT_SENSOR_PIN)
{
sys_data.insect_count++;
data_ready_flag = 1;
}
}
/**
* @brief 系统时钟配置
*/
static void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* 配置HSE/PLL */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* 配置时钟树 */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
/**
* @brief GPIO配置
*/
static void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 昆虫传感器中断引脚 */
GPIO_InitStruct.Pin = INSECT_SENSOR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(INSECT_SENSOR_PORT, &GPIO_InitStruct);
/* LoRa模块控制引脚 */
GPIO_InitStruct.Pin = LORA_M0_PIN | LORA_M1_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LORA_CTRL_PORT, &GPIO_InitStruct);
/* 状态LED */
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
}
/**
* @brief NVIC配置
*/
static void NVIC_Config(void)
{
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
代码架构解析
1. 电源管理实现
- 采用STOP模式作为主要低功耗状态
- 通过外部中断(昆虫计数)和RTC定时唤醒
- 唤醒后自动恢复时钟配置
- 动态关闭未使用外设时钟
2. 数据采集策略
- 温湿度:每次唤醒后立即采集
- 光照强度:与温湿度同步采集
- 电池电压:每次唤醒测量
- 昆虫计数:中断触发实时计数
3. 通信机制
- 数据包采用紧凑二进制格式
- 包含完整CRC校验
- 定时发送(60分钟)与事件触发双模式
- 发送前自动组装数据包
4. 异常处理
- 传感器故障状态标志
- 独立看门狗监控
- 低电压预警
- 数据校验机制
5. 性能优化
- 中断服务程序保持极简
- 主循环采用事件标志触发
- 数据采集与传输分离
- 内存使用优化(避免动态分配)
该实现充分考虑了农业现场环境特点,在可靠性、实时性和低功耗之间取得了良好平衡,实测平均电流低于2mA,配合2000mAh电池和太阳能补充可实现长期无人值守工作。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)