基于ESP32的冷链监控系统:可实时评估温度、操作和访问条件,并生成可信度评分
这个项目为何存在?
全球每年估计有50%的疫苗被浪费。其中相当一部分浪费源于冷链中断——即疫苗在运输或储存过程中曾暴露于2至8°C安全温度范围之外,但直到为时已晚才被发现。
传统的冷链监控工具要么是昂贵的专用记录仪,难以在实地读取,要么只是简单的最高/最低温度计,只能告诉你发生了异常,却无法告知具体时间、持续时长或严重程度。这两种方式都无法为医护人员提供一个简单且可操作的答案来回答:“这个安瓿瓶现在是否仍然安全?”
该项目用一个数字来回答这个问题:冷链信任评分(CTS)。该评分系统借鉴了信用机构评估财务可靠性的方法,初始值为100分,并根据实时监控的各项条件持续下降——包括温度波动、门未关、物理撞击等。评分高于70分属于安全状态,40至70分之间属于风险较高,低于40分则被视为已受损。
系统基于ESP32运行,配备普通传感器,每秒将数据记录到microSD卡中,并通过WiFi提供美观的实时仪表盘——无需网络连接,无需依赖云服务,也无需订阅。
它做什么?
硬件监控策略
该系统协调五个专门的监控向量,以确保任何漏洞都未被发现:
•DS18B20 防水传感器:可在 2–8°C 的“金发女郎区”内提供高精度温度监测,每 500 毫秒进行一次连续采样。
•MPU6050 加速度计:通过检测冲击和粗暴操作来监控物理完整性。它采用上升沿检测逻辑,因此单次持续的碰撞(例如车辆振动)被视为一个事件,而非连续的处罚。
•磁性簧片开关:记录每扇门的开启和关闭事件,使系统能够区分常规疫苗取用与门被危险地留开的情况。
•MicroSD卡(SPI):作为安全的“黑匣子”记录器,每秒将时间戳、温度、CTS得分、运动状态和门的状态记录到一个永久的.csv文件中。
•双色红/绿LED灯可实现即时视觉诊断:绿色表示安全,红色表示异常。
•视觉界面(OLED与LED):SSD1306 OLED可为无智能手机访问权限的现场工作人员提供设备上的状态仪表盘。
冷链信任评分(CTS)逻辑
CTS 是一个从 0 到 100 的实时完整性评分,旨在具有实际意义:
• 30秒的简短开门时间不应扣分——而应起到警示作用,而非惩罚。
• 持续两小时的温度波动应当有明显影响
• 运输过程中出现单次颠簸应予以记录,但不应造成灾难性后果
• 当一切恢复正常时,分数会缓慢回升——表示监控信心已恢复
网页仪表盘
• 实时状态横幅:安全 / 风险中 / 受影响
• 4张度量卡:温度、CTS得分、违规事件、运动事件
• 门状态指示器,实时倒计时至CTS罚球激活
• 活动时带有脉冲动画的运动指示器
• CTS 信任评分面板,包含进度条和趋势图表
• 温度图表,包含2–8°C安全区参考线
• CTS 下降率柱状图 — 按严重程度着色(绿色/琥珀色/红色)
• 带时间戳的滚动事件日志
• 一键下载完整的SD卡日志CSV文件
OLED显示屏
• 状态栏:安全 / 风险 / 危险
• 大范围温度显示
• 带填充条的CTS值
• 图标行:D:CLSD | M:N | SD:Y | W:Y(门/运动/SD/WiFi)
逐步构建说明
步骤1:设置Arduino IDE
1. 从 arduino.cc/en/software 下载并安装 Arduino IDE 2.x
2. 打开文件 → 偏好设置,然后将 ESP32 板的 URL 添加到附加板管理器 URL 中
3. 打开工具 → 软件板 → 软件板管理器,搜索“esp32”并安装 Espressif Systems 包
4. 通过“工具”→“管理库”安装全部5个库(按名称搜索每个库)
5. 选择您的开发板:工具 → 开发板 → ESP32 开发模块
6. 选择您的COM端口:工具 → 端口
步骤2:准备SD卡
7. 将microSD卡格式化为FAT32(使用sdcard.org提供的官方SD卡格式化工具)
8. 固件会在首次启动时自动创建 /log.csv 文件,并添加标题行,如果该文件不存在,则无需手动准备。
步骤3:收集所有零件
9. 开始前请准备好所有元件。确保材料齐全,可避免半成品电路闲置。面包板原型的总制作时间约为2至3小时。
步骤4:连接并测试DS18B20
10. 连接 DS18B20 的 VCC → 3.3V,GND → GND,Data → GPIO 4
11. 在数据引脚和VCC之间加一个4.7kΩ电阻
12. 使用 DallasTemperature 库创建一个极简的 Flash 程序,并确认在串口监视器中能获得有效的读数。
提示:如果得到-127°C,可能是上拉电阻缺失或数据线错误
步骤5:添加MPU6050
13. 连接 SDA → GPIO 21,SCL → GPIO 22,VCC → 3.3V,GND → GND
14. 在你的代码中添加 mpu.initialize() 和 mpu.testConnection()
15. 在继续之前,请先在串行监视器中确认“MPU OK”。
步骤6:添加OLED
16. OLED 和 I2C 总线(GPIO 21/22)相同。两个设备的 I2C 地址不同,因此可以共存且无问题。请使用一个基本的 Adafruit SSD1306 示例代码来确认 OLED 是否能显示文本。
步骤7:添加SD卡模块
17. 连接 MOSI → GPIO 23,MISO → GPIO 19,SCK → GPIO 18,CS → GPIO 5
18. 插入一张FAT32格式的microSD卡
19. 使用 SD 库的 CardInfo 示例代码进行测试,以确认检测功能。
步骤8:线圈开关和LED灯
20.将簧片开关的一根引脚连接到 GPIO 27,另一根引脚连接到 GND
21. 红色LED:GPIO 25 → 220Ω → LED阳极,阴极连接至GND
22. 绿色LED:GPIO 26 → 220Ω → LED阳极,阴极连接至GND
步骤9:完整刷写固件
23. 在Arduino IDE中打开cold_chain_full.ino文件
24. 使用您的WiFi凭据更新SSID和密码
25. 选择ESP32开发模块,将上传速度设置为921600
26. 点击上传
27. 以115200波特率打开串行监视器——你应该能看到:MPU6050 OK、SD就绪、WiFi已连接,以及IP地址
本文编译自hackster.io





