STM32油罐车运输监测报警系统设计
2026/9/5 5:21:31 网站建设 项目流程

温度/液位/车速/气压/定位五参数监控+MQTT远程上报+车载视频,危险品运输的电子押运员

      • 一、系统功能拆解
      • 二、器件选型:每个模块都对比过
      • 三、电路设计:接线表 + 关键要点
      • 四、软件设计
        • 4.1 主程序框架
        • 4.2 H21L1 测速:外部中断 + 定时器结算
        • 4.3 GPS 定位:NMEA 解析 + Haversine 距离
        • 4.4 神经网络温度调控
        • 4.5 ESP8266 + MQTT 上报
      • 五、整机调试:按功能逐项验证
      • 六、常见坑汇总
      • 七、可扩展方向

成品油是易燃易爆危险品,油罐车跑在路上,罐内温度是否超标、液位有没有异常波动、司机有没有超速、罐内气压是否正常——这些参数靠人盯根本盯不过来。这篇基于 STM32 的油罐车运输实时监测报警系统就是干这个的:DS18B20 监测罐体温度并做智能调控、SR-01 监测液位异常、H21L1 光耦测速防超速、XGZP6847A 监测气压、ATGM336H GPS 实时定位追踪轨迹,ESP32-CAM 车载视频监控,ESP8266 走 MQTT 协议把数据全部推到远程 APP,参数超阈值按异常类型分级报警(语音/蜂鸣器)。方案选型、电路接线、程序流程、整机调试一次讲透。

一、系统功能拆解

一句话总结:五参数并行采集(温度/液位/车速/气压/位置)→ 阈值分级报警(语音/蜂鸣器)→ 本地显示 + 视频 + MQTT 远程上报

功能实现方式对应硬件
罐体温度监测数字温度传感器 + 神经网络动态调控DS18B20
温度调控依据实时数据动态调整加热/降温策略神经网络算法
液位监测电阻式液位传感器 ADC 采样SR-01
车速监测光耦脉冲计数测转速H21L1
气压监测压阻式气压传感器模拟量采样XGZP6847A
定位追踪NMEA 报文解析 + Haversine 算距离ATGM336H
车载视频实时影像分段上传客户端ESP32-CAM
分级报警温度/车速/液位异常→语音;气压异常→蜂鸣器语音模块 + 蜂鸣器
数据显示五参数实时刷新供驾驶员查看OLED12864
远程监控MQTT 协议发布数据,APP 订阅接收ESP8266

两个设计亮点值得先划出来:一是报警分级——温度、车速、液位异常是"要人立刻处理"级别的,走语音播报;气压异常是"提示检查"级别,蜂鸣器就够,驾驶员不至于被一锅端的报警声搞麻木。二是通信选 MQTT 而不是裸 TCP——发布/订阅模式天然解耦车载端和 APP 端,网络抖动时 QoS 机制还能保证数据不丢,这对行驶中信号飘忽不定的车载场景是刚需。

二、器件选型:每个模块都对比过

器件选型结果淘汰方案核心理由
主控STM32F103C8T6ESP32-WROOM-32外设接口丰富、车规级稳定成熟
液位SR-01 电阻式HSC-1000G 压力式成本低结构简单,导电液体场景够用
温度DS18B20LM35数字输出免 ADC、单总线可多点扩展
测速H21L1 光耦AS5048A 霍尔车载电磁环境复杂,光耦隔离抗干扰
定位ATGM336Hu-blox NEO-M8N冷启动快、低功耗、性价比高
视频ESP32-CAM(OV2640)OV5640自带 WiFi 独立推流,主控零负担
气压XGZP6847ABMP280压阻式工业取向,全温区稳定
显示OLED12864ILI9341 彩屏广视角高对比度、低功耗
无线ESP8266nRF24L01直连 WiFi 走 MQTT,私有协议到不了 APP

几个关键选型理由展开讲:

  • H21L1 vs AS5048A:测速方案在车载场景的生死线是抗干扰——油罐车上有发电机、继电器、逆变器,电磁环境比实验室恶劣得多。霍尔传感器靠磁场感应,恰恰怕电磁噪声;光耦方案用"光路通断"产生脉冲,光电隔离把信号和噪声物理隔开,这种"天生绝缘"的特性在车上就是保命的。
  • ATGM336H vs NEO-M8N:NEO-M8N 四系统联合定位精度确实更高,但车辆轨迹追踪要的是"这车在哪条路上",米级精度足够;ATGM336H 便宜一半以上,冷启动快(车队早上发车不用等搜星),对批量装车的运营成本影响很大。
  • XGZP6847A vs BMP280:BMP280 是消费级气象气压计(测海拔那种),量程 300~1100hPa;XGZP6847A 是工业压阻方案,全温区带温度补偿,罐内压力监测这种"偏工业"的活它更对口。
  • MQTT vs 裸 TCP:油罐车穿过隧道、山区,WiFi/网络连接断断续续,裸 TCP 掉线就丢数据;MQTT 的 QoS1 机制保证消息至少送达一次,重连后还能续传,这是把通信协议选型上升到了业务可靠性层面。

三、电路设计:接线表 + 关键要点

主控最小系统:HSE 8MHz + LSE 32.768kHz 双晶振,PLL 倍频到 72MHz;复位电路 NRST + 按键 + 10kΩ 上拉 + 0.1µF 去耦。

模块接口方式连接引脚(参考)备注
SR-01 液位模拟输出S → ADC 通道5V 供电,多次采样均值
DS18B20单总线DQ → 数字 IO4.7kΩ 上拉到 3.3V
H21L1 测速脉冲输出OUT → 外部中断引脚5V,下降沿触发计数
XGZP6847A模拟输出OUT → ADC 通道5V 供电,NC 脚悬空
ATGM336HUART1TX→RX 交叉3.3V,9600bps
ESP32-CAM独立 WiFi不接主控5V 独立供电
ESP8266UART2TX/RX 交叉,RST→GPIO3.3V,CH_PD 拉高
OLED12864IICSCL/SDA3.3V
语音/蜂鸣器GPIO/UART分级报警输出语音模块串口控制

接线五个坑:

  1. 两个 ADC 通道的时序要错开:SR-01 液位和 XGZP6847A 气压共用 ADC 外设的不同通道,切换通道采样之间要留出足够的建立时间,否则前一个通道的残余电压会"串"进后一个通道的读数,液位和气压互相污染。
  2. H21L1 光栅盘的安装精度:光耦测速靠码盘/遮光片切割光路,码盘与槽型光耦的间隙要居中,装偏了脉冲会缺齿,速度读数系统性偏低——装完先手动转一圈对比脉冲数和码盘齿数。
  3. GPS 天线位置决定定位质量:天线必须朝天空方向无遮挡,贴在金属罐体侧面或驾驶室内部,搜星时间翻倍、轨迹漂移到隔壁路。车载场景优先外置有源天线。
  4. 5V 模块与 3.3V 主控的电平:SR-01、XGZP6847A、H21L1 都是 5V 供电,OUT 输出高电平也是 5V 量级,直怼 3.3V 的 STM32 IO 有风险,模拟量可以分压,数字量加电平转换或确认模块是 3.3V 兼容输出。
  5. 油罐车供电从车载 12V/24V 取电:必须加 DC-DC 隔离 + 共模电感 + 大电容滤波,货车电源上的浪涌和负载突降能瞬间击穿裸接的模块——车规电源处理不是可选项。

四、软件设计

4.1 主程序框架
int main(void) { SystemInit(); delay_init(); DS18B20_Init(); // 罐体温度 ADC_Init(); // 液位 + 气压 EXTIX_Init(); // H21L1 脉冲中断计数 TIM3_Init(); // 1s 周期读转速 USART1_Init(9600); // GPS USART2_Init(115200); // ESP8266 OLED_Init(); ESP8266_MQTT_Connect(); // 连 WiFi → MQTT Broker → 订阅/发布主题 NN_Model_Init(); // 温度调控神经网络模型加载 while (1) { temp = DS18B20_GetTemp(); level = Get_Level(); // 液位 ADC 均值换算 press = Get_Pressure(); // 气压 ADC 均值换算 speed = RPM_to_Speed(pulse_cnt);// 脉冲→车速 GPS_Parse(&lat, &lon); // NMEA 解析 dist = Haversine(last, cur); // 里程/偏航距离 /* 神经网络温度调控:输入当前温度/环境温度/车速 → 输出加热/降温策略 */ ctrl = NN_Inference(temp, env_temp, speed); Apply_Temp_Control(ctrl); /* 分级报警 */ if (temp > t_th || level > l_th || speed > s_th) Voice_Alarm(type); // 语音报警 if (press > p_th) Buzzer(ON); // 蜂鸣器提示 OLED_Show(temp, level, speed, press, pos); MQTT_Publish("tanker/data", payload); // 上报 APP } }
4.2 H21L1 测速:外部中断 + 定时器结算
/* 外部中断:每来一个脉冲计一次 */ void EXTI_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line_SPEED) != RESET) { pulse_cnt++; EXTI_ClearITPendingBit(EXTI_Line_SPEED); } } /* 定时器 1s 中断:结算并清零 */ void TIM3_IRQHandler(void) { rpm = pulse_cnt * 60 / TEETH; // 每秒脉冲数×60 / 码盘齿数 = RPM pulse_cnt = 0; speed = rpm * WHEEL_CIRC_KMH; // 换算 km/h }

测速精度的核心是"脉冲数够多":码盘齿数越多,同样的时间窗内脉冲数越多,量化误差越小;60 齿码盘 1 秒结算一次,1km/h 的分辨率轻松做到。

4.3 GPS 定位:NMEA 解析 + Haversine 距离

ATGM336H 上电后持续从串口吐 NMEA 报文(9600bps),核心解析$GNRMC语句:提取定位状态位(A=有效)、经纬度、速度、时间。坐标差的距离用 Haversine 公式算球面最短距离:

#define R_EARTH 6371000.0 // 地球半径(m) double Haversine(double lat1, double lon1, double lat2, double lon2) { double dlat = Rad(lat2 - lat1); double dlon = Rad(lon2 - lon1); double a = sin(dlat/2)*sin(dlat/2) + cos(Rad(lat1))*cos(Rad(lat2))*sin(dlon/2)*sin(dlon/2); return 2 * R_EARTH * asin(sqrt(a)); }

注意两点:NMEA 里的经纬度是ddmm.mmmm度分格式,要换算成十进制度;未定位成功(状态位 V)的数据要丢弃,否则轨迹图上会出现跳到 (0,0) 的"海怪线"。

4.4 神经网络温度调控

用小型 BP 网络做温度调控策略的"黑盒映射":输入层三个节点(当前罐温、环境温度、车速),隐藏层做特征提取,输出层给出加热/降温设备的调节量,用反向传播离线训练好权重后部署。单片机上跑的是纯前向推理(几层矩阵乘),不在线训练——训练在 PC 上用历史数据完成,把权重数组固化进固件,推理耗时微秒级。相比固定阈值的开关控制,它的优势在于"预判":环境温度上升 + 车速快(风冷效应)时提前收加热功率,温度曲线更平稳。

4.5 ESP8266 + MQTT 上报
RST 复位 → 等 "ready" AT+CWMODE=1 → STA 模式 AT+CWJAP 连 WiFi → 等 "OK" 透传模式配置 → AT+CIPSTART 连 MQTT Broker CONNECT 报文:ClientID + 用户名密码 发布主题 tanker/data(QoS1):JSON 载荷 {T,L,S,P,lat,lon} 订阅主题 tanker/cmd:接收 APP 下发的阈值修改指令

MQTT 的 JSON 载荷示例:{"T":42.5,"L":78,"S":86,"P":103,"lat":37.87,"lon":112.55},APP 端订阅同一主题即可实时刷新,改阈值就往tanker/cmd发指令。

五、整机调试:按功能逐项验证

Keil + ST-Link 烧录调试,先硬件后软件再功能,逐模块验证再联调整机。

测试项操作预期结果
液位标定空罐/满罐两点标定 → 中间液位验证显示与实际液位吻合
温度采集对比温度计 + 加热模拟超温读数一致,超阈值语音报警
测速手转码盘对比脉冲数 → 台架跑车RPM 换算车速准确,无缺齿
气压气泵加压对比标准表电压换算压力误差可控
定位静止定位 → 移动轨迹回放位置准确,Haversine 里程正确
分级报警分别模拟四类超阈值温/速/液位→语音;气压→蜂鸣器
MQTT 上报APP 订阅主题查看数据实时同步,断网重连续传
视频推流APP 连接 8080 端口画面流畅,弱信号下帧率可接受
温度调控环境温度突变测试网络输出调节及时,温度曲线平稳

六、常见坑汇总

  1. 测速光路被油污糊住:H21L1 靠光路通断工作,油罐车环境里油气、灰尘糊住光耦槽,脉冲直接消失,系统以为车停了。定期清洁之外,软件上做"速度长时间为 0 但 GPS 在动"的交叉校验,两个数据源互相兜底。
  2. 神经网络的训练数据要有代表性:只拿夏天数据训练的模型,冬天上车必翻车——温度调控的输入空间(罐温×环温×车速)要覆盖四季工况,没条件就退回 PID,别硬上网络。
  3. 参考论文里温度选型有处典型矛盾要留意:前面列方案 1 是 LM35、方案 2 是 DS18B20,结论却写着"DS18B20 精度高、数字输出……因此选择方案 1"——选的明明是方案 2 的器件。自己写选型报告时结论必须和方案编号对齐,这种低级矛盾答辩时一抓一个准。
  4. 气压传感"温度漂移":XGZP6847A 虽有温度补偿,昼夜温差大时零点还是会漂,标定要在使用环境温度下做,或者软件里加温度二次修正。
  5. MQTT 主题权限别裸奔:车载端 Broker 账号密码硬编码 + 主题不设权限,等于把油罐车实时位置全网直播,接公有云 IoT 平台时务必用一机一密和 TLS。
  6. 视频推流和数据上报抢带宽:ESP32-CAM 视频流占满上行时 MQTT 心跳会超时掉线,路由器 QoS 限流视频或把数据上报的 QoS 重传窗口放宽。

七、可扩展方向

  • ESP8266 换 4G Cat.1 模块,脱离 WiFi 依赖实现全国范围监管上报;
  • 液位 + 温度 + 气压做泄漏关联判断(液位缓降 + 气压变化 = 疑似渗漏),推送应急处理预案;
  • 对接监管平台接入电子运单,装卸货电子围栏自动打卡。

八、资料内容完整工程资料(原理图、PCB、代码、元件清单)


九、资料获取方式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询