- ส่วนประกอบที่จำเป็น
- การเชื่อมต่อ TFT LCD Touch shield กับ Arduino
- แผนภูมิวงจรรวม
- คำอธิบายรหัส
- การทดสอบโครงการร้านอาหารอัจฉริยะโดยใช้ Arduino
ปัจจุบันระบบอัตโนมัติในปัจจุบันมีอยู่ทั่วไปไม่ว่าจะเป็นบ้านสำนักงานหรืออุตสาหกรรมขนาดใหญ่ต่างก็ติดตั้งระบบอัตโนมัติ ร้านอาหาร / โรงแรมกำลังปรับใช้เทรนด์ระบบอัตโนมัติล่าสุดและกำลังติดตั้งหุ่นยนต์เพื่อส่งอาหารและแท็บเล็ตสำหรับรับคำสั่งซื้อ ด้วยการใช้การ์ดเมนูดิจิทัลเช่นแท็บเล็ตลูกค้าสามารถเลือกรายการได้อย่างง่ายดาย ข้อมูลนี้จะถูกส่งไปยังห้องครัวของร้านอาหารและแสดงบนจอแสดงผลด้วย
ในโครงการนี้เรากำลังสร้างโครงการร้านอาหารอัจฉริยะโดยใช้ Arduino, จอแสดงผล TFT และโมดูลตัวส่ง / ตัวรับ RF 433MHz ในส่วนของเครื่องส่งจะประกอบด้วย Arduino Uno, จอแสดงผล TFT และเครื่องส่ง RF ซึ่งลูกค้าสามารถเลือกรายการอาหารและสั่งอาหารได้ ในขณะที่ส่วนเครื่องรับประกอบด้วย Arduino Uno, โมดูล LCD, ตัวรับ RF และ Buzzer ซึ่งจะติดตั้งในห้องครัวร้านอาหารเพื่อติดตามรายการสั่งซื้อ
ส่วนประกอบที่จำเป็น
- Arduino Uno (2)
- เครื่องส่งและตัวรับ RF 433MHz
- 2.4 "TFT LCD Touch shield
- โมดูล LCD 16 * 2
- โมดูลI 2 C
การเชื่อมต่อ TFT LCD Touch shield กับ Arduino
2.4 "TFT LCD Touch shield เป็นจอแสดงผล TFT ที่รองรับ Arduino UNO / Mega หลากสีที่มาพร้อมกับหน้าจอสัมผัสและซ็อกเก็ตการ์ด SD เช่นกันโมดูลจอแสดงผล TFT นี้มีแสงพื้นหลังที่สว่างและจอแสดงผล 240X320 พิกเซลที่มีสีสันนอกจากนี้ยังประกอบด้วย RGB แต่ละรายการ การควบคุมพิกเซลที่ให้ความละเอียดดีกว่าจอแสดงผลขาวดำ
การเชื่อมต่อจอแสดงผล TFT กับ Arduino นั้นง่ายมากและอธิบายไว้ในบทช่วยสอนก่อนหน้านี้ คุณจะต้องติดตั้งจอแสดงผล TFT บนบอร์ด Arduino Uno ดังที่แสดงในภาพด้านล่าง
TFT LCD มีประโยชน์มากในการสร้างแอพพลิเคชั่นพกพาเช่น:
- เครื่องคำนวณหน้าจอสัมผัส Arduino
- ล็อครหัสดิจิทัลที่ควบคุมด้วยสมาร์ทโฟนโดยใช้ Arduino
- นาฬิกาปลุก Arduino SMART
- NeoPixel LED Strip พร้อม Arduino และ TFT LCD
ตรวจสอบโครงการที่ใช้ TFT LCD ทั้งหมดได้ที่นี่
แผนภูมิวงจรรวม
โครงการระบบสั่งซื้อเมนูร้านอาหารอัจฉริยะประกอบด้วยส่วนเครื่องส่งและตัวรับสัญญาณ RF ทั้งฝั่งเครื่องส่งและตัวรับใช้ Arduino Uno ในการประมวลผลข้อมูล ก่อนหน้านี้เราใช้โมดูล RF 433 MHz เดียวกันกับ Arduino ในการสร้างโปรเจ็กต์เช่นกริ่งไร้สายหุ่นยนต์ควบคุมด้วยท่าทางด้วยมือเป็นต้นแผนภาพวงจรสำหรับส่วนเครื่องส่งและตัวรับแสดงไว้ด้านล่าง
วงจรส่วนเครื่องส่งสัญญาณ
ส่วนเครื่องส่งสัญญาณของโครงการนี้ประกอบด้วย Arduino Uno, RF Transmitter และแผงป้องกันจอแสดงผล TFT ส่วนนี้ใช้สำหรับการสั่งซื้อจากเมนูที่แสดงบนจอแสดงผล TFT Arduino Uno เป็นสมองของเครื่องส่งสัญญาณที่ประมวลผลข้อมูลทั้งหมดและโมดูลเครื่องส่งสัญญาณ RF จะใช้ในการส่งข้อมูลที่เลือกไปยังเครื่องรับ พินข้อมูลของโมดูลตัวส่งสัญญาณ RF เชื่อมต่อกับพินดิจิทัล 12 ของ Arduino ในขณะที่หมุดV CCและ GND เชื่อมต่อกับ 5V และพิน GND ของ Arduino
วงจรส่วนรับ
ส่วนรับของโครงการนี้ประกอบด้วย Arduino Uno, RF Receiver, โมดูล LCD 16 * 2 และโมดูล I2C ตัวรับสัญญาณ RF ใช้เพื่อรับข้อมูลจากส่วนเครื่องส่งสัญญาณและโมดูล LCD ใช้เพื่อแสดงข้อมูลที่ได้รับ กริ่งใช้เพื่อส่งเสียงเมื่อมีการสั่งซื้อใหม่ พินข้อมูลของตัวรับ RF เชื่อมต่อกับพินดิจิทัล 11 ของ Arduino ในขณะที่ V CCและพิน GND เชื่อมต่อกับขา 5V และ GND ของ Arduino พินบวกของ Buzzer เชื่อมต่อกับพินดิจิทัล 2 ของ Arduino และพินลบเชื่อมต่อกับพิน GND ของ Arduino พิน SCL และ SDA ของโมดูล I2C เชื่อมต่อกับพินอะนาล็อก A5 และ A4 Arduino ในขณะที่พิน VCC และ GND เชื่อมต่อกับหมุด 5V และ GND ของ Arduino
คำอธิบายรหัส
รหัสที่สมบูรณ์สำหรับด้านเครื่องส่งสัญญาณและตัวรับสัญญาณ RF สำหรับระบบสั่งซื้ออัจฉริยะนี้ในร้านอาหารมีให้ในตอนท้ายของเอกสาร สามารถดาวน์โหลดไลบรารีทั้งหมดที่ใช้ในโปรเจ็กต์นี้ได้จากลิงค์ที่ให้มา
- ห้องสมุด RadioHead
- ห้องสมุด SPFD5408
ไลบรารี RadioHeadใช้สำหรับโมดูลตัวส่ง / ตัวรับ RF ในขณะที่ไลบรารี SPFD5408ใช้สำหรับจอแสดงผล TFT
รหัสมาตราเครื่องส่ง:
เริ่มต้นรหัสโดยรวมไลบรารีที่จำเป็นทั้งหมด RH_ASK.h ไลบรารีใช้สำหรับการสื่อสารระหว่างโมดูลตัวส่งและตัวรับ SPFD5408_Adafruit_GFX.h เป็นไลบรารีกราฟิกหลักสำหรับจอแสดงผล TFT
# รวม
หลังจากที่สร้างวัตถุที่เรียกว่า 'คนขับ' สำหรับRH_ASK
ไดรเวอร์ RH_ASK;
หลังจากนั้นกำหนดค่าแกน X และ Y ต่ำสุดและสูงสุดที่ปรับเทียบแล้วสำหรับจอแสดงผล TFT ของคุณ
#define TS_MINX 125 #define TS_MINY 85 #define 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 = ความสูงของสี่เหลี่ยม
รัศมี = รัศมีของมุมกลม
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) 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, ทอง); tft.drawRoundRect (30, 90, 100, 40, 8, ขาว); // Dish2 tft.fillRoundRect (30, 140, 100, 40, 8, ทอง); // Dish3 tft.drawRoundRect (30, 140, 100, 40, 8, ขาว);
หลังจากสร้างปุ่มบนหน้าจอ TFT แล้วให้แสดงข้อความบนปุ่ม tft.setCursor ใช้เพื่อตั้งค่าเคอร์เซอร์จากตำแหน่งที่คุณต้องการเริ่มข้อความ
tft.setCursor (60, 0); tft.setTextSize (3); tft.setTextColor (LIME); tft.print ("เมนู"); tft.setTextSize (2); tft.setTextColor (สีขาว); tft.setCursor (37, 47); tft.print ("Dish1");
ภายในฟังก์ชั่นการ ส่งโมฆะ ส่งข้อมูลไปยังฝั่งผู้รับทุกๆ 1 วินาที
โมฆะส่ง () {driver.send ((uint8_t *) msg, strlen (msg)); driver.waitPacketSent (); ล่าช้า (1,000); }
ภายในฟังก์ชัน void loop ให้อ่านค่า Raw ADC โดยใช้ฟังก์ชัน ts.getPoint
TSPoint p = ts.getPoint ();
ตอนนี้ใช้ฟังก์ชัน แผนที่ เพื่อแปลงค่า Raw ADC เป็น Pixel Co-ordinates
px = แผนที่ (px, TS_MAXX, TS_MINX, 0, 320); py = แผนที่ (py, TS_MAXY, TS_MINY, 0, 240);
หลังจากแปลงค่า Raw 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, ทอง); tft.drawRoundRect (30, 40, 100, 40, 8, ขาว); tft.setCursor (37, 47); tft.println ("Dish1"); ล่าช้า (70); }
ทำตามขั้นตอนเดียวกันสำหรับปุ่มอื่น ๆ ทั้งหมด
รหัสมาตราผู้รับ
สำหรับรหัสส่วนตัวรับ RF ให้รวมไลบรารีสำหรับตัวรับ RF และโมดูล LCD รวมไลบรารี SPI.h สำหรับสร้างการสื่อสาร SPI ระหว่าง Arduino และตัวรับ RF
# รวม
ภายในฟังก์ชัน void loop ให้ตรวจสอบข้อความที่ส่งอย่างต่อเนื่อง และหากโมดูลตัวรับได้รับข้อความให้แสดงข้อความบนโมดูล LCD และส่งเสียงบี๊บ
ถ้า (driver.recv (buf & buflen)) // ไม่บล็อก {int i; digitalWrite (กริ่งสูง); ล่าช้า (1,000); digitalWrite (ออด, LOW);. lcd.print ("T1:"); lcd.print ((ถ่าน *) buf);
การทดสอบโครงการร้านอาหารอัจฉริยะโดยใช้ Arduino
หลังจากเชื่อมต่อฮาร์ดแวร์ทั้งหมดและอัปโหลดรหัสสำหรับทั้งส่วนเครื่องส่งและตัวรับแล้วก็ถึงเวลาทดสอบโครงการ ในการทดสอบโครงการให้กดปุ่มบนจอแสดงผล TFT ควรแสดงชื่อจานพร้อมหมายเลขตารางซึ่งเป็น T1 บนโมดูล LCD ที่เชื่อมต่อกับด้านเครื่องรับ หากจอ LCD ด้านเครื่องรับไม่แสดงสิ่งใดให้ตรวจสอบว่าหน้าจอ TFT ของคุณใช้งานได้หรือไม่
นี่คือวิธีที่คุณสามารถสร้างโครงการระบบสั่งเมนูร้านอาหารอัจฉริยะโดยใช้ Arduino และจอแสดงผล TFT คุณยังสามารถเปลี่ยนทิศทางของหน้าจอเพื่อเพิ่มปุ่มอื่น ๆ
วิดีโอการทำงานร่วมกับรหัสที่สมบูรณ์ได้รับด้านล่าง