基于STM32物联网冻保鲜运输智能控制系统

发布于:2025-09-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

若该文为原创文章,转载请注明原文出处。

一、 项目背景与引言

(一) 研究背景及意义

随着生鲜电商、医药冷链、高端食品等行业的飞速发展,冷链物流已成为支撑国民经济的关键基础设施。在整个冷链运输过程中,温湿度环境的稳定性直接决定了货物的品质、安全与价值。传统的运输方式缺乏有效的实时监控手段,经常出现“断链”问题,导致货物变质,造成巨大的经济损失。本项目旨在利用STM32单片机和物联网技术,设计一套集环境监测、智能控制、实时定位、远程监控于一体的智能控制系统。该系统能够确保运输环境稳定,并在异常时及时报警,从而保障运输品质,减少损耗,具有极高的经济价值和应用前景。

(二) 国内外研究现状

目前,高端冷链运输已开始采用基于RFIDGPS+GPRS的温湿度记录仪,但其功能单一,通常只有记录和事后追溯功能,无法实现实时控制和主动预警。本项目采用的 “STM32+ESP8266+OneNet” 技术方案,成本低廉,功能全面,不仅能实现本地自动控制,还能通过云平台进行远程实时监控与大数据分析,代表了现代物联网技术在传统物流领域升级改造的典型应用,符合工业4.0和“互联网+”的发展趋势。

(三) 论文研究内容

本研究设计并实现了一个以STM32F103C8T6为核心的冷链运输监控系统。系统通过DHT11(或更高精度的SHT30)温湿度传感器采集环境数据;通过SW-420震动传感器监测运输颠簸程度;通过GPS模块获取车辆实时位置;通过继电器控制制冷风机和加湿器;通过OLED显示屏进行本地状态显示;最后通过ESP8266 WiFi模块将所有的环境数据、位置信息及设备状态上传至OneNet云平台,实现手机APP的远程监控与历史数据查询。

二、 系统总体设计

(一) 系统架构

本系统采用三层物联网经典架构:感知层、网络层和应用层。

  1. 感知层

    • 环境感知:温湿度一体传感器 (DHT11/SHT30)

    • 状态感知:震动传感器 (SW-420)

    • 位置感知:GPS定位模块 (ATGM336H)

  2. 控制层

    • 主控制器:STM32F103C8T6

    • 逻辑核心:执行所有控制算法和逻辑判断

  3. 执行层

    • 制冷执行:继电器控制制冷风机

    • 加湿执行:继电器控制加湿器

    • 声光报警:蜂鸣器

  4. 网络层

    • 通信模块:ESP8266-01S (Wi-Fi)

  5. 应用层

    • 本地交互:OLED显示屏 (SSD1306)、按键

    • 远程交互:中国移动OneNet云平台、手机APP

(二) 功能模块划分

  1. 环境监测模块:负责温湿度、震动数据的采集与滤波。

  2. 定位模块:解析GPS数据,获取经纬度、时间、速度信息。

  3. 智能控制模块:核心控制逻辑,根据预设阈值自动启停制冷/加湿设备。

  4. 人机交互模块:包括OLED显示、按键设置阈值、蜂鸣器报警。

  5. 数据通信模块:负责STM32与ESP8266的AT指令通信,通过MQTT协议将数据上传至OneNet。

三、 硬件设计与实现

(一) 主控模块选型及介绍

  • 型号:STM32F103C8T6最小系统板

  • 理由:需要多个UART(用于GPS和ESP8266)、I2C(用于高精度传感器和OLED)、ADC(用于震动传感器)等外设,该型号资源丰富,完全满足需求。

(二) 传感器模块选型及电路设计

  1. 温湿度传感器

    • 选项A(经济型)DHT11。数字输出,成本低。

    • 选项B(推荐,工业级)SHT30(I2C接口)。精度更高,可靠性更好,更适合冷链应用。

    • 电路:SHT30的SCL接PB6,SDA接PB7。

  2. 震动传感器

    • 选型SW-420(常闭型)。平时输出低电平,震动时输出高电平。

    • 电路:模块的DO数字输出引脚接STM32的GPIO(如PA0),也可接ADC引脚(如PA1)模拟量输出,用于检测震动强度。

  3. GPS定位模块

    • 选型ATGM336H。国产高性能GPS模块,支持北斗/GPS双模。

    • 接口:UART串口。

    • 电路:模块TXD接STM32的RX2(PA3),RXD接STM32的TX2(PA2)。VCC接3.3V或5V。

(三) 通信模块选型及配置

  • 选型ESP8266-01S Wi-Fi模块。

  • 配置:使用AT固件,通过串口与STM32连接。

  • 电路:ESP8266的TX接STM32的RX1(PA10),RX接STM32的TX1(PA9),VCC接3.3V,CH_PD接3.3V。

(四) 执行器模块选型及驱动电路

  • 选型2路继电器模块(光耦隔离,低电平触发)。

  • 驱动电路:STM32的2个GPIO(如PA4, PA5)分别接继电器模块的IN1, IN2。继电器输出端分别控制制冷风机加湿器的电源回路。重要: 执行器使用独立的12V或24V电源供电,其GND与STM32系统的GND共地。

(五) 显示与交互模块

  1. OLED显示屏:0.96寸I2C SSD1306,与SHT30共用I2C总线。

  2. 按键:2-3个轻触按键,用于切换显示、进入设置模式、调整阈值。配置为上拉输入模式。

  3. 蜂鸣器:有源蜂鸣器,接GPIO(如PC13),用于震动超限报警。

四、 软件设计与实现

(一) 开发环境与协议

  • IDE:Keil uVision 5

  • 配置工具:STM32CubeMX

  • :HAL库

  • 通信协议NMEA-0183(GPS)、AT指令(ESP8266)、MQTT(OneNet)

(二) 系统初始化

  1. 初始化系统时钟、GPIO、I2C、UART(UART1 for ESP8266, UART2 for GPS, UART3 for Debug)、ADC。

  2. 初始化外设:OLED、SHT30。

  3. 配置ESP8266:AT+CWMODE=1 -> AT+CWJAP="SSID","PASSWORD" -> AT+MQTTUSERCFG=... -> AT+MQTTCONN=... 连接OneNet MQTT服务器。

  4. 从EEPROM/Flash中读取用户设置的温湿度阈值。

(三) 软件主逻辑流程图

(四) 关键代码片段

主循环核心逻辑

int main() {
  // 系统初始化
  System_Init();
  OLED_ShowWelcome();

  while (1) {
    // 1. 采集数据 (每2秒一次)
    if (HAL_GetTick() - sensor_timer > 2000) {
      sensor_timer = HAL_GetTick();
      SHT30_Read(&temperature, &humidity);
      shake_value = ADC_GetValue(SHAKE_ADC_CH); // 读取震动模拟量
    }

    // 2. 解析GPS数据 (在串口中断中接收,在主循环中解析)
    if (gps_data_ready) {
      gps_data_ready = 0;
      if (GPS_Parse(&gps_info, gps_rx_buffer)) { // 解析GNRMC语句
        latitude = gps_info.lat;
        longitude = gps_info.lon;
        speed_knots = gps_info.speed;
      }
    }

    // 3. 智能控制
    // 温度控制
    if (temperature > temp_high_threshold) {
      COOLING_FAN_ON();
    } else if (temperature < temp_low_threshold) {
      COOLING_FAN_OFF();
    }
    // 湿度控制
    if (humidity < humidity_low_threshold) {
      HUMIDIFIER_ON();
    } else {
      HUMIDIFIER_OFF();
    }
    // 震动报警
    if (shake_value > SHAKE_THRESHOLD) {
      BUZZER_ON();
    } else {
      BUZZER_OFF();
    }

    // 4. 处理按键设置
    Key_Scan(); // 扫描按键,进入菜单设置阈值

    // 5. 上报数据到OneNet (每30秒一次)
    if (HAL_GetTick() - report_timer > 30000) {
      report_timer = HAL_GetTick();
      sprintf(mqtt_data, "{\"temp\":%.1f,\"hum\":%.1f,\"shake\":%d,\"lat\":%.6f,\"lon\":%.6f,\"fan\":%d,\"humi\":%d}",
              temperature, humidity, shake_value, latitude, longitude, fan_state, humidifier_state);
      ESP8266_MQTT_Publish("$dp", mqtt_data); // 发布到OneNet
    }

    OLED_Display(temperature, humidity, shake_value, latitude, longitude); // 刷新显示
    HAL_Delay(100);
  }
}

// GPS串口中断接收函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  if (huart->Instance == USART2) { // GPS的串口
    if (gps_rx_char == '\n') { // 接收到一行数据
      gps_rx_buffer[gps_index] = '\0';
      gps_index = 0;
      gps_data_ready = 1;
    } else {
      gps_rx_buffer[gps_index++] = gps_rx_char;
      if (gps_index >= GPS_BUFFER_SIZE) gps_index = 0;
    }
    HAL_UART_Receive_IT(&huart2, &gps_rx_char, 1); // 重新开启接收中断
  }
}

五、 系统测试与优化

(一) 测试方案

  1. 功能测试

    • 温控:用热风枪和湿毛巾分别模拟高温和高湿环境,测试制冷和加湿功能是否正常启动。

    • 震动:敲击桌面模拟震动,测试蜂鸣器报警。

    • 定位:将GPS模块置于窗外,测试能否成功定位并解析数据。

    • 通信:测试Wi-Fi连接和OneNet数据上传是否成功。

  2. 场景模拟测试:将整个系统放入泡沫箱中,模拟车厢环境,进行长时间稳定性测试。

  3. 路测:将系统置于车辆中进行实际道路运输测试,验证整个系统在真实震动、温湿度变化环境下的可靠性。

(二) 优化方向

  1. 控制算法优化:引入PID控制算法来控制制冷和加湿,使环境温度/湿度更稳定,避免设备频繁启停。

  2. 低功耗优化:在数据上报间隔期间,让STM32和ESP8266进入休眠模式,大幅降低系统功耗,适合无外部电源的运输场景(需配备蓄电池)。

  3. 数据完整性:在网络信号不佳的地区(如隧道),数据无法上传。可增加SPI Flash存储芯片,临时缓存数据,待网络恢复后断点续传。

  4. 多级报警:区分预警(短信通知)和紧急报警(电话通知),并通过云平台实现。

六、 结论与展望

(一) 项目总结

本项目成功设计并实现了一个低成本、高可靠性的冷链运输智能监控系统。系统完成了对环境温湿度的自动调控、运输震动的实时监测、车辆位置的精准定位,并通过物联网平台实现了数据的远程可视化监控。所有功能均达到设计要求,验证了STM32在工业物联网应用中的强大能力,为解决冷链“断链”问题提供了一个有效的技术方案。

(二) 未来展望

  1. 多车厢监控:扩展系统,使用一个主机(带GPS和4G)和多个从机(仅带传感器)通过LoRa或ZigBee组网,实现对大型货车多个车厢的统一监控。

  2. 区块链溯源:将运输过程中的环境数据哈希值上传至区块链,为终端消费者提供不可篡改的全程品质溯源信息,提升产品信任度。

  3. 大数据分析:在云平台端对历史运输数据进行分析,优化运输路线、预测设备故障、制定更科学的养护策略。

  4. 集成更多传感器:增加门磁传感器监测货箱门开关状态,增加烟雾传感器监测火灾隐患,构建更全面的安全体系。

如有侵权,或需要完整代码,请及时联系博主。


网站公告

今日签到

点亮在社区的每一天
去签到