Başa dön
Arduino ile Akıllı Menü Yapımı - Restoran Sipariş Sistemi

Arduino ile Akıllı Menü Yapımı – Restoran Sipariş Sistemi

Arduino Kullanarak Akıllı Restoran Sipariş Sistemi Menü Yapımı; lcd ekran ile günümüzün otomasyon sistemleri, ev, ofis veya herhangi bir büyük endüstri olsun, her yerde otomasyon sistemleri ile donatılmıştır. Artık restoranlar / Oteller de son otomasyon trendlerini benimsiyor ve sipariş almak için tablet, yemek dağıtmak için robotlar kullanıyor. Akıllı menü sistemleri ile müşteriler tabletler aracılığı ile dijital menülerden dilediğini seçerek kolayca sipariş verebilirler. Akıllı menü ile oluşturulan sipariş bilgisi restoran mutfağına gönderilir ve mutfak ekranında gösterilerek siparişin hızlıca hazırlanması sağlanır.

 

Bu projede Arduino, dokunmatik lcd tft ekran ve 433MHz RF verici/alıcı modülü kullanarak Restoranlar için Akıllı Menü Projesi yapacağız.

Seçilen menüyü ileten bölüm Arduino Uno, Ekran ve bir RF vericiden oluşacaktır. Alıcı bölümü, sipariş öğelerini izlemek için restoran mutfağında kurulacak bir Arduino Uno, LCD modülü, RF alıcı ve bir Buzzer’den oluşur.

Gerekli Malzemeler

 

Arduino ile TFT LCD Dokunmatik Ekran Bağlantısı

2.4″ tft lcd dokunmatik shield, dokunmatik ekran ve SD kart modülünden oluşan Arduino UNO/Mega uyumlu sistemdir. Bu TFT ekran modülü, parlak bir arka ışık ve renkli bir 240×320 piksel ekrana sahiptir. 

TFT ekranını yalnızca aşağıdaki resimde gösterildiği gibi Arduino Uno kartı üzerine monte etmeniz gerekir.

Dokunmatik TFT LCD ekran ile neler yapılır diye merak ediyorsanız, Arduino ile Oyun Yapımı (Flappy Bird) makalemiz taşınabilir uygulamalar geliştirmede size çok yararlı olacaktır.

 

Akıllı Menü Devre Şeması

Akıllı restoran menü sipariş sistemi projesi hem rf verici hem de rf alıcı tarafı veri işleme için Arduino Uno’yu kullanır. Arduino Uno, tüm verileri işleyen verici tarafının beynidir ve RF verici modülü, seçilen verileri alıcıya iletmek için kullanılır. RF verici modülünün veri pimi Arduino’nun dijital pimi 12’ye bağlanırken, VCC ve GND pimleri Arduino’nun 5V ve GND pinine bağlanır.

RF Alıcı Modül Devresi 

Bu projenin alıcı bölümü bir Arduino Uno, RF Alıcı, 16×2 LCD modülü ve I2C modülünden oluşur. Verici bölümünden veri almak için RF alıcısı kullanılır ve alınan verileri görüntülemek için LCD ekran kullanılır. Yeni bir sipariş verildiğinde ses çıkarmak için bir buzzer kullanılır. RF alıcının veri pimi Arduino’nun dijital pim 11’ine bağlanırken, VCC ve GND pimi Arduino’nun 5V ve GND pimine bağlanır. Buzzer’ın pozitif pimi Arduino’nun dijital pimi 2’ye, negatif pimi Arduino’nun GND pimine bağlanır. I2C modülünün SCL ve SDA pinleri A5 ve A4 Arduino analog pinlerine, VCC ve GND pinleri Arduino’nun 5V ve GND pinlerine bağlanır.

Restoranda bu Akıllı Sipariş Sistemi için RF Verici ve Alıcı tarafları için tam kod yazının sonunda verilmiştir. Bu projede kullanılan tüm kütüphaneler verilen linklerden indirilebilir.

Radiohead kütüphanesi, radyo alıcısı / vericisi modülü için, SPFD5408 kütüphanesi TFT ekran için kullanılır.

Verici Bölüm Kodu: 

Gerekli tüm kitaplıkları ekleyerek kodu başlatın. RH_ASK.h kütüphanesi, verici ve alıcı modülleri arasındaki iletişim için kullanılır. SPFD5408_Adafruit_GFX.h , TFT ekran için bir Çekirdek grafik kütüphanesidir.

#include <RH_ASK.h>
#include <SPI.h>
#include <SPFD5408_Adafruit_GFX.h>   
#include <SPFD5408_Adafruit_TFTLCD.h>
#include <SPFD5408_TouchScreen.h>

Burada, RH_ASK için ‘sürücü’ adlı bir nesne oluşturun.

RH_ASK driver;


Bu aşamada, TFT ekranınız için minimum ve maksimum kalibre edilmiş X & Y ekseni değerlerini tanımlayın.

#define TS_MINX 125
#define TS_MINY 85
#define TS_MAXX 965
#define TS_MAXY 905

Şimdi drawHome işlevinin içinde TFT ekranınız için tft.fillScreen arka plan rengini ayarlayan kodu ekleyin.

Dikdörtgen oluşturmak için tft.drawRoundRect işlevi kullanılır. Tft.drawRoundRect işlevi için kod dizimi aşağıda verilmiştir:

#define TS_MINX 125
#define TS_MINY 85
#define TS_MAXX 965
#define TS_MAXY 905

Nerede:

 x0 = Dikdörtgenin başlangıç ​​noktasının X koordinatı

y0 = Dikdörtgenin başlangıç ​​noktasının Y koordinatı

w = Dikdörtgenin genişliği

h = Dikdörtgenin yüksekliği

radius = Yuvarlak köşenin yarıçapı

color = Rect’in rengi.

tft.fillRoundRect işlevi, doldurulmuş bir Dikdörtgen çizmek için kullanılır. Tft.fillRoundRect işlevinin kod dizimi aşağıda verilmiştir:

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 ekranında düğmeleri oluşturduktan sonra, metni düğmelerde görüntüleyin. tft.setCursor, imleci metni başlatmak istediğiniz yerden ayarlamak için kullanılır.

  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");

Boş iletim işlevinin içinde, verileri her 1 saniyede bir alıcı tarafına gönderin.

void transmit()
{ 
  driver.send((uint8_t *)msg, strlen(msg));
  driver.waitPacketSent();
  delay(1000);
  }

İçinde () fonksiyonu ile, ts.getPoint işlevini kullanarak ham ADC değerini okuyun.

TSPoint p = ts.getPoint();


Şimdi ham ADC değerlerini piksel Koordinatlara dönüştürmek için map işlevini kullanın.

p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);
p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);

Ham ADC değerlerini piksel koordinatına dönüştürdükten sonra, Dish1 düğmesinin piksel koordinatlarını girin ve birisi bu alan arasındaki ekrana dokunursa, mesajı alıcı tarafına gönderin.

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);
        }

Diğer tüm düğmeler için aynı prosedürü uygulayın.

Alıcı Bölüm Kodu 

RF alıcısı bölüm kodu için, RF alıcısı ve LCD modülü için kütüphaneleri ekleyin. Ayrıca Arduino ve RF alıcısı arasında bir SPI iletişimi oluşturmak için SPI.h kütüphanesini de ekleyin.

#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile
#include <LiquidCrystal_I2C.h>

Boş döngü fonksiyonunun içinde iletilen mesajları sürekli kontrol edin. Alıcı modülü bir mesaj alırsa, mesajı LCD modülünde görüntüleyin ve bir bip sesi çıkartın.

    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 Kullanarak Akıllı Restoran Menü Projesini Test Etme

Tüm donanımı bağladıktan ve hem verici hem de alıcı bölümü için kodu yükledikten sonra, şimdi projeyi test etme zamanı. Projeyi test etmek için TFT ekranında bir düğmeye basın, alıcı tarafına bağlı LCD modülünde T1 olan tablo numarası ile menü adını görüntülemelidir. Alıcı tarafı LCD’de hiçbir şey görüntülenmiyorsa, TFT ekranınızın çalışıp çalışmadığını kontrol edin.

Arduino ve TFT ekranını kullanarak Akıllı Restoran Menü Sipariş Sistemi projesini bu şekilde oluşturabilirsiniz. Daha fazla düğme eklemek için ekranın yönünü de değiştirebilirsiniz.

Çalışma Videosu aşağıda verilmiştir.

 
Code for Transmitter (TFT LCD)

#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
#include <SPFD5408_Adafruit_GFX.h>    // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPFD5408_TouchScreen.h>
const char *msg ;
RH_ASK driver;
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin
#define TS_MINX 125
#define TS_MINY 85
#define TS_MAXX 965
#define TS_MAXY 905
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0