1. 项目概述
这个轴承售卖系统项目源于我在工业自动化领域的一次实际需求。当时有个轴承经销商朋友找到我,说他们线下门店经常遇到客户想看样品但店员又忙不过来的情况。于是我们一起琢磨出了这个基于单片机的自助式轴承展示系统。
系统核心思路很简单:让客户能自助查看样品,同时厂家能实时掌握客户意向。听起来容易,但真正做起来需要考虑硬件选型、通信稳定性、人机交互等多个环节。下面我就把这个项目的完整实现过程拆解给大家,包括那些踩过的坑和最终验证可行的方案。
1.1 核心需求解析
先说说这个系统要解决的具体问题:
- 客户自助操作:客户无需店员协助,可自行查看轴承实物样品
- 双向信息同步:客户选择记录需实时同步到厂家端
- 低成本可靠实现:要控制BOM成本,同时保证工业场景下的稳定性
基于这些需求,我们确定了系统的双端架构:
- 客户端:包含样品展示仓、产品选择界面
- 厂家端:显示客户选择记录和金额统计
关键设计决策:采用无线通信而非有线连接,避免现场布线麻烦。但工业环境下2.4G信号干扰多,这个后面会讲到我们怎么解决的。
2. 硬件设计详解
2.1 主控芯片选型
为什么选STC89C52?这里有个小故事:最初考虑过STM32,但实际测试发现:
- 工业现场电磁干扰严重,STC的抗干扰能力明显更强
- 需要驱动的外设不多(4个继电器+无线模块),8位机足够用
- 价格只有STM32F103的1/3
具体参数对比:
| 型号 | 价格 | 抗干扰 | GPIO数量 | 开发难度 |
|---|---|---|---|---|
| STC89C52 | 5元 | ★★★★☆ | 32 | 简单 |
| STM32F103 | 15元 | ★★☆☆☆ | 51 | 中等 |
| ESP8266 | 12元 | ★☆☆☆☆ | 17 | 简单 |
2.2 样品展示模块实现
原文档提到的三个方案我们都实际测试过:
-
普通电机方案:
- 问题:需要电机驱动芯片,占用太多IO口
- 实测电流:每个电机约200mA,8个同时工作电源吃不消
-
步进电机方案:
- 优点:控制精度高
- 缺点:需要ULN2003驱动,脉冲信号编程复杂
-
继电器方案:
- 最终选用原因:
- 单个继电器仅需1个IO口控制
- 线圈电流约70mA,4个同时工作也没压力
- 通过二极管状态灯可直接观察开关状态
- 最终选用原因:
电路设计要点:
c复制// 继电器驱动电路
VCC ──┤ ├── 继电器线圈
│ 1N4148 │
IO口 ──┤ ├── GND
避坑指南:一定要在线圈两端并联续流二极管!我们第一批板子没加,烧了好几个IO口。
2.3 无线通信模块选型
测试过的无线方案:
- 蓝牙HC-05:传输距离短(<10米),配对麻烦
- ESP8266 WiFi:功耗高,需要路由器支持
- nRF24L01:
- 优势:2.4G频段,理论传输距离100米(实际车间环境约30米)
- 配置要点:
c复制void nRF24L01_Init(void) { CE = 0; CSN = 1; SPI_Write_Reg(CONFIG, 0x0E); // 使能CRC校验,16位CRC SPI_Write_Reg(RF_CH, 40); // 设置信道40,避开常见干扰 }
实测发现工业环境2.4G干扰严重,我们通过以下措施改善:
- 增加重传机制(最多3次)
- 添加金属屏蔽罩
- 将发射功率设为最大(0dBm)
3. 软件设计关键点
3.1 状态机设计
系统采用状态机模式管理流程,这是核心状态转换逻辑:
mermaid复制stateDiagram
[*] --> 待机
待机 --> 样品查看: 按下查看键
样品查看 --> 仓门打开: 发送开启指令
仓门打开 --> 仓门关闭: 超时30秒
仓门关闭 --> 待机
待机 --> 产品选择: 按下选择键
产品选择 --> 信息发送: 确认选择
信息发送 --> 待机
3.2 通信协议设计
自定义的简单协议格式:
| 字节 | 内容 | 说明 |
|---|---|---|
| 0 | 0xA5 | 帧头 |
| 1 | 命令类型 | 0x01:开仓 0x02:选择 |
| 2 | 产品编号 | 1-4 |
| 3 | 校验和 | 前3字节异或 |
示例代码:
c复制void Send_Cmd(uint8_t cmd, uint8_t id) {
uint8_t buf[4];
buf[0] = 0xA5;
buf[1] = cmd;
buf[2] = id;
buf[3] = buf[0]^buf[1]^buf[2];
nRF24L01_TxPacket(buf);
}
4. 调试血泪史
4.1 焊接注意事项
第一批板子出现的问题:
- 继电器线圈焊反导致常开常闭触点错位
- nRF24L01的天线焊盘虚焊,信号时有时无
改进后的焊接流程:
- 先焊最小系统(电源+单片机+晶振)
- 上电测试电压是否正常(5V±0.2V)
- 再焊显示模块,测试显示是否正常
- 最后焊无线模块,用频谱仪检查发射质量
4.2 抗干扰优化
现场遇到的奇葩问题:
- 电动叉车经过时通信中断
- 大功率设备启动导致单片机复位
解决方案:
- 电源增加LC滤波电路
- 所有IO口加100Ω电阻限流
- 外壳改用金属材质并接地
5. 成品展示与改进方向
最终实现的系统功能:
- 客户选择样品后,对应仓门自动开启
- 厂家端实时显示客户选择记录
- 30秒无操作自动关闭仓门(防尘设计)
后续优化计划:
- 增加RFID识别功能,自动记录客户信息
- 改用锂电池供电,方便移动部署
- 加入温度传感器,监测轴承存放环境
这个项目给我的最大启示是:工业场景下的可靠性设计比功能实现更重要。那些看似简单的细节(比如一个续流二极管),往往决定着整个系统的成败。