如今,自动化系统无处不在,不管是在家庭、办公室还是某些大型行业中,都配备了自动化系统。饭店/旅馆也采用了最新的自动化趋势,通过机器人来运输食品,以及使用平板电脑下订单。通过使用平板电脑这种数字式菜单,客户可以轻松地选择食品。此信息将发送到餐厅的厨房,并在显示屏上显示。
在本篇文章中,我们将使用Arduino开发板、TFT显示屏和433MHz RF发射器/接收器模块制作一个智能餐厅点餐系统。本文中,发射器部分将由Arduino Uno、TFT显示屏和RF发射器组成,客户可以使用它们选择食物并下订单。接收器部分由Arduino Uno、LCD模块、RF接收器和蜂鸣器组成,将安装在餐厅厨房中以跟踪订单食品。
所需的组件
● Arduino Uno开发板
● 433MHz射频发射器和接收器
● 2.4英寸TFT液晶触摸屏
● 1602 LCD模块
● I2C模块
TFT LCD触摸屏与Arduino的连接
2.4英寸TFT LCD触摸屏是与Arduino UNO / Mega兼容的彩色TFT显示屏,还带有触摸板和SD卡插槽。此TFT显示模块具有明亮的背光和彩色240X320像素的显示屏。它还包括单个RGB像素控制,使其分辨率比黑白显示器好得多。
TFT显示与Arduino的连接非常简单,您只需要将TFT显示器安装在Arduino Uno板上即可,如下图所示。
电路连接图
智能餐厅菜单点餐系统包括“ RF发射器和接收器”部分。发送器和接收器端均使用Arduino Uno进行数据处理。下面给出了发射器和接收器部分的电路图。
发射器部分的电路连接
该项目的发射器部分由Arduino Uno、RF发射器和TFT显示屏模块组成。此部分用于从TFT显示屏上显示的菜单进行订购。Arduino Uno是处理所有数据的发射器侧的主控,RF发射器模块用于将所选数据发送到接收器。射频发射器模块的数据引脚连接到Arduino的数字引脚12,而VCC和GND引脚分布连接到Arduino的5V和GND引脚。
接收器部分的电路连接
该项目的接收器部分包括一个Arduino Uno、RF接收器、1602 LCD模块和I2C模块。RF接收器用于从发射器部分接收数据,LCD模块用于显示接收到的数据。每当下新订单时,都会使用蜂鸣器发出声音。RF接收器的数据引脚连接到Arduino的数字引脚11,而VCC和GND引脚分别连接到Arduino的5V和GND引脚。蜂鸣器的正极引脚连接到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图形库。
#include #include #include #include #include
之后,为RH_ASK创建一个名为“driver”的示例。
RH_ASK driver;
之后,为您的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函数用于创建一个填充的矩形。tft.drawRoundRect函数的语法如下:
tft.drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color)
在这里:
x0 =矩形起点的X坐标
y0 =矩形起点的Y坐标
w =矩形的宽度
h =矩形的高度
radius =圆角半径
color =矩形的颜色。
tft.fillRoundRect函数用于绘制填充的矩形。tft.fillRoundRect函数的语法如下:
tft.fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color)tft.fillScreen(WHITE);tft.drawRoundRect(0, 0, 319, 240, 8, WHITE); //Page border tft.fillRoundRect(30, 40, 100, 40, 8, GOLD); tft.drawRoundRect(30, 40, 100, 40, 8, WHITE); //Dish1 tft.fillRoundRect(30, 90, 100, 40, 8, GOLD); tft.drawRoundRect(30, 90, 100, 40, 8, WHITE); //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 transmit函数内部,每1秒将数据发送到接收器一侧。
void transmit(){ driver.send((uint8_t *)msg, strlen(msg)); driver.waitPacketSent(); delay(1000); }
在void loop函数内部,使用ts.getPoint函数读取原始ADC值。
TSPoint p = ts.getPoint();
现在,使用map函数将Raw ADC值转换为像素坐标。
p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);
将原始ADC值转换为像素坐标后,输入Dish1按钮的像素坐标,如果有人触摸此区域之间的屏幕,则将消息发送到接收器。
if (p.x > 180 && p.x < 280 && p.y > 190 && p.y < 230 && p.z > MINPRESSURE && p.z < MAXPRESSURE) { Serial.println("Dish1"); msg = "Dish1"; transmit(); tft.fillRoundRect(30, 40, 100, 40, 8, WHITE); delay(70); tft.fillRoundRect(30, 40, 100, 40, 8, GOLD); tft.drawRoundRect(30, 40, 100, 40, 8, WHITE); tft.setCursor(37, 47); tft.println(" Dish1"); delay(70); }
对于所有其他按钮,使用相同的步骤。
接收器的代码
对于RF接收器部分代码,首先包含RF接收器和LCD模块的库。还包括SPI.h库,用于在Arduino和RF接收器之间建立SPI通信。
#include #include // Not actualy used but needed to compile#include
在void loop函数内,连续检查传输的消息。如果接收器模块收到消息,则在LCD模块上显示该消息并发出蜂鸣声。
if (driver.recv(buf, &buflen)) // Non-blocking { int i; digitalWrite(buzzer, HIGH); delay(1000); digitalWrite(buzzer, LOW);. lcd.print("T1:"); lcd.print((char*)buf);
测试Arduino智能餐厅菜单系统
连接完所有硬件以及上传了发送器和接收器部分的代码后,现在该测试项目了。要测试项目,请按TFT显示屏上的一个按钮,这样接收器侧的LCD模块上显示菜名和桌号,桌号为T1。如果接收器侧LCD没有显示任何内容,请检查您的TFT屏幕是否正常工作。
以上就是使用Arduino和TFT显示屏制作智能餐厅菜单点餐系统的方法。您还可以更改屏幕的方向来添加更多按钮。
欢迎打赏+点赞+留言+转发!
更多内容请点击“” 》》