基于ARM的餐厅点餐系统的设计与实现
系统简介
本设计主要将 STM32F103ZET6 芯片作为无线订购系统主要控制芯片,分为顾客终端和厨师终端。顾客通过 LCD 显示屏浏览菜单并点击触摸屏选择自己所需菜单,并经过有线连接到 PC 端上位机,将订餐信息上传到餐厅内部数据库,实现数据更新和存储功能。同时点餐信息经过主蓝牙模块 HC-05 无线通信技术发送到厨师终端,厨师终端通过从蓝牙模块将菜单信息汇总到厨师终端显示屏幕上,然后厨师通过语音模块 LD3320 将处理过的菜单通过语音快速清除,完成餐厅点餐操作系统的整体功能。并经过多次测试,该系统的硬件模块功能和软件上位机及数据库数据的更新、存储功能已完成。
系统综述
整个设计总体流程为:开始将硬件和软件准确连接,上电做准备工作,然后初始化硬件各个模块,顾客端界面打开,触屏点击选择菜单,菜单分上页和下页,选择完毕后,判断是否点击“确认”按钮,如果点击“确认”按钮,则通过主蓝牙发送,厨师端从蓝牙模块接收,将菜单传送到厨师端显示屏上,否则可以重新选择菜单。厨师端接收到菜单后,可以根据原材料的库存选择是否进行处理,如果原材料充足,厨师处理后,可以通过语音模块进行菜单清除,如果厨师选择不处理,可以进行反馈。最后将顾客菜单通过有线连接到点餐信息上位机上,进行菜单信息存储,物料剩余情况对比,更新,修改等操作,最终结束整个设计模块的工作。
系统流程
本设计主要由五部分组成,分别为:STM32F103zet6战舰板控制板、TFT-LCD液晶显示器、蓝牙传输模块、语音模块、上位机。其中主控制器以 STM32F103zet6芯片作为主控模块,完成菜单点餐、信息传送和接收、信息确认等功能,保证点餐系统能够完整实现。TFTLCD显示屏运用Ili9341芯片进行管理的,主要是控制TFT-LCD显示屏上面显示点餐菜单信息、菜单确认信息、菜单传送信息(仅限于与蓝牙一定距离内);蓝牙传输模块hc-05实现客户方和厨师方之间的相接,进行点餐信息传达,完成菜单的传送、接收功能。语音模块LD3200是实现厨师端将处理过的菜单,通过语音将其菜单进行取消,更便于厨师端处理菜单,完成菜单处理过程。上位机实现餐厅管理员登录和密码修改功能,连接下位机配置环境、查询历史菜单、消费菜品等功能。
材料
硬件材料
- 两块正点原子战舰V3开发板(带显示屏)
- 两块HC05蓝牙模块
- LD3320语音模块
软件材料
- Keil 5
- VS2017
- MySQL数据库
展示视频
下位机视频
基于ARM的餐厅点餐系统下位机
上位机视频
基于ARM的餐厅点餐系统的设计与实现上位机
制作
下位机使用的芯片是STM32F103ZET6,软件使用的是Keil,语言是C。
硬件连接
- LD3320语音模块连接
- 客户端蓝牙连接USART3
- 厨师端蓝牙连接USART1
- 上位机连接客户端硬件(T口线。跳线帽要插上)
下位机制作
本系统是以Cortex-M3 STM32F103zet6为主要控制芯片设计的餐厅点餐系统。硬件各个模块连接主要通过 USB串行口连接电脑电源给STM32F103zet6芯片供电,然后运用杜邦线将蓝牙主传输模块HC-05与顾客端控制器进行连接,控制点餐菜单的确认和发送。蓝牙从模块与厨师端控制器进行连接,将传输信息实时显示在TFTLCD液晶显示屏上,同时将语音模块也连接起来,两蓝牙之间可以进行无线菜单通信,并将顾客菜单信息传送到上位机,同时控制实时时钟将菜单点餐时间同步上传,组成完整的模拟餐厅点餐硬件系统。全部体系的硬件和软件系统测试是经由与PC机连线相结合的方法来完成的。软件通过运用Keil5软件进行C语言代码编写,编译完成之后通过USB转TTL串口调试工具,进行一键下载将程序烧录在STM32F103zet6芯片上,从STM32F103zet6派生的引脚连接到硬件外围设备,控制各部件正常工作。
蓝牙连接
本设计核心就是使用蓝牙完成两个板子的菜单的信息传递功能,顾客进行点餐,与其相连的主蓝牙模块将菜单数据发送出去,然后通过与厨师端连接的从蓝牙模块的接收,将点餐的菜单显示到厨师端显示屏上,完成主从蓝牙模块的菜单通讯功能。
本设计通过AT指令设置将两蓝牙上电自动配对。 参考https://blog.csdn.net/weixin_42320020/article/details/88562539
AT 进入AT指令模式
AT+RESET 重启设备
AT+ORGL 恢复默认状态
AT+ADDR? 获取模块蓝牙地址(记下来像下边那样 两个)
AT+ROLE? 查询模块角色
AT+ROLE=1或者AT+ROLE=0 一个设置为主角色 一个设置位从角色
AT+BIND=2018,12,140851 绑定蓝牙地址 注意是逗号 两个设备分别绑定对方地址
AT+CMODE=0 两个设备都设置为指定蓝牙连接模式
AT+LINK=2018,12,141598 主设备去连接从设备 连接蓝牙地址 注意逗号
模块1+ADDR:2018:12:140851(不同设备ADDR地址不同,此地址为演示地址)
模块2+ADDR:2018:12:141598
按顺序输入以上指令即可。
请务必保证两蓝牙连接成功!!!代码中没有关于蓝牙的设置。
语音模块设计
LD3320工作时,首先开始语言的ASR识别过程,由微程序控制器发出复位标志RSTB和中断标识。为了防止由于硬件问题导致识别的不正常,需要多次启动ASR识别过程来保证语言模块的识别过程可以正确的运行。然后进行初始化ASRLD_AsrStart()识别模块,初始化每个寄存器。将要识别的菜名词语添加到LD3320芯片识别列表中,发动识别并准备中断回应功能,以开启中断启用程序。若是芯片内部不正常,就重启语音识别芯片,重新初始化LD3320位置寄存器的识别流程。通过BA寄存器存储点餐菜单,并在数字寄存器和C5寄存器中搜索答案与原有寄存器存储的菜名词语进行比对,找到正确答案,完成菜单识别流程。
语音识别部分代码:
static uint8 LD_AsrAddFixed(void)
{
uint8 k, flag;
uint8 nAsrAddLength;
#define DATE_A 9 //数组二维数值
#define DATE_B 23 //数组一维数值
//添加关键词,用户修改
uint8 sRecog[DATE_A][DATE_B] = {
"qing zheng pang xie",\
"yang rou chuan",\
"mu tang dan gao",\
"la zi ji kuai",\
"xi hong shi chao ji dan",\
"qing cai ji dan mian",\
"fu shou yu",\
"zi shu zhou"\
};
uint8 pCode[DATE_A] = {
CODE_QZ, \
CODE_YR, \
CODE_MT,\
CODE_LA, \
CODE_XH, \
CODE_QC, \
CODE_FS, \
CODE_ZS \
}; //添加识别码,用户修改
flag = 1;
for (k=0; k<DATE_A; k++)
{
if(LD_Check_ASRBusyFlag_b2() == 0)
{
flag = 0;
break;
}
LD_WriteReg(0xc1, pCode[k] );
LD_WriteReg(0xc3, 0);
LD_WriteReg(0x08