DIY เครื่องทำค๊อกเทลพร้อมระบบจ่ายเงินด้วย QR Code

สวัสดีครับ ตอนนี้ผมกำลังเรียน Software Engineer ภาค Inter อยู่ที่มหาลัยที่ร้อนที่สุดย่านลาดกระบัง ทีนี้เนื่องจากว่าผมเลือกลงเรียนฝั่ง Mobile เลยมีวิชา Microprocessor และวิชา Embedded Systems ที่ผมต้องทำ Project ที่เป็น Hardware

มาดูวิดีโอกันก่อนดีกว่า

เวอร์ชั่นแรก

คือว่าวิชา Microprocessor ที่ผมเรียนต้องใช้ MCU เป็น ARM Cortex-M3 กับบอร์ด LPCXPresso LPC1769 งงสิครับ ปรกติใช้แต่ Arduino พอเจอบอร์ดนี้คู่กับ IDE ที่ไม่คุ้นตา เลยเลือกทำเครื่องทำค๊อกเทลแล้วกัน ผมกับเพื่อนผม@warakornjet เลยคิดว่าทำอันนี้ละกัน ไม่ยากไม่ง่ายเกินไป

requirements คร่าวๆ

  • มีเมนูให้เลือกเครื่องดื่มได้หลากหลาย
  • สามารถกำหนดปริมาตรของเครื่องดื่มที่ต้องการได้
  • แต่ละสูตรมีการกำหนดส่วนผสมด้วยอัตราส่วนได้

ต่อไปก็เริ่มออกแบบตัวเครื่อง หลังจากที่เคยได้ลองออกแบบด้วย CAD ในโปรเจ็คก่อนๆ แล้วพบว่าทำให้ข้อผิดพลาดด้าน Design ลดลงมาก ผมเลยเลือกออกแบบในคอมด้วย Fusion 360 เหมือนเดิม

2019-04-11 11_14_19-body Drawing v2.pdf - [Sheet1] - SumatraPDF.png

ส่วนประกอบของเครื่องได้แก่

  • บอดี้ทำจากอะครีลิคหนา 2 มม.  ตัดด้วยเครื่อง Laser CNC
  • ปั๊ม Diaphragm 12 โวลต์ (จริงๆ ควรจะใช้ปั๊มแบบ Peristaltic แต่ว่ามันแพงไปหน่อยสำหรับโปรเจ็คส่งอาจารย์)
  • โมดูลขับมอเตอร์ L298N
  • LPCXPresso LPC 1769 MCU (อาจารย์บังคับ TT)
  • หน้าจอ TFT ILI9341
  • ปุ่ม Push button
  • Adapter 12v และ 3.3v regulator สำหรับจ่ายให้ MCU

รายละเอียดโปรแกรมและอื่นๆ ผมขอให้ไปดูที่ Documents ของโปรเจ็คนะครับ(ให้เขียนหมดน่าจะยาวเกินไป) แต่ผมขอพูดถึงหลักการคร่าวๆ ในการควบคุมปั๊มให้จ่ายของเหลวตามปริมาตรที่เราต้องการ โดยเวลาเป็นตัวกำหนด แต่ก่อนอื่นเราต้องรู้อัตราการไหลของน้ำที่ปั๊มสามารถทำงานได้(หน่วยเป็นมิลลิลิตรต่อวินาที) แล้วเราจะสามารถคำนวนเวลา(เป็นวินาที)ที่ปั๊มต้องทำงานได้ง่ายๆ

เวลาที่ปั๊มต้องทำงาน[milliseconds] = (ปริมาตรที่ต้องการ[ml.] / อัตราการไหล[ml./s]) * 1000

ผมจะไม่ใช้วิธีการ delay(ms) แบบธรรมดา ในการรอให้ปั๊มทำงาน เนื่องจากจะไป Block การทำงานของ MCU ทำให้เราไม่สามารถทำอย่างอื่นได้ เช่นการอัปเดทหน้าจอแสดงผลว่าได้จ่ายเครื่องดื่มมากี่เปอร์เซ็นต์แล้ว ดังนั้งจึงต้องใช้วิธีการจับเวลาแทน

วิธีการก็คือเรียกใช้ฟังก์ชัน millis() ซึ่งจะรีเทิร์นเวลาตั้งแต่เปิด mcu ขึ้นมา(หน่วยเป็น milliseconds) อยากให้ปั๊มหยุดทำงานเมื่อไหร่ก็ไปคำนวณมาว่าต้องใช้กี่ milliseconds แล้วเอาไปบวกกับค่าที่ได้จาก millis() (ขอตั้งชื่อตัวแปรนี้ว่า dispStopTime1) แล้วก็เขียน logic เช็คใน main loop ว่าค่าจาก millis() นั้นเกินค่าของ dispStopTime1 รึยัง ถ้ายังก็ให้ปั๊มทำงาน แต่ถ้าเกินแล้วก็ให้หยุดการทำงานของปั๊ม

ใครอยากไปดูโค้ดยาวๆ จิ้มที่นี่ได้เลย

photo6147568767769618514
Version 1

เวอร์ชั่นสอง

เวอร์ชั่นสอง สิ่งที่เปลี่ยนแปลงหลักๆ คือเปลี่ยน MCU เป็น ESP32 เอาปุ่มและจอ TFT ออก แล้วใช้โทรศัพท์ Android เป็นตัวสั่งการแทน และการสแกนจ่ายเงินด้วย QR Code พร้อมเพย์ที่เป็นมาตราฐานของประเทศไทย

โทรศัพท์สามารถเสียบลงไปในช่องด้านบนได้เลย ทำให้ตอนนี้เครื่องเป็นระบบ Android จอสัมผัส ลื่นปรื้ดด ตอบสนองและใช้งานง่ายสุดๆ ตัวโทรศัพท์ Android นั้นทำหน้าที่ทุกอย่างตั้งแต่เป็น GUI ให้ผู้ใช้, ดึงข้อมูลสูตรเครื่องดื่มและรูปมาจาก Server, ติดต่อกับ Backend ระบบจ่ายเงิน และคำนวณปริมาตรที่แต่ละปั๊มต้องจ่ายออกมา เมื่อระบบยืนยันการจ่ายเงินแล้ว ตัวโทรศัพท์ Android จะส่งข้อมูลไปให้ ESP32 ว่าให้แต่ละปั๊มจ่ายออกมากี่มิลลิลิตร แล้วตัว ESP32 ก็จะทำงานควบคุมปั๊มให้ตามนั้น

การต่อวงจรของเวอร์ชั่นนี้ค่อนข้างเรียบง่าย แต่เอาปั๊มออกตัวนึงเพราะทดลองแค่ 3 ตัวก็พอ

bvm_schematic

ส่วนระบบการจ่ายเงินด้วย QR Code นั้นต้องไปใช้บริการจาก Payment Gateway ที่ชื่อว่า GB PrimePay ซึ่งรองรับการสร้าง QR Code แบบ Dynamic ด้วย API

ซึ่ง Process การชำระเงินที่ผมทำจะเป็นดังนี้

  1. Android ไป Generate transaction ID จาก Firebase API ที่ผมสร้างขึ้นจาก Firebase Functions
  2. Android ส่ง transaction ID, จำนวนเงินที่ต้องจ่าย และรายละเอียดต่างๆ ไปที่ API ของ GB PrimePay และทาง API จะ Return ข้อมูลสำหรับสร้าง QR Code กลับมา
  3. สร้าง QR Code ให้ลูกค้าชำระ
  4. หากการชำระเสร็จสิ้นสำเร็จ GB Primepay จะยิง Webhook มาที่ Firebase Functions ของผม
  5. Firebase บันทึกข้อมูลลง Realtime Database
  6. Android ได้รับการเปลี่ยนแปลงข้อมูลใน Realtime Database ว่าการชำระเงินสมบูรณ์ จึงทำการเปลี่ยนหน้าไปขั้นตอนต่อไป
bvm_pay_sequence
Sequence diagram of payment process

Tech Stack ที่ใช้ทั้งหมดก็จะประมาณนี้

bvm_tech_stack

และแน่นอนครับ โค้ดและเอกสารทั้งหมด แบบเต็มๆ สามารถดูได้จาก Github นี้

vlcsnap-2019-04-12-19h39m42s060
Version 2

 

หวังว่าบล๊อคนี้จะช่วยเป็นไอเดียในการนำ Microcontroller มาประยุกต์ใช้ในชีวิตประจำวันได้

สำหรับบล๊อกนี้ สวัสดีครับ

โฆษณา

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

Create a website or blog at WordPress.com

Up ↑

%d bloggers like this: