1. 系统概述与设计背景
在现代物流仓储管理中,货车称重环节的效率直接影响整体运营成本。传统人工记录方式存在数据易错、效率低下等问题。这套基于STM32的智能称重系统,通过RFID自动识别与电子称重联动,实现了货车卸货过程的自动化管理。
我在实际工业场景中见过太多因称重误差导致的纠纷案例。有一次亲眼目睹仓库因手工记录失误,导致两车货物重量混淆,最终引发长达数周的账目核对。这正是促使我研究本系统的直接原因。
系统核心创新点在于:
- 采用工业级STM32F103作为主控(成本仅20元左右)
- RFID识别与称重数据自动绑定
- 异常情况声光报警机制
- 数据实时上传云端
- 整体功耗控制在5W以内
2. 硬件设计详解
2.1 主控选型与电路设计
选择STM32F103C8T6主要基于三点考量:
- 72MHz主频足够处理称重数据(HX711输出速率仅10/80Hz)
- 内置12位ADC满足称重精度需求
- 5V耐受IO口可直接连接大部分模块
电源电路设计要点:
c复制// 典型电源电路参数
LM7805输入端:DC9-12V
输出端:5V/1A(需加装100uF电解电容滤波)
AMS1117-3.3V:为ESP8266提供稳定电压
实际调试中发现:当同时启用RFID和WiFi模块时,电源纹波会引发STM32复位。解决方法是在7805输出端并联220uF电容,并在各模块VCC对地加装0.1uF瓷片电容。
2.2 关键模块接口设计
RFID模块(RC522)连接方案:
| STM32引脚 | RC522引脚 | 备注 |
|---|---|---|
| PA4 | SDA | SPI数据线 |
| PA5 | SCK | 时钟线 |
| PA7 | MOSI | 主出从入 |
| PB0 | RST | 复位引脚 |
| GND | GND | 必须共地 |
HX711称重模块校准流程:
- 空载时读取100次AD值取平均(基准值)
- 放置已知重量砝码(建议20kg)
- 计算系数K=砝码重量/(测量值-基准值)
- 将K值存入STM32 Flash
我在某冷链仓库实测发现:HX711在不同环境温度下会有±0.3%的漂移。解决方法是在初始化时自动执行温度补偿算法:
c复制float temp_compensate(float raw_val) {
float temp = read_temp_sensor(); // DS18B20数据
return raw_val * (1 + 0.0003*(25-temp));
}
3. 软件架构与核心算法
3.1 主程序流程图
plaintext复制START
├─ 硬件初始化
├─ 加载校准参数
├─ 创建WiFi连接
└─ 进入主循环:
├─ RFID扫描(100ms间隔)
├─ 重量采样(50ms间隔)
├─ 数据融合处理
├─ OLED刷新显示
└─ 异常检测处理
3.2 数据融合算法
当识别到RFID标签时,系统会启动重量稳定检测:
- 连续采集10次重量数据(间隔100ms)
- 计算标准差σ
- 若σ<阈值(默认0.5kg)则认为稳定
- 记录此时重量与RFID绑定
关键代码实现:
c复制#define STABLE_THRESHOLD 0.5f
int check_stable(float samples[10]) {
float sum=0, mean, variance=0;
for(int i=0; i<10; i++) sum += samples[i];
mean = sum/10;
for(int i=0; i<10; i++)
variance += pow(samples[i]-mean, 2);
return (sqrt(variance/10) < STABLE_THRESHOLD);
}
4. 通信协议设计
4.1 WiFi数据传输格式
采用JSON格式通过MQTT协议上传:
json复制{
"device_id": "WH-001",
"timestamp": 1712345678,
"rfid": "5A3B7C8D",
"weight": 1560.5,
"status": 0x01,
"temp": 25.3
}
4.2 通信异常处理机制
开发中遇到的典型问题:
- WiFi断连后重连失败
- 数据包丢失
- 服务器无响应
解决方案:
- 实现三级重传机制:
- 立即重传(间隔1s,尝试3次)
- 延迟重传(间隔10s,尝试2次)
- 存入SD卡等待恢复
具体实现:
c复制void wifi_retry_policy() {
for(int i=0; i<3; i++) {
if(wifi_send(data)) return;
delay(1000);
}
save_to_sd_card(data);
}
5. 系统优化与实测数据
5.1 功耗优化方案
实测各模块工作电流:
| 模块 | 工作电流 | 休眠电流 |
|---|---|---|
| STM32 | 25mA | 2mA |
| RC522 | 13mA | 0.1mA |
| ESP8266 | 80mA | 0.5mA |
| HX711 | 1.5mA | 1.5mA |
采取的优化措施:
- 动态休眠策略(无车辆时进入低功耗模式)
- RFID间歇扫描(500ms唤醒一次)
- WiFi按需连接(数据攒包发送)
5.2 现场测试数据
在某物流园区连续7天测试结果:
| 指标 | 测试值 |
|---|---|
| 识别准确率 | 99.7% |
| 称重误差 | ±0.45kg |
| 平均处理时间 | 3.2秒/车 |
| 最大连续工作时长 | 216小时 |
| 温度适应性 | -10℃~55℃ |
6. 常见问题排查指南
6.1 RFID识别失败排查
- 检查天线阻抗匹配(通常为50Ω)
- 验证SPI通信时序(用逻辑分析仪抓取波形)
- 测试不同标签距离(最佳识别距离3-5cm)
6.2 称重数据跳变处理
- 检查传感器接线(四线制全桥接法)
- 添加数字滤波(推荐滑动平均滤波)
- 排除机械振动干扰(加装橡胶垫)
6.3 ESP8266连接异常
bash复制AT+CWLAP // 扫描可用WiFi
AT+CIPSTATUS // 检查当前连接状态
AT+CWJAP="SSID","password" // 手动连接测试
7. 项目扩展方向
在实际部署后,我总结了几个有价值的改进点:
-
多天线设计:在称重台前后各安装RFID天线,解决标签方向性问题
-
动态校准:每周自动执行零点校准,消除传感器蠕变误差
-
边缘计算:在STM32上实现简单的重量趋势分析(如判断是否超载)
-
太阳能供电:对于户外场景,可搭配10W太阳能板+18650电池组
这个系统最让我自豪的是其工业实用性——在某粮油仓库连续运行8个月零故障。期间仅因停电导致一次数据丢失,后来通过增加超级电容作为后备电源解决了这个问题。