如今,自动化系统无处不在,不管是在家庭、办公室还是某些大型行业中,都配备了自动化系统。饭店/旅馆也采用了最新的自动化趋势,通过机器人来运输食品,以及使用平板电脑下订单。通过使用平板电脑这种数字式菜单,客户可以轻松地选择食品。此信息将发送到餐厅的厨房,并在显示屏上显示。
在本篇文章中,我们将使用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 <RH_ASK.h>
- #include <SPI.h>
- #include <SPFD5408_Adafruit_GFX.h>
- #include <SPFD5408_Adafruit_TFTLCD.h>
- #include <SPFD5408_TouchScreen.h>
复制代码之后,为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 <RH_ASK.h>
- #include <SPI.h> // Not actualy used but needed to compile
- #include <LiquidCrystal_I2C.h>
复制代码
在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显示屏制作智能餐厅菜单点餐系统的方法。您还可以更改屏幕的方向来添加更多按钮。
代码 以下是本文使用的完整代码:
main.rar
(2.16 KB, 下载次数: 22)
|