一、自动售货机概述:项目背景、系统架构、硬件选型
各位同学,咱们今天正式开讲自动售货机项目。说实话,这个选题我琢磨了很久。为什么选它?因为自动售货机是一个典型的嵌入式系统,麻雀虽小五脏俱全。你想想看,它要处理支付、控制出货、管理库存、跟云端通信……几乎涵盖了嵌入式开发的全部核心技能。
我在2018年参与过一个校园自动售货机项目,当时踩了不少坑。今天我把这些经验揉碎了讲给你们听,希望能帮大家少走弯路。
1.1 项目背景:为什么是自动售货机?
自动售货机不是什么新鲜玩意儿。日本早在80年代就普及了。但最近几年,随着移动支付的爆发,它迎来了第二春。你想想,以前投币多麻烦,现在扫码就搞定。
从技术角度看,自动售货机有几个特点:
- 实时性要求高:支付到出货,必须在几秒内完成
- 可靠性要求高:7×24小时无人值守,出故障就是损失
- 交互体验要求高:用户操作要流畅,界面要友好
- 成本敏感:硬件成本直接决定利润空间
我个人习惯把这类项目叫做「边缘计算节点」。它不只是一个卖货的机器,更是一个数据采集终端。每卖出一瓶水,后台就知道哪个位置、什么时间、什么商品最受欢迎。这些数据比卖货本身更有价值。
核心观点:自动售货机是物联网+嵌入式+人机交互的完美结合体。学完这个项目,你基本能搞定80%的嵌入式产品开发。
1.2 系统架构:从硬件到云端的完整链路
咱们先画个整体架构图。嗯,虽然这里没有图,但我用文字描述清楚。
一个典型的自动售货机系统分为四层:
- 感知层:传感器、按键、扫码枪、摄像头
- 控制层:主控芯片(MCU/MPU)、电机驱动、支付模块
- 交互层:触摸屏、喇叭、指示灯
- 通信层:4G/WiFi模块、蓝牙、云端服务器
数据流向是这样的:用户扫码 → 支付模块确认 → 主控收到指令 → 驱动电机出货 → 屏幕显示结果 → 上报云端。
我曾经在一个项目里遇到过通信延迟问题。用户付了钱,等了5秒货还没出来,用户以为机器坏了,直接走了。后来发现是4G模块的AT指令处理太慢。这个坑后面会详细讲。
我的建议:设计架构时,一定要把「异常处理」考虑进去。比如支付成功但出货失败,系统该怎么回滚?这些在架构阶段就要想清楚。
1.3 硬件选型:主控、屏幕、支付模块
硬件选型是项目成败的关键。我见过太多人一上来就选最贵的芯片,结果成本压不住。也见过为了省钱选最便宜的,结果性能不够。
1.3.1 主控芯片选型
主控是自动售货机的大脑。选型时主要看这几个指标:
| 指标 | 要求 | 推荐方案 |
|---|---|---|
| 主频 | ≥ 200MHz | STM32F4系列 / ESP32 |
| RAM | ≥ 512KB | 用于UI缓存和协议栈 |
| Flash | ≥ 4MB | 存放UI资源和固件 |
| 外设接口 | UART×3, SPI×2, I2C×1 | 连接支付、屏幕、传感器 |
| 成本 | ≤ 30元 | 批量价 |
我个人习惯用STM32F429,原因很简单:它有硬件JPEG解码和LTDC控制器,驱动屏幕非常方便。如果你预算更紧,ESP32也是不错的选择,自带WiFi和蓝牙,省一个通信模块的钱。
注意:千万别用Arduino做产品!我见过有人用Arduino Mega做售货机,结果内存不够,跑着跑着就死机了。Arduino适合原型验证,不适合量产。
1.3.2 屏幕选型
屏幕是用户跟机器交互的窗口。选型时我建议关注这几点:
- 尺寸:7寸是黄金尺寸,太小看不清,太大成本高
- 分辨率:1024×600够用,别追求1080p,没必要
- 接口:RGB接口或MCU接口,别选HDMI(成本高)
- 触摸:电容屏优于电阻屏,响应快、寿命长
- 亮度:≥ 300cd/m²,户外使用要≥ 500cd/m²
我推荐使用7寸IPS电容屏,RGB接口,分辨率1024×600。价格大概在80-120元之间。千万别买那种带HDMI接口的「显示器」,那是给树莓派用的,不适合嵌入式。
嗯,这里要特别提醒:屏幕的排线一定要选长一点的。我吃过这个亏,排线太短,装配的时候差点把屏幕扯坏。
1.3.3 支付模块选型
支付模块是自动售货机的核心。现在主流方案有三种:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 扫码支付(微信/支付宝) | 用户习惯、无需硬件 | 依赖网络、需对接SDK | 主流方案 |
| 刷卡支付(IC卡/NFC) | 离线可用、速度快 | 需要发卡、维护成本高 | 校园/工厂 |
| 投币支付 | 无需网络、老少皆宜 | 硬币识别器贵、维护麻烦 | 老旧设备升级 |
我建议采用「扫码支付为主 + NFC刷卡为辅」的组合方案。扫码支付覆盖90%的用户,NFC用于校园卡、工卡等场景。
支付模块的通信接口通常是UART,协议是自定义的。每个厂商的协议都不一样,但核心流程差不多:
// 伪代码:支付流程
1. 用户选择商品 → 生成订单
2. 屏幕显示二维码(或启动NFC读卡)
3. 用户扫码/刷卡
4. 支付模块返回支付结果(成功/失败)
5. 成功 → 驱动电机出货
6. 失败 → 显示错误信息,提示重试
我曾经对接过一个杂牌支付模块,它的协议文档写得一塌糊涂。后来我直接抓串口数据,反推协议。嗯,这种野路子不建议你们学,但有时候确实管用。
避坑指南:支付模块一定要选有「掉电保护」功能的。万一机器突然断电,正在处理的交易不会丢。我曾经因为没注意这个参数,导致一批机器在断电后出现了「用户付了钱但没出货」的投诉。
1.4 本章小结
好了,第一章的内容就这些。咱们回顾一下重点:
- 自动售货机是物联网+嵌入式+人机交互的典型应用
- 系统架构分四层:感知、控制、交互、通信
- 主控推荐STM32F429或ESP32,屏幕选7寸IPS电容屏,支付模块用扫码+NFC组合
下一章咱们开始动手搭建开发环境,把硬件跑起来。到时候我会手把手教大家怎么配置CubeMX、怎么初始化屏幕、怎么跟支付模块通信。
记住一句话:硬件选型决定了项目的下限,软件设计决定了项目的上限。选型这一步走稳了,后面就顺了。
有什么问题,咱们下节课见。