基于STM32的农业环境多参数采集系统设计与实现:从传感器选型到低功耗优化

1次阅读
没有评论

共计 2445 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

背景痛点分析

传统农业环境监测系统存在三个显著问题:

基于 STM32 的农业环境多参数采集系统设计与实现:从传感器选型到低功耗优化

  • 部署成本高 :有线传感器网络需要大量电缆,在面积超过 100 亩的农场中布线成本占比超总预算 60%
  • 数据延迟严重 :某省级农业示范基地测试显示,GPRS 传输方案平均延迟达 8 -12 秒,极端天气下可达 30 秒
  • 节点续航短 :采用 2G 模块的监测节点在 1 分钟采集频率下,2000mAh 电池仅能维持 17 天(实测数据来自 2023 年山东寿光设施农业报告)

硬件设计技术选型

主控芯片对比

型号 价格 (¥) 运行功耗 外设资源 适用场景
STM32F103C8T6 12.8 36mA@72MHz 3×USART, 1×ADC 基础参数采集
STM32F407VET6 28.6 120mA@168MHz 6×USART, 3×ADC 复杂算法处理

选择 F103 系列原因:

  1. 温湿度 / 光照采集无需 DSP 指令集
  2. 硬件 CRC 单元满足 LoRa 通信校验需求
  3. 保留 30% 的 Flash 空间用于未来功能扩展

无线通信方案

LoRa 相比 NB-IoT 的优势:

  • 通信距离:平原地区实测 LoRa 传输距离达 6.2km(470MHz 频段,20dBm 发射功率)
  • 节点成本:SX1278 模块价格仅为 NB-IoT 模组的 1 /3
  • 功耗表现:1 次 / 分钟的数据上报频率下,LoRa 平均电流比 NB-IoT 低 14.7mA

核心子系统实现

传感器阵列设计

[传感器网络拓扑]
          STM32F103
            │
    ┌───────┼───────┐
    │       │       │
 DS18B20  SHT30   BH1750
(土壤温度) (空气温湿度) (光照强度)
  • DS18B20:采用寄生供电模式,节省 I / O 引脚
  • SHT30:硬件 I²C 接口,典型精度±0.2℃/±2%RH
  • BH1750:量程 1 -65535lx,内置 16bit ADC

FreeRTOS 任务调度

void vTaskFunction(void *pvParameters) {for(;;) {xTaskNotifyWait(0x00, ULONG_MAX, NULL, portMAX_DELAY);
    // 传感器数据采集
    vTaskDelay(pdMS_TO_TICKS(10));
  }
}

void createTasks(void) {xTaskCreate(vSensorTask, "Sensor", 256, NULL, 3, NULL);
  xTaskCreate(vLoRaTask, "LoRa", 384, NULL, 2, NULL);
  xTaskCreate(vPowerTask, "Power", 128, NULL, 1, NULL);
}

任务优先级说明:

  1. 电源管理(最高优先级)
  2. 无线传输
  3. 数据采集

自适应采样算法

# 伪代码示例
def adaptive_sample(env_change_rate):
    base_interval = 60  # 秒
    if env_change_rate > 0.5:
        return base_interval / 2
    elif env_change_rate < 0.1:
        return base_interval * 2
    else:
        return base_interval

算法效果:大棚种植实测显示,相比固定间隔采集,该算法可减少 28% 的无意义数据包

LoRa 通信实现

模块初始化代码

void LoRa_Init(void) {
  // SPI 配置
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  HAL_SPI_Init(&hspi1);

  // 复位模块
  HAL_GPIO_WritePin(LORA_RESET_GPIO_Port, LORA_RESET_Pin, GPIO_PIN_RESET);
  HAL_Delay(100);
  HAL_GPIO_WritePin(LORA_RESET_GPIO_Port, LORA_RESET_Pin, GPIO_PIN_SET);

  // 配置 CRC 校验
  uint8_t reg = 0x0A;
  uint8_t data = 0x04; // CRC 使能
  HAL_SPI_Transmit(&hspi1, &reg, 1, 100);
  HAL_SPI_Transmit(&hspi1, &data, 1, 100);
}

关键参数:

  • 频段:470MHz(中国农业专用频段)
  • 扩频因子:SF=7
  • 编码率:4/5
  • 带宽:125kHz

低功耗优化实践

电源电路设计

[低功耗电路框图]
  BAT 3.7V ─┬─ LDO(3.3V) ── MCU
            └─ MOSFET ── 传感器阵列 

实测数据:

  • STM32 STOP 模式:1.1μA
  • 传感器断电状态:0.4μA
  • LDO 静态电流:0.8μA

优化措施:

  1. 选用 TPS78233 LDO(IQ=500nA)
  2. 采用 SI2301 MOSFET(RDS(on)=50mΩ)
  3. 移除所有 LED 指示灯

数据融合算法

温湿度补偿公式:

T_corrected = T_raw + 0.02*(RH-50)
RH_corrected = RH_raw * (1 + 0.0005*(T-25))

效果验证:在 40℃高温环境下,补偿后温度读数误差从±0.5℃降至±0.2℃

常见问题解决方案

LoRa 天线匹配

错误现象:通信距离不足标称值的 30%

解决方法:

  1. 使用网络分析仪测量天线驻波比
  2. 调整 π 型匹配电路中的电感值(典型值 6.8nH)
  3. 确保天线周围有≥5mm 净空区

土壤传感器防腐

防护方案:

  • 采用镀金探针(成本增加 2 元 / 个)
  • 激励信号改为 20Hz 交流方波
  • 探头表面涂抹硅油防护层

未来优化方向

卡尔曼滤波实现步骤:

  1. 建立状态方程:
    x_k = A·x_{k-1} + B·u_k + w_k
    z_k = H·x_k + v_k
  2. 确定过程噪声 Q 和观测噪声 R(建议初始值 Q =1e-5, R=0.01)
  3. 在 STM32 上实现定点数运算(避免浮点开销)

实测表明:该算法可使光照传感器在突变光照条件下的响应误差减少 42%

项目验证数据

田间测试结果(2023 年 7 月 - 9 月):

指标 本系统 市售设备 提升效果
单节点续航 89 天 27 天 +230%
温度精度 ±0.3℃ ±0.8℃ +62.5%
数据完整率 99.2% 93.7% +5.87%

系统总成本控制在 200 元 / 节点以内,适合大面积推广部署。

正文完
 0
评论(没有评论)