1. 项目概述
这个全自助食堂交易系统是我在毕业设计期间完成的一个嵌入式硬件项目,主要解决了传统食堂人工打餐效率低、排队时间长、容易出错等问题。系统采用单片机作为核心控制器,结合称重传感器、RFID技术和人脸识别模块,实现了从取餐到结算的全流程自动化。
在实际测试中,这套系统将传统食堂的平均排队时间从8-10分钟缩短到30秒以内,结算准确率达到99.97%。特别适合高校食堂、企业餐厅等高人流量的用餐场景。下面我将详细介绍这个系统的设计思路和实现细节。
2. 系统架构设计
2.1 整体架构解析
系统采用三层架构设计:
- 感知层:包括称重传感器、RFID读写器、人脸识别摄像头等硬件设备
- 控制层:以STM32单片机为核心的处理单元
- 应用层:包含手机APP、PC管理端和数据库系统
这种分层设计使得系统各模块耦合度低,便于后期维护和功能扩展。我在设计时特别注意了模块间的通信协议标准化,确保不同厂商的设备可以无缝接入。
2.2 硬件选型考量
经过多次对比测试,最终确定的硬件配置如下:
- 主控芯片:STM32F407ZGT6(性价比高,外设丰富)
- 称重模块:HX711+铝合金悬臂梁传感器(精度0.1g)
- RFID模块:MFRC522(读取距离3-5cm)
- 人脸识别:OV7725摄像头+本地化算法处理
- 显示屏:3.5寸TFT LCD(分辨率320×480)
提示:选择HX711称重模块时要特别注意其采样速率和抗干扰能力,食堂环境电磁干扰较强,建议选用带屏蔽罩的版本。
3. 核心功能实现
3.1 取餐感知终端设计
终端硬件由以下几个关键部分组成:
- 称重平台:采用四角平衡设计,确保餐盘放置位置不影响称重精度
- RFID天线:内嵌在称重平台下方,用于读取餐盘标签
- 状态指示灯:三色LED指示设备状态(准备/识别中/扣款成功)
- 触摸按键:用于功能选择和确认操作
软件流程如下:
c复制void main() {
hardware_init(); // 硬件初始化
while(1) {
if(detect_plate()) { // 检测餐盘放置
identify_user(); // 人脸识别用户
start_weighing(); // 开始称重
calculate_fee(); // 计算费用
deduct_balance(); // 扣款
update_database();// 更新数据库
}
}
}
3.2 多用户并发处理机制
考虑到食堂高峰期可能出现多个用户同时取餐的情况,我设计了基于时间片轮转的并发处理机制:
- 每个终端独立工作,通过CAN总线与主控通信
- 数据库操作采用排队机制,避免并发写入冲突
- 关键数据操作使用互斥锁保护
- 本地缓存最近30条交易记录,网络异常时仍可正常工作
实测表明,这套机制可以稳定支持8个终端同时工作,平均响应时间<200ms。
4. 应用端设计细节
4.1 手机APP功能实现
APP采用Flutter框架开发,主要功能模块包括:
- 用户注册/登录(与人脸识别系统对接)
- 余额查询与充值
- 消费记录查询
- 菜品营养分析(基于摄入量计算)
- 用餐偏好统计
dart复制class MealRecord {
String dishName;
double weight;
double price;
DateTime time;
// 其他字段和方法...
}
void fetchRecords() async {
var response = await http.get(Uri.parse('API_URL'));
// 数据处理...
}
4.2 PC管理端功能
管理员通过WEB端可以:
- 实时监控各个终端状态
- 调整菜品价格信息
- 生成各类统计报表
- 管理用户账户
- 系统参数配置
采用Vue.js+Element UI开发,后端使用Spring Boot框架,数据库为MySQL。
5. 关键技术创新点
5.1 动态称重算法
传统称重系统在餐盘放置/取走时会产生较大波动,我设计了专门的动态滤波算法:
- 移动平均滤波(窗口大小=10)
- 滑动标准差检测(排除突发干扰)
- 趋势预测补偿(基于历史数据)
- 温度漂移校准(内置DS18B20传感器)
算法实现关键代码:
c复制float dynamic_weight() {
static float buffer[10];
// 数据采集与滤波处理...
return stable_weight;
}
5.2 低功耗设计
虽然系统需要持续工作,但通过以下措施降低了30%的功耗:
- 人脸识别模块休眠唤醒机制
- LCD背光自动调节
- 传感器间歇采样
- 通信模块按需激活
6. 开发中的难点与解决方案
6.1 称重精度问题
初期测试发现称重结果波动较大(±5g),经过排查和优化:
- 改用更稳定的5V线性电源(原USB供电噪声大)
- 增加机械结构减震设计(硅胶垫片)
- 优化传感器安装方式(避免侧向力影响)
- 软件上增加自动去皮功能
6.2 人脸识别光照适应
食堂不同时段光线变化大,导致识别率下降。解决方案:
- 增加自适应补光LED
- 开发多曝光融合算法
- 建立不同光照条件下的特征模板库
- 设置备用识别方式(学工号+密码)
7. 系统测试与优化
7.1 功能测试方案
设计了完整的测试用例集,包括:
- 单用户正常流程测试
- 多用户并发测试
- 异常情况测试(网络中断、余额不足等)
- 长期稳定性测试(连续运行72小时)
7.2 性能优化记录
通过以下优化显著提升了系统响应速度:
- 数据库查询优化(建立合适索引)
- 关键代码改用寄存器操作
- 通信协议精简(减少30%数据量)
- 预加载常用数据到内存
8. 实际应用建议
根据我的部署经验,给出以下实用建议:
- 安装位置选择:避免阳光直射称重平台,距离墙壁至少50cm便于维护
- 日常维护:每周清洁称重传感器,防止油污影响精度
- 用户引导:设置明显的操作指引,减少用户学习成本
- 网络配置:建议使用有线网络连接,WiFi信号不稳定区域考虑工业级无线模块
9. 扩展功能设想
这个系统还有很大的扩展空间:
- 增加营养分析功能,根据取餐数据给出健康建议
- 与校园卡系统深度整合
- 开发智能推荐算法,基于历史数据推荐菜品
- 接入食堂库存管理系统,实现智能备餐
我在实际开发中发现,STM32的硬件资源还有30%左右的余量,完全可以支持这些扩展功能的实现。