如今,无论是家庭,办公室还是任何大型行业,如今的自动化系统无处不在,都配备了自动化系统。饭店/旅馆也采用了最新的自动化趋势,并正在安装机器人来交付食品和药片以接受订单。使用平板电脑等数字菜单卡,客户可以轻松选择项目。此信息将发送到餐厅的厨房,并显示在显示屏上。
在此项目中,我们将使用Arduino,TFT显示屏和433MHz RF发射器/接收器模块构建一个智能餐厅项目。在这里,发射器部分将由Arduino Uno,TFT显示屏和RF发射器组成,客户可以使用它们选择食物并下订单。接收器部分由Arduino Uno,LCD模块,RF接收器和蜂鸣器组成,将安装在餐厅厨房中以跟踪订购商品。
所需组件
- Arduino Uno(2)
- 433MHz射频发射器和接收器
- 2.4英寸TFT液晶触摸屏
- 16 * 2 LCD模块
- I 2 C模块
TFT LCD触摸屏与Arduino的接口
2.4英寸TFT LCD触摸屏是兼容Arduino UNO / Mega的彩色TFT显示屏,还带有触摸屏和SD卡插槽。此TFT显示模块具有明亮的背光和彩色240X320像素的显示屏。它还包括单个RGB像素控制,使其分辨率比黑白显示器好得多。
TFT显示与Arduino的接口非常简单,并在上一教程中进行了说明。您只需要将TFT显示器安装在Arduino Uno板上即可,如下图所示。
TFT LCD在构建便携式应用程序中非常有用,例如:
- Arduino触摸屏计算器
- 使用Arduino的智能手机控制数字密码锁
- Arduino SMART闹钟
- 带Arduino和TFT LCD的NeoPixel LED灯带
另外,在此处检查所有基于TFT LCD的项目。
电路原理图
智能餐厅菜单点餐系统项目包括“ RF发射器和接收器”部分。发送器和接收器端均使用Arduino Uno进行数据处理。我们以前使用与Arduino相同的433 MHz RF模块来构建项目,例如无线门铃,手势控制机器人等。下面给出了发射器和接收器部分的电路图。
发射器部分电路
该项目的发射器部分由Arduino Uno,RF发射器和TFT显示护罩组成。此部分用于从TFT显示屏上显示的菜单进行订购。Arduino Uno是处理所有数据的发射器侧的大脑,RF发射器模块用于将所选数据发送到接收器。RF发送器模块的数据引脚连接到Arduino的数字引脚12,而V CC和GND引脚连接到Arduino的5V和GND引脚。
接收器部分电路
该项目的接收器部分包括一个Arduino Uno,RF接收器,16 * 2 LCD模块和I2C模块。RF接收器用于从发射器部分接收数据,LCD模块用于显示接收到的数据。每当下新订单时,都会使用蜂鸣器发出声音。RF接收器的数据引脚连接到Arduino的数字引脚11,而V CC和GND引脚连接到Arduino的5V和GND引脚。Buzzer的正极引脚连接到Arduino的数字引脚2,负极引脚连接到Arduino的GND引脚。I2C模块的SCL和SDA引脚连接到Arduino的模拟引脚A5和A4,而VCC和GND引脚连接到Arduino的5V和GND引脚。
代码说明
文档末尾提供了此餐厅智能订购系统的RF发送器和接收器端的完整代码。可以从给定的链接下载该项目中使用的所有库。
- RadioHead库
- SPFD5408库
RadioHead库用于RF发送器/接收器模块,而SPFD5408库用于TFT显示。
变送器部分代码:
通过包含所有必需的库来启动代码。 RH_ASK.h 库用于发送器和接收器模块之间的通信。 SPFD5408_Adafruit_GFX.h 是用于TFT显示的Core图形库。
#包括
之后,为 RH_ASK 创建一个名为 “驱动程序” 的 对象 。
RH_ASK驱动程序;
之后,为您的TFT显示器定义最小和最大校准的X和Y轴值。
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905
现在在drawHome函数内部,为您的TFT屏幕绘制一个布局。在这里, tft.fillScreen 用于设置背景颜色。
tft.drawRoundRect函数用于创建填充的Rectangle。 tft.drawRoundRect 函数的语法如下:
tft.drawRoundRect(int16_t x0,int16_t y0,int16_t w,int16_t h,int16_t半径,uint16_t颜色)
哪里:
x0 =矩形起点的X坐标
y0 =矩形起点的Y坐标
w =矩形的宽度
h =矩形的高度
radius =圆角半径
color =矩形的颜色。
tft.fillRoundRect 函数用于绘制填充的Rectangle。 tft.fillRoundRect 函数的语法如下:
tft.fillRoundRect(int16_t x0,int16_t y0,int16_t w,int16_t h,int16_t半径,uint16_t颜色)tft.fillScreen(WHITE); tft.drawRoundRect(0,0,319,240,8,白色); //页面边框tft.fillRoundRect(30,40,100,40,8,GOLD); tft.drawRoundRect(30,40,100,40,8,白色); // Dish1 tft.fillRoundRect(30,90,100,40,8,GOLD); tft.drawRoundRect(30,90,100,40,8,白色); // Dish2 tft.fillRoundRect(30,140,100,40,8,GOLD); // Dish3 tft.drawRoundRect(30,140,100,40,8,WHITE);
在TFT屏幕上创建按钮之后,现在在按钮上显示文本。 tft.setCursor 用于设置要从其开始文本的光标。
tft.setCursor(60,0); tft.setTextSize(3); tft.setTextColor(LIME); tft.print(“ Menu”); tft.setTextSize(2); tft.setTextColor(WHITE); tft.setCursor(37,47); tft.print(“ Dish1”);
在 void传输 功能内部,每1秒钟将数据发送到接收器一侧。
无效的send(){driver.send((uint8_t *)msg,strlen(msg)); driver.waitPacketSent(); 延迟(1000); }
在 void循环 函数内部,使用ts.getPoint函数读取原始ADC值。
TSPoint p = ts.getPoint();
现在,使用 map 函数将Raw ADC值转换为像素坐标。
px = map(px,TS_MAXX,TS_MINX,0,320); py = map(py,TS_MAXY,TS_MINY,0,240);
将原始ADC值转换为像素坐标后,输入 Dish1 按钮的像素坐标,如果有人触摸此区域之间的屏幕,则将消息发送到接收方。
如果(px> 180 && px <280 && py> 190 && py <230 && pz> MINPRESSURE && pz <MAXPRESSURE){Serial.println(“ Dish1”); msg =“ Dish1”; 发送(); tft.fillRoundRect(30,40,100,40,8,白色); 延迟(70); tft.fillRoundRect(30,40,100,40,8,GOLD); tft.drawRoundRect(30,40,100,40,8,白色); tft.setCursor(37,47); tft.println(“ Dish1”); 延迟(70); }
对于所有其他按钮,请遵循相同的步骤。
接收方代码
对于RF接收器部分代码,包括RF接收器和LCD模块的库。还包括 SPI.h 库,用于在Arduino和RF接收器之间建立SPI通信。
#包括
在 void循环 功能内,连续检查传输的消息。如果接收器模块收到消息,则在LCD模块上显示该消息并发出蜂鸣声。
if(driver.recv(buf,&buflen))//非阻塞{int i; digitalWrite(蜂鸣器,高); 延迟(1000); digitalWrite(buzzer,LOW);。lcd.print(“ T1:”); lcd.print((char *)buf);
使用Arduino测试智能餐厅项目
连接了所有硬件并上传了发送器和接收器部分的代码之后,现在该测试项目了。要测试项目,请按TFT显示屏上的一个按钮,它应该在连接到接收器侧的LCD模块上显示碟号,其表号为T1。如果接收器侧LCD没有显示任何内容,请检查您的TFT屏幕是否正常工作。
这是您可以使用Arduino和TFT显示屏构建“智能餐厅菜单点餐系统”项目的方法。您还可以更改屏幕方向以添加更多按钮。
一个有完整的代码工作的视频下面给出。