오늘날의 자동화 시스템은 가정, 사무실 또는 대형 산업에 관계없이 모든 곳에서 자동화 시스템을 갖추고 있습니다. 레스토랑 / 호텔도 최근 자동화 트렌드를 채택하고 주문을 받기 위해 음식과 태블릿을 배달하는 로봇을 설치하고 있습니다. 태블릿과 같은 디지털 메뉴 카드를 사용하면 고객이 항목을 쉽게 선택할 수 있습니다. 이 정보는 레스토랑의 주방으로 전송되고 디스플레이에도 표시됩니다.
이 프로젝트에서는 아두 이노, TFT 디스플레이, 433MHz RF 송수신 모듈을 사용하여 스마트 레스토랑 프로젝트를 구축하고 있습니다. 여기에서 송신기 섹션은 Arduino Uno, TFT 디스플레이 및 RF 송신기로 구성되어 고객이 식품을 선택하고 주문할 수 있습니다. 수신기 섹션은 Arduino Uno, LCD 모듈, RF 수신기 및 주문 항목을 추적하기 위해 레스토랑 주방에 설치되는 Buzzer로 구성됩니다.
필요한 구성 요소
- 아두 이노 우노 (2)
- 433MHz RF 송신기 및 수신기
- 2.4 "TFT LCD 터치 실드
- 16 * 2 LCD 모듈
- I 2 C 모듈
Arduino와 TFT LCD 터치 실드 인터페이스
2.4 인치 TFT LCD 터치 쉴드는 터치 스크린 및 SD 카드 소켓과 함께 제공되는 다색 Arduino UNO / Mega 호환 TFT 디스플레이입니다.이 TFT 디스플레이 모듈은 밝은 백라이트와 다채로운 240X320 픽셀 디스플레이를 갖추고 있습니다. 또한 개별 RGB로 구성됩니다. 흑백 디스플레이보다 훨씬 더 나은 해상도를 제공하는 픽셀 제어.
Arduino와 TFT 디스플레이를 연결하는 것은 매우 간단하며 이전 튜토리얼에서 설명했습니다. 아래 이미지와 같이 Arduino Uno 보드 위에 TFT 디스플레이 만 장착하면됩니다.
TFT LCD는 다음과 같은 휴대용 애플리케이션을 구축하는 데 매우 유용합니다.
- Arduino 터치 스크린 계산기
- Arduino를 사용한 스마트 폰 제어 디지털 코드 잠금
- Arduino SMART 알람 시계
- Arduino 및 TFT LCD가있는 NeoPixel LED 스트립
또한 여기에서 모든 TFT LCD 기반 프로젝트를 확인하십시오.
회로도
Smart Restaurant Menu Ordering System 프로젝트 는 RF 송신기와 수신기 섹션으로 구성됩니다. 송신기와 수신기 모두 데이터 처리를 위해 Arduino Uno를 사용합니다. 이전에는 무선 초인종, 손 동작 제어 로봇 등과 같은 프로젝트를 구축하기 위해 Arduino와 동일한 433MHz 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 핀은 아날로그 핀 A5 및 A4 Arduino에 연결되고 VCC 및 GND 핀은 Arduino의 5V 및 GND 핀에 연결됩니다.
코드 설명
레스토랑 의이 스마트 주문 시스템에 대한 RF 송신기 및 수신기 측에 대한 완전한 코드 는 문서 끝에 제공됩니다. 이 프로젝트에 사용 된 모든 라이브러리는 주어진 링크에서 다운로드 할 수 있습니다.
- RadioHead 라이브러리
- SPFD5408 라이브러리
RadioHead 라이브러리 는 RF 송신기 / 수신기 모듈에 사용되는 반면 SPFD5408 라이브러리 는 TFT 디스플레이에 사용됩니다.
송신기 섹션 코드:
필요한 모든 라이브러리를 포함하여 코드를 시작합니다. RH_ASK.h 라이브러리는 송신기와 수신기 모듈 간의 통신에 사용됩니다. SPFD5408_Adafruit_GFX.h 는 TFT 디스플레이 용 코어 그래픽 라이브러리입니다.
#포함
그런 다음 RH_ASK에 대한 'driver' 라는 객체 를 만듭니다 .
RH_ASK 드라이버;
그런 다음 TFT 디스플레이에 대해 보정 된 최소 및 최대 X 및 Y 축 값을 정의합니다.
# TS_MINX 정의 125 # TS_MINY 85 정의 # TS_MAXX 965 정의 # 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 = Rect의 색상.
tft.fillRoundRect 함수는 채워진 Rectangle을 그리는 데 사용됩니다. tft.fillRoundRect 함수의구문은 다음과 같습니다.
tft.fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t 반경, uint16_t color) tft.fillScreen (WHITE); tft.drawRoundRect (0, 0, 319, 240, 8, WHITE); // 페이지 테두리 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 ("메뉴"); tft.setTextSize (2); tft.setTextColor (WHITE); tft.setCursor (37, 47); tft.print ("Dish1");
무효 전송 기능 내에서 1 초마다 데이터를 수신자 측으로 보냅니다.
void send () {driver.send ((uint8_t *) msg, strlen (msg)); driver.waitPacketSent (); 지연 (1000); }
void 루프 함수 내에서 ts.getPoint 함수를 사용하여 원시 ADC 값을 읽습니다.
TSPoint p = ts.getPoint ();
이제 맵 기능을 사용하여 원시 ADC 값을 픽셀 좌표로 변환합니다.
px = 맵 (px, TS_MAXX, TS_MINX, 0, 320); py = 맵 (py, TS_MAXY, TS_MINY, 0, 240);
원시 ADC 값을 픽셀 좌표로 변환 한 후 Dish1 버튼 의 픽셀 좌표를 입력하고 누군가이 영역 사이의 화면을 터치하면 수신자 측으로 메시지를 보냅니다.
if (px> 180 && px <280 && py> 190 && py <230 && pz> MINPRESSURE && pz <MAXPRESSURE) {Serial.println ("Dish1"); msg = "Dish1"; 부치다(); tft.fillRoundRect (30, 40, 100, 40, 8, WHITE); 지연 (70); tft.fillRoundRect (30, 40, 100, 40, 8, GOLD); tft.drawRoundRect (30, 40, 100, 40, 8, WHITE); tft.setCursor (37, 47); tft.println ("Dish1"); 지연 (70); }
다른 모든 버튼에 대해 동일한 절차를 따르십시오.
수신자 섹션 코드
RF 수신기 섹션 코드의 경우 RF 수신기 및 LCD 모듈 용 라이브러리를 포함합니다. 또한 Arduino와 RF 수신기 간의 SPI 통신을 설정하기위한 SPI.h 라이브러리를 포함합니다.
#포함
무효 루프 기능 내에서 전송 된 메시지를 지속적으로 확인합니다. 수신기 모듈이 메시지를 수신하면 LCD 모듈에 메시지를 표시하고 신호음을냅니다.
if (driver.recv (buf, & buflen)) // 비 차단 {int i; digitalWrite (부저, HIGH); 지연 (1000); digitalWrite (buzzer, LOW);. lcd.print ("T1:"); lcd.print ((char *) buf);
Arduino를 사용한 스마트 레스토랑 프로젝트 테스트
모든 하드웨어를 연결하고 송신기 및 수신기 섹션에 대한 코드를 업로드 한 후 이제 프로젝트를 테스트 할 차례입니다. 프로젝트를 테스트하려면 TFT 디스플레이의 버튼을 누르면 수신기 측에 연결된 LCD 모듈에 테이블 번호가 T1 인 접시 이름이 표시되어야합니다. 수신기 측 LCD에 아무것도 표시되지 않으면 TFT 화면이 작동하는지 확인하십시오.
이것이 Arduino 및 TFT 디스플레이를 사용하여 스마트 레스토랑 메뉴 주문 시스템 프로젝트를 구축하는 방법입니다. 버튼을 더 추가하기 위해 화면 방향을 변경할 수도 있습니다.
전체 코드 가 포함 된 작업 비디오가 아래에 나와 있습니다.