本帖最后由 縋逐ЮDreams 于 2018-6-13 15:54 编辑
一、项目名称:
餐厅服务机器人
二、项目概述:
该项目是基于LPC54114的餐厅服务机器人的设计。通过该设计,当有人在桌子上坐下时,接触开关检测到之后会通过ESP8266发送信息到服务器,服务器会传输信息到机器人,机器人通过电磁传感器寻迹到达指定的服务桌子为客人提供服务。餐厅服务机器人有红外避障传感器,人体红外传感器可以进行避障,有语音播放模块可以播放预先设定的语音提醒客人的操作,与服务器的通信使用ESP8266 WIFI模块。该设计中有一块OLED显示屏为可以方便客人点餐,会自动计算价格上传服务器,并且在此过程中可以随时再点菜。通过最终的测试,机器人可以完成基本的实现预定的服务功能,细节部分还有待改进。 该项目使用到了双核系统,M4内核用于进行ESP8266与服务器的通信,OLED液晶显示,点菜操作,处理一些较为复杂的功能;M0+内核用于机器人的运动,语音播放,避障等功能,两个核之间通过mailbox中断进行数据通信。
该项目包括单片机软件,服务器软件,服务器软件通过易语言编写。整个系统的硬件部分均采用了模块和手工焊接的方式来搭建完成的,软件部分通过MDK5调试完成。
三、实现功能:
1、OLED显示 OLED会显示wifi连接信息,操作方式以及菜单等一些信息,如下图所示。
我使用的OLED是IIC驱动的那种,使用了软件IIC进行驱动。
接线:
SCL -- PIO023
SDA -- PIO024
2、电磁轨道寻迹 由于最近学校有恩智浦智能车大赛,有电磁组的赛道,所以我就直接使用电磁组的赛道用于餐厅服务机器人的寻迹,相比较于传统的黑线寻迹的优势很明显,不受环境光线的干扰,同时在运动过程中不容易出错,放在车子的最前端,由于标志桌子座位号还是采用了黑线,使用电磁传感器需要铺设特定的路径,没有此条件,所以用了一个红外避障传感器用于编辑是否到达指定的桌子座位号。
电磁传感器读取的是ADC值,但是,通过放大器进行放大
接线: OUT1 -- PIO1.1 OUT2 -- PIO1.2
3、ESP8266无线通信 通过ESP8266与服务器连接。与服务器通信,服务器会发送“取菜”,“送菜”,“桌位号”等命令,客户端会接受这些命令,会发送菜单命令等。 ESP8266通过串口用AT指令进行工作,串口发送指令给ESP8266,ESP8266再将指令通过WiFi发送出去,发送特殊的指令可以进行不同的操作。
虽然是进行串口发送数据,但是这个串口的数据处理还是花了我很多的时间,最开始使用的是例程中的串口发送与接收程序,但是对ESP8266不适用,例程中的串口只能发送特定成都为16的字符数据,有一个宏定义字符可以进行发送长度的修改,但是我试着修改了数据的长度,发现并没有用,而AT指令有时候大于这个数,并且发送指令也会大于这个成都,我的处理方式是进行分段发送,将一个很长的数据通过分段进行发送,通过最终的测试,数据可以正常的发送处理,可以发送任意长度的数据,通过对例程中的程序进行修改之后在进行发送长度的处理之后才能够就行数据的正常发送。
ESP8266使用的是串口5(USART5) 连线: RXD -- PIO0.20 TXD -- PIO0.18
4、自动避障 通过两个红外避障模块和一个人体红外模块进行避障功能,人体红外检测是否有人挡住了赛道,进行语音提醒。红外避障进行障碍物的避让,在路被挡住的情况下也可以进行简单避障运行。
该模块使用起来比较简单,就是检测传感器返回的高低电平信号。
接线: 第一个:PIO1.11 第二个:PIO1.10 第三个:PIO1.5
当只有一个红外避障模块检测到障碍物的时候,就会自动避障,当两个红外避障模块同时检测到障碍物的时候就会启动蜂鸣器报警和语音提示借过一下。 通过实验测试,避障功能能够正常使用。如下视频所示:
由于一个人不太好拍摄视频,所以我就有单独录制了一个:
5、语音播放 当可以点菜时进行语音提示,点餐完毕进行语音提示,有人挡住障碍物进行语音提示。语音播放模块如下图。
改语音播放模块采用的是蓝马科技的语音录放模块,其共有8个通道,每个通道控制一个语音,当给一个低电平的时候就会触发语音播放,控制方式建较为简单,由于我所控制的语音较少,所以就直接采用的单片机的IO口进行控制,如果控制得我语音较多的时候可以采用译码器进行控制。
接线: 第一段:PIO0.15 第二段:PIO0.19 第三段:PIO0.21
6、主控模块 主控模块为lpc54110,由于我多次操作不当,这块单片机已经损坏了很多,第一个micro-USB口已经不能供电了,经过测试,是板载的KL26二极管坏掉了,我就采用的micro-USB2进行供电的,又一次不小心将小车从高空中摔落, 麦克风孔与耳机孔就壮烈牺牲了  看下图,好在板子还能正常使用,不然的话只能再买一块了
本设计采用的双核进行工作,M0+核主要负责机器人的运动,采集电磁传感器的信号,处理并控制小车的运动,其中机器人是否运动则由M4核传输过来的控制信号决定,M4内核会传输送菜,取菜,有客人来了,停止,运动等信号。双核的信号通过MailBox中断进行,其中主要内核为M4。
7、自制的服务器软件 该项目需要一个服务器软件参与控制,网上虽然有服务器软件,但是都不和我意,所以我就自己做了一个服务器软件。采用易语言编写,因为易语言见简单,中文编写。哈哈,下面就是我写的服务器软件的截图。 我将所有的控制都设置成了按钮的形式。并且菜单也展示了出来,当接收到机器人发送过来的菜单信息时,马上对菜单进行分析,提取出客人所点的菜的信息,显示在嘴左边。
菜名变成了绿色,表示客人点过这个菜了。如下图。
8、按键 该项目用到了lpc54110开发板上的板载的4个按键 按键1:用于停止和启动M0+内核,由于主内核为M4,设置了一个按键用于对从内核的汽艇进行控制; 按键2:用于控制菜单选择时的下一个菜名的选择; 按键3:用于菜单选择时的上一个菜名的选择; 按键4:单击用于进入菜单选择界面,选择某一个菜名,和再次进入菜单选择界面 长按(大于2s)为确定选择的菜单信息并进行WIFI传送
9、LED
该项目中用到了两个LED等,分别为LED7,LED6
LED7为M0+内核的工作指示灯,没500ms闪烁一次
LED6为M4内核的工作指示灯,每隔1s中闪烁一次,当灯没有闪烁的时候表示内核没有工作或者程序卡死在哪个地方,在进行调试的时候非常有用,很多的时候M0+内核工作不正常都可以通过这种方式发现。
四、作品实物
整体如下图所示,有LPC54110双核单片机,12V电池,稳压模块,电机驱动,红外避障模块,人体红外模块,OLED 屏幕液晶,ESP8266模块,语音播放模块,蜂鸣器开关等期间组成:
该项目几乎用到了lpc54110的所有IO口,不得不说的是IO口确实有点少 。
看图:
本设计的功能:
1、当有客人在饭桌上坐下时,会发送一个命令“座位号:xx”到服务器,服务器接收到该命令就会再次将命令发送给机器人(该命令在本设计中是直接通过服务器发送的,直接进行模拟,本设计的重点是在餐厅服务机器人上,所以这部分只是进行了模拟);
2、机器人收到了“座位号:xx”命令就会自动运动到指定座位,然后停下,提示客人点餐,客人可以通过单片机上的OLED显示屏和按键选择所需要的菜名,然后确定之后发送给服务器;
3、服务器收到机器人发送过来的菜单命令之后会自动解析出点的那些菜,并且在客人所点的菜的背景变成绿色,表示这个菜被客人所确定的;
4、当厨师将才做好了之后会发送“取菜”命令,机器人获取到取菜命令之后会自动运动到厨房,然后停止,等待下一条指令;
5、厨师将菜放好了之后,发送一个“送菜”命令,机器人获取到命令之后就会自动运动到客人座位旁边。
6、然后依次循环,当客人走后,可以点击服务器上的清楚命令,恢复成初始值。
五、演示视频
目前仅有一个ESP8266通信的视频,其他视频待整体组装之后拍摄
这个是完整的项目视频:
六、项目文档
服务器软件: |