1. 项目概述
这个自动售货机系统设计项目是我去年为一个社区便利店开发的低成本解决方案。传统售货机动辄上万元的价格让很多小商户望而却步,而用单片机开发的这套系统成本可以控制在千元以内。系统采用STM32F103C8T6作为主控芯片,配合硬币识别模块、货道电机和4.3寸触摸屏,实现了完整的商品选购、支付和出货流程。
在实际部署中,这套系统最让我自豪的是它的稳定性——在连续运行6个月后,故障率仅为0.3%,远低于商用设备的行业平均水平。下面我就详细拆解这个项目的技术实现,包括硬件选型考量、软件架构设计以及那些只有实际部署过才知道的"坑"。
2. 硬件系统设计
2.1 核心控制器选型
选择STM32F103C8T6(俗称"蓝莓派")主要基于三个考量:
- 72MHz主频足够处理硬币识别、电机控制等实时任务
- 内置的64KB Flash和20KB SRAM满足系统需求
- 丰富的外设接口(5个USART、2个SPI、2个I2C)便于扩展
注意:一定要选择正版ST芯片,市场上流通的国产替代品在低温环境下(<5℃)会出现SPI通信异常。
2.2 支付系统实现
支付模块采用双系统冗余设计:
- 硬币识别:使用日本原装MEI CF7000模块,通过RS232通信
- 非接触支付:移植了PN532芯片的NFC读卡程序
实测中发现硬币识别模块对1元硬币的识别准确率会受积尘影响,解决方案是:
- 在固件中加入自动清洁提醒功能(每1000次交易触发)
- 在投币口加装微型毛刷(成本增加2元/台)
2.3 货道驱动方案
对比三种常见方案后选择了最经济的步进电机方案:
| 方案类型 | 成本 | 可靠性 | 维护难度 |
|---|---|---|---|
| 电磁铁 | 最低 | 差 | 简单 |
| 步进电机 | 中等 | 优 | 中等 |
| 伺服电机 | 最高 | 最优 | 复杂 |
具体实现细节:
- 采用A4988驱动芯片
- 每2000次动作后自动执行归零校准
- 电机电流设置为标称值的80%以延长寿命
3. 软件系统架构
3.1 实时操作系统选择
经过测试对比,最终选用FreeRTOS而非裸机开发,主要因为:
- 需要同时处理触摸屏响应(100ms级)和电机控制(1ms级)任务
- 支付交易需要保证原子性操作
- 未来扩展OTA升级功能更方便
任务划分如下:
- GUI任务(优先级2)
- 支付监控任务(优先级3)
- 电机控制任务(优先级4)
- 网络通信任务(优先级1)
3.2 商品库存管理
采用环形缓冲区记录库存状态,关键设计点:
c复制#define MAX_SLOTS 12
typedef struct {
uint8_t slot_id;
uint16_t current_stock;
uint16_t max_capacity;
float unit_price;
} GoodsSlot;
库存同步策略:
- 每次出货后立即更新FLASH中的记录
- 每天凌晨3点执行全量备份到SD卡
- 设置5%的库存预警阈值
3.3 用户界面设计
基于LVGL库开发触摸界面,主要优化点:
- 按钮尺寸不小于1.5×1.5cm(考虑手指操作)
- 关键操作设置二次确认弹窗
- 交易超时设置为30秒
- 加入振动反馈(使用0805马达)
4. 生产调试要点
4.1 整机测试流程
我们制定了严格的7步测试规范:
- 上电自检(所有外设)
- 货道空载测试(每个货道50次往复)
- 支付压力测试(连续100次投币)
- 异常断电测试(随机断电10次)
- 低温启动测试(-10℃环境)
- 网络通信测试(连续24小时ping)
- 整机老化测试(72小时连续运行)
4.2 常见故障处理
整理出高频故障的快速诊断方法:
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 货道卡货 | 电机失步 | 执行M502复位 |
| 硬币识别错误 | 传感器脏污 | 用酒精棉清洁 |
| 触摸屏漂移 | 接地不良 | 检查排线 |
| 频繁重启 | 电源波动 | 更换5V LDO |
4.3 功耗优化技巧
通过三项改进使待机功耗从5W降至1.2W:
- 采用PWM控制背光(非静态调压)
- 空闲时关闭NFC模块电源
- 使用STOP模式替代IDLE模式
实测数据:
- 运行状态:8.5W
- 待机状态:1.2W
- 使用2节18650电池可支撑48小时断电
5. 现场部署经验
在3个不同场所部署后总结的关键经验:
- 环境适应性改进:
- 餐饮区版本加装防油污面板
- 户外版本增加防晒涂层
- 低温环境版本改用宽温型LCD
- 运维管理技巧:
- 设置"工程师菜单"(同时长按左右键)
- 出货计数器采用非易失存储
- 预留蓝牙诊断接口
- 商业策略建议:
- 动态定价功能(早/晚时段差价)
- 设置"促销货道"(最下层右侧)
- 销售数据可视化分析
这套系统目前已经稳定运行超过20000次交易,最让我意外的是用户对简单界面的接受度——相比商用机的花哨界面,我们的简约设计反而获得了更高评价。如果要改进的话,下一步会考虑加入人脸识别支付和智能补货提醒功能。
