基于STM32物联网冻保鲜运输智能控制系统
若该文为原创文章,转载请注明原文出处。
一、 项目背景与引言
(一) 研究背景及意义
随着生鲜电商、医药冷链、高端食品等行业的飞速发展,冷链物流已成为支撑国民经济的关键基础设施。在整个冷链运输过程中,温湿度环境的稳定性直接决定了货物的品质、安全与价值。传统的运输方式缺乏有效的实时监控手段,经常出现“断链”问题,导致货物变质,造成巨大的经济损失。本项目旨在利用STM32单片机和物联网技术,设计一套集环境监测、智能控制、实时定位、远程监控于一体的智能控制系统。该系统能够确保运输环境稳定,并在异常时及时报警,从而保障运输品质,减少损耗,具有极高的经济价值和应用前景。
(二) 国内外研究现状
目前,高端冷链运输已开始采用基于RFID或GPS+GPRS的温湿度记录仪,但其功能单一,通常只有记录和事后追溯功能,无法实现实时控制和主动预警。本项目采用的 “STM32+ESP8266+OneNet” 技术方案,成本低廉,功能全面,不仅能实现本地自动控制,还能通过云平台进行远程实时监控与大数据分析,代表了现代物联网技术在传统物流领域升级改造的典型应用,符合工业4.0和“互联网+”的发展趋势。
(三) 论文研究内容
本研究设计并实现了一个以STM32F103C8T6为核心的冷链运输监控系统。系统通过DHT11(或更高精度的SHT30)温湿度传感器采集环境数据;通过SW-420震动传感器监测运输颠簸程度;通过GPS模块获取车辆实时位置;通过继电器控制制冷风机和加湿器;通过OLED显示屏进行本地状态显示;最后通过ESP8266 WiFi模块将所有的环境数据、位置信息及设备状态上传至OneNet云平台,实现手机APP的远程监控与历史数据查询。
二、 系统总体设计
(一) 系统架构
本系统采用三层物联网经典架构:感知层、网络层和应用层。
感知层:
环境感知:温湿度一体传感器 (DHT11/SHT30)
状态感知:震动传感器 (SW-420)
位置感知:GPS定位模块 (ATGM336H)
控制层:
主控制器:STM32F103C8T6
逻辑核心:执行所有控制算法和逻辑判断
执行层:
制冷执行:继电器控制制冷风机
加湿执行:继电器控制加湿器
声光报警:蜂鸣器
网络层:
通信模块:ESP8266-01S (Wi-Fi)
应用层:
本地交互:OLED显示屏 (SSD1306)、按键
远程交互:中国移动OneNet云平台、手机APP
(二) 功能模块划分
环境监测模块:负责温湿度、震动数据的采集与滤波。
定位模块:解析GPS数据,获取经纬度、时间、速度信息。
智能控制模块:核心控制逻辑,根据预设阈值自动启停制冷/加湿设备。
人机交互模块:包括OLED显示、按键设置阈值、蜂鸣器报警。
数据通信模块:负责STM32与ESP8266的AT指令通信,通过MQTT协议将数据上传至OneNet。
三、 硬件设计与实现
(一) 主控模块选型及介绍
型号:STM32F103C8T6最小系统板
理由:需要多个UART(用于GPS和ESP8266)、I2C(用于高精度传感器和OLED)、ADC(用于震动传感器)等外设,该型号资源丰富,完全满足需求。
(二) 传感器模块选型及电路设计
温湿度传感器:
选项A(经济型):DHT11。数字输出,成本低。
选项B(推荐,工业级):SHT30(I2C接口)。精度更高,可靠性更好,更适合冷链应用。
电路:SHT30的
SCL
接PB6,SDA
接PB7。
震动传感器:
选型:SW-420(常闭型)。平时输出低电平,震动时输出高电平。
电路:模块的
DO
数字输出引脚接STM32的GPIO(如PA0),也可接ADC引脚(如PA1)模拟量输出,用于检测震动强度。
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共地。
(五) 显示与交互模块
OLED显示屏:0.96寸I2C SSD1306,与SHT30共用I2C总线。
按键:2-3个轻触按键,用于切换显示、进入设置模式、调整阈值。配置为上拉输入模式。
蜂鸣器:有源蜂鸣器,接GPIO(如PC13),用于震动超限报警。
四、 软件设计与实现
(一) 开发环境与协议
IDE:Keil uVision 5
配置工具:STM32CubeMX
库:HAL库
通信协议:NMEA-0183(GPS)、AT指令(ESP8266)、MQTT(OneNet)
(二) 系统初始化
初始化系统时钟、GPIO、I2C、UART(UART1 for ESP8266, UART2 for GPS, UART3 for Debug)、ADC。
初始化外设:OLED、SHT30。
配置ESP8266:
AT+CWMODE=1
->AT+CWJAP="SSID","PASSWORD"
->AT+MQTTUSERCFG=...
->AT+MQTTCONN=...
连接OneNet MQTT服务器。从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); // 重新开启接收中断}
}
五、 系统测试与优化
(一) 测试方案
功能测试:
温控:用热风枪和湿毛巾分别模拟高温和高湿环境,测试制冷和加湿功能是否正常启动。
震动:敲击桌面模拟震动,测试蜂鸣器报警。
定位:将GPS模块置于窗外,测试能否成功定位并解析数据。
通信:测试Wi-Fi连接和OneNet数据上传是否成功。
场景模拟测试:将整个系统放入泡沫箱中,模拟车厢环境,进行长时间稳定性测试。
路测:将系统置于车辆中进行实际道路运输测试,验证整个系统在真实震动、温湿度变化环境下的可靠性。
(二) 优化方向
控制算法优化:引入PID控制算法来控制制冷和加湿,使环境温度/湿度更稳定,避免设备频繁启停。
低功耗优化:在数据上报间隔期间,让STM32和ESP8266进入休眠模式,大幅降低系统功耗,适合无外部电源的运输场景(需配备蓄电池)。
数据完整性:在网络信号不佳的地区(如隧道),数据无法上传。可增加SPI Flash存储芯片,临时缓存数据,待网络恢复后断点续传。
多级报警:区分预警(短信通知)和紧急报警(电话通知),并通过云平台实现。
六、 结论与展望
(一) 项目总结
本项目成功设计并实现了一个低成本、高可靠性的冷链运输智能监控系统。系统完成了对环境温湿度的自动调控、运输震动的实时监测、车辆位置的精准定位,并通过物联网平台实现了数据的远程可视化监控。所有功能均达到设计要求,验证了STM32在工业物联网应用中的强大能力,为解决冷链“断链”问题提供了一个有效的技术方案。
(二) 未来展望
多车厢监控:扩展系统,使用一个主机(带GPS和4G)和多个从机(仅带传感器)通过LoRa或ZigBee组网,实现对大型货车多个车厢的统一监控。
区块链溯源:将运输过程中的环境数据哈希值上传至区块链,为终端消费者提供不可篡改的全程品质溯源信息,提升产品信任度。
大数据分析:在云平台端对历史运输数据进行分析,优化运输路线、预测设备故障、制定更科学的养护策略。
集成更多传感器:增加门磁传感器监测货箱门开关状态,增加烟雾传感器监测火灾隐患,构建更全面的安全体系。
如有侵权,或需要完整代码,请及时联系博主。