1. 项目背景与核心需求
中药仓储管理一直是医药行业中的特殊难题。不同于西药的标准包装和明确有效期,中药材的保存条件更为复杂——温度、湿度、光照、虫害防控等因素都会直接影响药材品质。传统的人工记录方式不仅效率低下,还容易出现记录错误或监控盲区。
这个基于单片机的智能仓库系统,正是为了解决以下三个核心痛点:
- 实时环境监控:需要持续采集库房内的温湿度、光照强度等关键参数
- 异常预警机制:当存储环境超出设定阈值时能立即报警
- 数据追溯能力:所有监测数据需要长期存储供质量追溯使用
我在某中药企业的实地调研中发现,仓库管理员最头疼的就是半夜突发的温湿度波动。有次凌晨三点空调故障,等早上发现时,整批当归已经出现受潮迹象,直接损失超过二十万。这正是促使我设计这个系统的直接原因。
2. 系统架构设计解析
2.1 硬件组成方案
整个系统采用模块化设计,主要包含以下硬件单元:
-
主控模块:
- 选用STM32F103C8T6单片机(业内称"蓝色药丸")
- 选择理由:72MHz主频足够处理传感器数据,内置12位ADC满足精度要求,且成本控制在20元以内
-
环境监测模块:
- 温湿度:DHT22数字传感器(±0.5℃精度)
- 光照强度:BH1750数字光强传感器(1-65535lux范围)
- 特别增加了AM1001粉尘传感器,用于检测药材霉变产生的孢子
-
报警模块:
- 声光报警器(120dB蜂鸣器+RGB LED)
- GSM短信模块(SIM800C),在无人值守时发送预警短信
-
存储扩展:
- SD卡模块用于本地数据存储
- 预留SPI接口可连接无线模块上传云端
关键技巧:所有传感器都通过防潮胶密封处理,避免中药材挥发物腐蚀电路。实测显示,未经处理的传感器在高湿度环境下平均寿命只有3个月。
2.2 软件逻辑设计
系统固件采用状态机模式开发,主要工作流程如下:
c复制void main() {
init_hardware(); // 硬件初始化
load_config(); // 读取阈值配置
while(1) {
read_sensors(); // 采集环境数据
check_alarm(); // 阈值判断
save_to_sd(); // 数据存储
sleep(60); // 每分钟采样一次
}
}
特别设计了三级预警机制:
- 初级预警(参数超限10%):LED闪烁提醒
- 中级预警(持续超限30分钟):启动蜂鸣器
- 高级预警(关键参数超标):发送短信并记录事件日志
3. 核心功能实现细节
3.1 高精度温湿度采集
DHT22传感器虽然标称精度很高,但实际使用中发现两个典型问题:
- 响应延迟:从请求数据到就绪需要约2秒
- 数据漂移:连续读取时会出现±0.3℃的波动
通过以下方法优化:
c复制float get_avg_temp() {
float sum = 0;
for(int i=0; i<5; i++) {
sum += DHT22.readTemperature();
delay(3000); // 每次间隔3秒
}
return sum/5; // 取5次平均值
}
实测表明,这种处理方式可将温度波动控制在±0.1℃以内,完全满足药典规定的仓储标准。
3.2 低功耗数据存储方案
SD卡存储面临两个挑战:
- 频繁写操作导致卡寿命缩短
- 突然断电可能损坏文件系统
解决方案:
- 采用环形缓冲区,攒够10条记录才写入一次
- 使用FAT32文件系统配合异常恢复机制
- 每次写入后执行sync()强制刷新缓存
存储格式设计为CSV文件,包含时间戳和各传感器读数:
code复制2023-08-20 14:30:00, 25.3, 58, 320, 12
2023-08-20 14:31:00, 25.2, 57, 315, 11
4. 现场部署注意事项
4.1 传感器布点原则
根据GSP药品经营质量管理规范,建议按以下方式布置监测点:
- 每个独立库房不少于3个监测点
- 距离地面1.5-2米高度(与人呼吸带平齐)
- 避开空调直吹和阳光直射位置
- 距离墙壁至少50cm
我们做过对比测试:靠近空调出风口的监测点,温度读数会比实际库房平均温度低2-3℃,这种误差会导致系统误判。
4.2 系统校准要点
所有传感器需要定期校准:
- 温湿度传感器:每月用标准干湿温度计比对一次
- 光照传感器:每年用照度计标定一次
- 报警功能:每周手动测试声光报警和短信通知
校准数据记录在SD卡的CALIB.TXT文件中,包含日期、标准值和测量值:
code复制2023-08-01 TEMP 25.0 25.1
2023-08-01 RH% 60.0 59.8
5. 典型问题排查指南
5.1 数据异常排查流程
当监测数据出现异常时,建议按以下步骤排查:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 温度读数固定为0 | DHT22接线松动 | 重新插拔传感器 |
| 湿度显示95%以上 | 传感器受潮 | 更换新传感器 |
| 数据记录缺失 | SD卡接触不良 | 用酒精擦拭金手指 |
| 短信发送失败 | SIM卡欠费 | 检查余额和信号强度 |
5.2 电源稳定性处理
现场最常遇到的是电源问题:
- 电压波动导致单片机重启
- 雷击损坏电源模块
改进方案:
- 增加TVS二极管防护浪涌电压
- 使用DC-DC稳压模块替代普通LDO
- 为关键电路配置备用电池(如DS1302时钟芯片)
实测表明,经过电源优化后,系统在180V-250V电压波动下都能稳定工作。
6. 系统扩展方向
当前系统已经可以满足基本需求,但根据实际使用反馈,还可以进一步扩展:
-
药材条码管理:
- 增加扫码枪模块
- 关联库存数据与环境数据
- 实现从入库到出库的全流程追溯
-
智能除湿联动:
- 通过继电器控制除湿机
- 当湿度持续超标时自动启动设备
- 需注意设置最小间隔时间(建议≥30分钟),避免设备频繁启停
-
可视化监控平台:
- 通过ESP8266上传数据到云服务器
- 开发Web界面实时查看各库房状态
- 支持历史数据曲线和报表导出
在最近一次系统升级中,我们尝试了ESP32-C3替代STM32,发现其内置WiFi功能确实方便,但在高湿度环境下的稳定性还不如传统单片机。这个经验告诉我们,在医药仓储这种特殊场景,可靠性永远应该排在功能丰富性之前。