用Lora改造传统农业监测:STM32+DHT11+风速传感器的低成本预警方案(含阈值设置技巧)

在广袤的农田环境中,环境参数的实时监测对作物生长至关重要。传统有线监测系统布线复杂、维护困难,而基于蜂窝网络的方案又面临高功耗和高成本的问题。本文将介绍一种基于Lora无线通信技术的农业环境监测系统,采用STM32微控制器搭配DHT11温湿度传感器和风速传感器,实现低功耗、远距离的农田环境监测。

1. 系统架构设计

1.1 硬件组成

系统采用主从式架构,由多个监测节点(从机)和一个数据中心节点(主机)组成:

  • 监测节点硬件配置

    • 主控芯片:STM32F103C8T6(Cortex-M3内核,72MHz主频)
    • 温湿度传感器:DHT11(±5%湿度精度,±2℃温度精度)
    • 风速传感器:三杯式风速计(0-30m/s量程)
    • 无线模块:SX1278 Lora模块(433MHz频段)
    • 显示单元:0.96寸OLED屏幕
    • 电源管理:18650锂电池+太阳能充电模块
  • 数据中心节点硬件配置

    • 主控芯片:STM32F103C8T6
    • 无线模块:SX1278 Lora模块
    • 人机交互:按键+OLED屏幕
    • 数据存储:MicroSD卡模块
    • 网络接口:可选4G模块(用于远程数据传输)

1.2 通信协议设计

Lora网络采用星型拓扑结构,通信参数配置如下:

参数 设置值 说明
频率 433MHz 中国免许可频段
带宽 125kHz 平衡距离与速率
扩频因子 10 提高接收灵敏度
编码率 4/5 前向纠错比例
发射功率 17dBm 约50mW,兼顾距离与功耗

数据包格式设计为紧凑型二进制协议,减少无线传输开销:

#pragma pack(1)
typedef struct {
    uint16_t preamble;    // 0xAA55
    uint8_t node_id;      // 节点ID
    uint8_t sensor_type;  // 传感器类型
    float temperature;    // 温度值
    float humidity;       // 湿度值
    float wind_speed;     // 风速值
    uint16_t crc;         // CRC16校验
} lora_packet_t;
#pragma pack()

2. 关键硬件选型与优化

2.1 传感器选型对比

针对农业环境监测的特殊需求,我们对常见传感器进行了对比测试:

传感器型号 精度 量程 响应时间 功耗 价格 适用性
DHT11 ±5%RH, ±2℃ 20-90%RH, 0-50℃ 2s 1.5mA 基础监测
DHT22 ±2%RH, ±0.5℃ 0-100%RH, -40-80℃ 2s 1.5mA 高精度
SHT30 ±2%RH, ±0.2℃ 0-100%RH, -40-125℃ 0.8s 1.7mA 专业级
三杯式风速计 ±0.5m/s 0-30m/s 1s 4mA 户外适用
超声波风速仪 ±0.1m/s 0-60m/s 0.1s 15mA 精密测量

提示:在预算有限的农业项目中,DHT11+三杯式风速计的组合已能满足大部分需求,且维护成本低。

2.2 低功耗设计技巧

农业监测设备通常需要长期野外工作,低功耗设计至关重要:

  1. 工作模式切换
void enter_low_power_mode(void) {
    // 关闭外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, DISABLE);
    
    // 配置唤醒源(外部中断)
    EXTI_InitTypeDef EXTI_InitStructure;
    EXTI_InitStructure.EXTI_Line = EXTI_Line0; // PA0按键
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    // 进入STOP模式
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
    
    // 唤醒后恢复时钟
    SystemInit();
}
  1. 数据采集周期优化

    • 正常模式:每5分钟采集一次(风速采样10秒取平均)
    • 异常模式:当数据超过阈值时,自动切换为每分钟采集
    • 夜间模式:22:00-6:00每小时采集一次
  2. 电源管理实测数据

工作状态 电流消耗 持续时间 占总周期比例
深度睡眠 15μA 295秒 98.3%
传感器预热 5mA 2秒 0.7%
数据采集 8mA 2秒 0.7%
Lora发射 120mA 0.5秒 0.2%
OLED显示 20mA 0.5秒 0.1%

理论计算可得平均电流约0.85mA,2000mAh锂电池可支持约100天连续工作。

3. 动态阈值设置与报警机制

3.1 阈值设置实现

系统提供灵活的阈值设置方式,支持:

  • 固定阈值:通过按键现场设置
  • 动态阈值:根据历史数据自动计算
  • 分时段阈值:区分白天/夜间不同标准

阈值设置菜单逻辑:

void threshold_setting_menu(void) {
    uint8_t selection = 0;
    while(1) {
        OLED_Clear();
        OLED_ShowString(0, 0, "1.Temp High");
        OLED_ShowString(0, 2, "2.Temp Low");
        OLED_ShowString(0, 4, "3.Humidity High");
        OLED_ShowString(0, 6, "4.Save & Exit");
        
        if(KEY_UP_PRESSED()) {
            selection = (selection + 3) % 4; // 循环选择
        }
        if(KEY_DOWN_PRESSED()) {
            selection = (selection + 1) % 4;
        }
        
        // 显示选择光标
        OLED_ShowChar(120, selection*2, '>');
        
        if(KEY_OK_PRESSED()) {
            if(selection == 3) {
                save_thresholds();
                break;
            } else {
                adjust_threshold(selection);
            }
        }
    }
}

3.2 智能报警策略

系统采用三级报警机制,避免误报:

  1. 初级报警:单次数据超限,仅记录不报警
  2. 中级报警:连续3次超限,本地蜂鸣器提醒
  3. 高级报警:连续5次超限,远程通知+现场报警

报警逻辑实现:

void check_alarm(float temp, float humidity, float wind) {
    static uint8_t temp_alarm_cnt = 0;
    static uint8_t humidity_alarm_cnt = 0;
    static uint8_t wind_alarm_cnt = 0;
    
    // 温度检查
    if(temp > temp_high_th || temp < temp_low_th) {
        temp_alarm_cnt++;
        if(temp_alarm_cnt >= 5) {
            send_remote_alarm(TEMP_ALARM, temp);
            trigger_local_alarm();
        }
    } else {
        temp_alarm_cnt = 0;
    }
    
    // 湿度检查(类似逻辑)
    // 风速检查(类似逻辑)
}

4. 防尘防水与安装规范

4.1 外壳防护设计

农田环境恶劣,需特别注意防护:

  1. IP65防护等级实现

    • 外壳采用ABS+PC材料
    • 接口处使用硅胶密封圈
    • 透气阀采用GORE防水膜
    • 螺丝孔添加防水胶垫
  2. 传感器安装要点

    • 温湿度传感器避免阳光直射(加装防辐射罩)
    • 风速传感器距地面2-3米,远离障碍物
    • 太阳能板朝南倾斜30°(北半球)

4.2 现场测试数据

在不同天气条件下的系统稳定性测试:

测试环境 通信成功率 数据完整性 备注
晴天 99.2% 100% 理想条件
小雨 98.7% 99.8% 几乎无影响
大雨 95.1% 99.5% 短时中断可恢复
大雾 92.3% 99.2% 通信距离缩短
沙尘 90.8% 98.7% 需定期清洁传感器

5. 太阳能供电系统改造

5.1 供电方案设计

针对无市电场景的太阳能供电方案:

  1. 组件选型

    • 太阳能板:10W单晶硅(18V开路电压)
    • 充电控制器:PWM型(带温度补偿)
    • 储能电池:18650锂电池组(2并2串,7.4V 4000mAh)
    • 电压转换:TPS63020(高效升降压DC-DC)
  2. 典型日照条件下的发电量估算

季节 日均有效日照(h) 发电量(mAh) 耗电量(mAh) 盈余(mAh)
夏季 5.2 5200 2040 +3160
春秋 3.8 3800 2040 +1760
冬季 2.5 2500 2040 +460
连续阴雨 0.5 500 2040 -1540

注意:系统设计应保证至少3天的阴雨续航能力,建议电池容量不低于6000mAh。

5.2 电源管理代码实现

void power_management_task(void) {
    static uint32_t last_check = 0;
    if(HAL_GetTick() - last_check > 60000) { // 每分钟检查一次
        last_check = HAL_GetTick();
        
        float battery_voltage = read_battery_voltage();
        float solar_voltage = read_solar_voltage();
        
        // 低电量保护
        if(battery_voltage < 6.4) { // 单节3.2V截止
            enter_emergency_mode(); // 关闭所有非必要功能
        }
        
        // 充电状态指示
        if(solar_voltage > 5.0) {
            if(battery_voltage < 8.2) { // 未充满
                set_charging_led(1);
            } else {
                set_charging_led(2); // 充满状态
            }
        } else {
            set_charging_led(0); // 无充电
        }
        
        // 动态调整工作模式
        if(battery_voltage < 7.0) { // 电量不足
            set_sampling_interval(600); // 10分钟采样一次
        } else {
            set_sampling_interval(300); // 5分钟采样一次
        }
    }
}

在实际部署中,我们建议采用模块化设计,将传感器、主控、通信、电源等部分独立封装,便于维护更换。同时建立定期巡检制度,特别是在极端天气后检查设备状态,确保系统长期稳定运行。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐