1. SD Card เสียบ SD Card ขนาด 64 GB ที่ติดตั้งระบบปฏิบัติการ Raspbian เรียบร้อยแล้ว เข้ากับช่องเสียบ SD Card ที่อยู่ด้านล่างของบอร์ด Raspberry Pi
2. สาย Adapter เสียบสาย Adapter เพื่อจ่ายไฟเลี้ยงให้กับบอร์ด Raspberry Pi 3. จอทัชสกรีน 3.1 ต่อสาย Micro HDMI to HDMI เข้ากับพอร์ต HDMI ของบอร์ด Raspberry Pi
3.2 ต่อสายทัชสกรีนจากจอทัชสกรีนเข้ากับพอร์ต USB ของบอร์ด Raspberry Pi
4. กล้องเว็บแคม ต่อสายกล้องเว็บแคมเข้ากับพอร์ต USB ของบอร์ด Raspberry Pi
5. มอเตอร์ 6 ตัว 5.1 นำแกนเฟืองมาติดกับมอเตอร์ทั้ง 6 ตัว ดังรูป
5.2 นำเฟืองยึดติดกับปลายเหล็กสปริงทั้ง 6 ชิ้น ดังรูป
5.3 นำมอเตอร์แต่ละตัวมาติดกับเหล็กสปริง ดังรูป
5.4 เสียบสายแพเส้นสีแดงเข้ากับ PIN 2 (5V) ของบอร์ด Raspberry Pi เชื่อมต่อกับแถว + บน Breadboard
5.5 เสียบสายแพเส้นสีดำเข้ากับ PIN 6 (GND) ของบอร์ด Raspberry Pi เชื่อมต่อกับแถว - บน Breadboard
5.6 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 1 (ขนมฮานามิ)
5.7 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 2 (ขนมสแน็คแจ็ค)
5.8 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 3 (ขนมเลย์)
5.9 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 4 (ขนมปาปริก้า)
5.10 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 5 (ขนมปาร์ตี้)
5.11 เชื่อมต่อบอร์ด Raspberry Pi กับมอเตอร์ตัวที่ 6 (ขนมแจ๊กซ์)
1. เตรียมไฟล์ฐานข้อมูล 1 ไฟล์ (ซึ่งสร้างไว้ในหน่วยการเรียนรู้ที่ 2) ดังรูป
2. เตรียมไฟล์ GUI 3 ไฟล์ (ซึ่งสร้างไว้ในหน่วยการเรียนรู้ที่ 3) ดังรูป
3. คัดลอกไฟล์ haarcascade_frontalface_default.xml และ trainer.yml จากโฟลเดอร์ Face_recognition มาไว้ในโฟลเดอร์ Snack Machine Vending เพื่อใช้ในระบบวิเคราะห์ใบหน้า
การเขียนโค้ดคำสั่งสำหรับเปิดหน้าจอ main.ui (หน้าจอหลัก) 1. เปิดโปรแกรม Thonny Python IDE โดยคลิกสัญลักษณ์![]()
2. เมื่อเปิดโปรแกรม Thonny Python IDE ขึ้นมาแล้วให้คลิกปุ่ม New เพื่อสร้างไฟล์ใหม่
3. เขียนโค้ดคำสั่ง ดังนี้
4. บันทึกไฟล์ชื่อ snack_machine.py และกดปุ่ม Run ผลลัพธ์ที่ได้คือ หน้าต่าง main.ui จะถูกเปิดขึ้นมาแสดง ดังรูป
การเขียนโค้ดคำสั่งในการคลิกปุ่มบนหน้าจอหลัก 1. เขียนโค้ดคำสั่งด้านล่างโค้ด loadUi('main.ui', self) ที่อยู่ใน class MainWindow() ดังนี้
2. คลิกปุ่ม Run แล้วทดลองคลิกทุกปุ่มที่อยู่บนหน้าจอ GUI แล้วสังเกตข้อความในช่อง Shell ว่าแสดงผลถูกต้องหรือไม่ ซึ่งเมื่อกดปุ่มจะต้องแสดงข้อความในช่อง Shell ด้วยคำสั่ง print() ดังรูป
การเขียนโค้ดคำสั่งในฟังก์ชันการเลือกซื้อขนม หลักการทำงาน คือ เมื่อคลิกรูปขนมชนิดใด จะแสดงชื่อและราคาของขนมชนิดนั้นขึ้นมา และหากคลิกปุ่ม “ยกเลิก” จะทำการรีเซ็ตหน้าจอการเลือกขนม โดยมีขั้นตอนดังนี้ 1. กำหนดฟังก์ชันปุ่มขนมฮานามิ selectHanami() 1.1 กำหนดราคาขนมแต่ละชนิด ไว้ด้านบนคลาส MainWindow(QDialog)
1.2 ลบคำสั่ง print() ในฟังก์ชัน selectHanami() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
1.3 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมฮานามิ
จะปรากฏชื่อขนมและราคาขนม ดังรูป
2. กำหนดฟังก์ชันปุ่มขนมสแน็คแจ๊ค selectSnackJack() 2.1 ลบคำสั่ง print() ในฟังก์ชัน selectSnackJack() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
2.2 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมสแน็คแจ๊ค
จะปรากฏชื่อขนมและราคาขนม ดังรูป
3. กำหนดฟังก์ชันปุ่มขนมเลย์ selectLays() 3.1 ลบคำสั่ง print() ในฟังก์ชัน selectLays() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
3.2 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมเลย์
จะปรากฏชื่อขนมและราคาขนม ดังรูป
4. กำหนดฟังก์ชันปุ่มขนมปาปริก้า selectPaprika() 4.1 ลบคำสั่ง print() ในฟังก์ชัน selectPaprika() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
4.2 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมปาปริก้า
จะปรากฏชื่อขนมและราคาขนม ดังรูป
5. กำหนดฟังก์ชันปุ่มขนมปาร์ตี้ selectParty() 5.1 ลบคำสั่ง print() ในฟังก์ชัน selectParty() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
5.2 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมปาร์ตี้
จะปรากฏชื่อขนมและราคาขนม ดังรูป
6. กำหนดฟังก์ชันปุ่มขนมแจ๊กซ์ selectJaxx() 6.1 ลบคำสั่ง print() ในฟังก์ชัน selectJaxx() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
6.2 คลิกปุ่ม Run แล้วทดลองคลิกปุ่มขนมแจ๊กซ์
จะปรากฏชื่อขนมและราคาขนม ดังรูป
7. กำหนดฟังก์ชันปุ่ม “ยกเลิก” selectClear() 7.1 ลบคำสั่ง print() ในฟังก์ชัน selectClear() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
7.2 คลิกปุ่ม Run แล้วทดลองคลิกเลือกขนม จากนั้นคลิกปุ่ม “ยกเลิก”
จะรีเซ็ตชื่อขนมและราคาขนม ดังรูป
การเขียนโค้ดคำสั่งในการเพิ่มข้อมูลลูกค้า หลักการทำงาน คือ เมื่อคลิกปุ่ม “บันทึกข้อมูลลูกค้า” จะเปิดฟอร์มกรอกชื่อและจำนวนเงินที่ต้องการเติมเพื่อบันทึกเข้าฐานข้อมูล จากนั้นเมื่อคลิกปุ่ม “ถ่ายรูป” จะปรากฏป๊อบอัพขึ้นมาเพื่อแจ้งให้ลูกค้ามองกล้อง เมื่อคลิกปุ่ม “OK” กล้องจะถูกเปิดขึ้นมาและทำการถ่ายรูปใบหน้าจำนวน 30 รูปเก็บไว้ในโฟลเดอร์ dataset จากนั้นก็คลิกปุ่ม “กลับหน้าหลัก” เพื่อกลับมายังหน้าหลักของโปรแกรม โดยมีขั้นตอนดังนี้ 1. แก้ไขฟังก์ชันปุ่มข้อมูลลูกค้า gotoAddCustomer() 1.1 ลบคำสั่ง print() ในฟังก์ชัน gotoAddCustomer() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
1.2 สร้างคลาสหน้าต่าง AddCustomer() ขึ้นมา เนื่องจากมีการอ้างอิงถึงคลาส AddCustomer() โดยให้พิมพ์โค้ดคำสั่งไว้ด้านบนคำสั่ง app=QApplication(sys.argv) ดังนี้
1.3 คลิกปุ่ม Run แล้วทดลองคลิกปุ่ม “เพิ่มข้อมูลลูกค้า”
จะเห็นว่าหน้าจอ GUI จะเปลี่ยนเป็นหน้าจอฟอร์ม addcustomer.ui ดังรูป
2. เขียนโค้ดคำสั่งสแกนและบันทึกใบหน้าในคลาส AddCustomer() 2.1 คัดลอกไฟล์ face_training.py จากโฟลเดอร์ Face_recognition ที่เขียนโค้ดคำสั่งไว้ในหน่วยการเรียนรู้ที่ 4 มาไว้ในโฟลเดอร์ Snack Machine Vending เพื่อใช้ในการเรียนรู้ใบหน้า
2.2 สร้างโฟลเดอร์ dataset เพื่อเก็บไฟล์รูปภาพใบหน้าลูกค้า
2.3 นำเข้าโมดูลสำหรับฐานข้อมูลและโมดูลที่ใช้สำหรับการวิเคราะห์ใบหน้า
2.4 พิมพ์โค้ดคำสั่งในการเชื่อมต่อฐานข้อมูลและเรียกใช้ไฟล์สำหรับการวิเคราะห์ใบหน้า
2.5 เขียนโค้ดคำสั่งในคลาส AddCustomer() ดังนี้
2.6 คลิกปุ่ม Run จากนั้นคลิกปุ่ม “เพิ่มข้อมูลลูกค้า”
2.7 กรอกข้อมูลลูกค้า จากนั้นคลิกปุ่ม “ถ่ายรูป”
2.8 จะปรากฏหน้าต่างป๊อบอัพขึ้นมา ให้คลิกปุ่ม OK
2.9 กล้องจะถูกเปิดขึ้นมา เพื่อวนลูปบันทึกใบหน้า 30 รูป เก็บไว้ในโฟลเดอร์ dataset
2.10 ข้อมูลที่กรอกเข้าไป จะถูกบันทึกเข้าไปในฐานข้อมูลที่อยู่ในโฟลเดอร์ Database ชื่อไฟล์ว่า customer สามารถดับเบิ้ลคลิกที่ไฟล์ customer เพื่อเปิดดูเรคอร์ดข้อมูลได้
2.11 ไฟล์ฐานข้อมูลจะถูกเปิดด้วยโปรแกรม DB Browser for SQLite ให้คลิกที่เมนู Browse Data เพื่อดูเรคอร์ดข้อมูลลูกค้าที่บันทึกเข้ามาในระบบ
2.12 กลับมาที่หน้าจอโปรแกรม คลิกปุ่ม “กลับหน้าหลัก” เพื่อไปยังหน้าหลักของโปรแกรม
การเขียนโค้ดคำสั่งระบบเติมเงิน หลักการทำงาน คือ เมื่อคลิกปุ่ม “เติมเงิน” จะเปิดกล้องขึ้นมาเพื่อวิเคราะห์ใบหน้าว่ามีในฐานข้อมูลหรือไม่ ถ้ามีในฐานข้อมูลจะเปิดหน้าต่างฟอร์มการเติมเงินขึ้นมา โดยจะแสดงยอดเงินคงเหลือในระบบ และให้เลือกจำนวนเงินที่ต้องการเติม จากนั้นคลิกปุ่ม “เติมเงิน” ก็จะอัพเดตยอดเงินในฐานข้อมูล 1. แก้ไขฟังก์ชันปุ่มเติมเงิน gotoAddMoney() 1.1 ลบคำสั่ง print() ในฟังก์ชัน gotoAddMoney() ที่อยู่ในคลาส MainWindow() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
1.2 สร้างคลาสหน้าต่าง AddMoney() ขึ้นมา เนื่องจากมีการอ้างอิงชื่อคลาส โดยให้พิมพ์คำสั่งไว้ด้านบนโค้ดคำสั่ง app=QApplication(sys.argv) ดังนี้
1.3 คลิกปุ่ม Run แล้วทดลองคลิกปุ่ม “เติมเงิน”
จะเห็นว่าหน้าจอ GUI จะเปลี่ยนเป็นหน้าจอฟอร์ม AddMoney.ui ดังรูป
2. เขียนโค้ดคำสั่งวิเคราะห์ใบหน้าและเติมเงินเข้าระบบในคลาส AddMoney() 2.1 เขียนโค้ดคำสั่งในคลาส AddMoney() ดังนี้
2.2 คลิกปุ่ม Run จากนั้นคลิกปุ่ม “เติมเงิน”
2.3 จะปรากฏหน้าต่างป๊อบอัพขึ้นมาให้มองกล้องเพื่อสแกนหน้า ให้คลิกปุ่ม OK
2.4 กล้องจะเปิดขึ้นมาเพื่อวนลูปสแกนใบหน้า 30 รอบและวิเคราะห์ใบหน้า จากนั้นจะดึงข้อมูลในฐานข้อมูลมาแสดงในฟอร์มเติมเงิน
2.5 คลิกเลือกจำนวนเงินที่จะเติม จากนั้นคลิกปุ่ม “เติมเงิน”
2.6 ระบบจะอัพเดตจำนวนเงินที่เติมเข้าไปในฐานข้อมูล โดยสามารถดับเบิ้ลคลิกเปิดไฟล์ customer ที่อยู่ในโฟลเดอร์ Database ดูได้
2.7 ฐานข้อมูลจะถูกเปิดด้วยโปรแกรม DB Browser for SQLite จากนั้นคลิกแท็บ Browse Data จะเห็นว่าฟิลด์ money ได้ทำการอัพเดตยอดเงินเรียบร้อยแล้ว
2.8 หน้าต่างฟอร์มเติมเงินจะแสดงยอดเงินที่อัพเดต ปุ่มเติมเงินจะถูกซ่อน ให้เหลือแค่ปุ่มกลับหน้าหลัก ให้คลิกปุ่ม “กลับหน้าหลัก” เพื่อกลับไปยังหน้าหลักของโปรแกรม
การเขียนโค้ดคำสั่งระบบชำระเงิน หลักการทำงาน คือ เมื่อเลือกขนมและคลิกปุ่ม “ยืนยัน” จะปรากฏหน้าต่างป๊อบอัพขึ้นมาเพื่อแจ้งให้ลูกค้ามองกล้อง จากนั้นคลิกปุ่ม “OK” กล้องจะเปิดขึ้นมาเพื่อสแกนใบหน้าว่าตรงกับฐานข้อมูลหรือไม่ ถ้าตรวจสอบแล้วมีในฐานข้อมูล จะแสดงข้อมูลลูกค้าขึ้นมาในช่องตรวจสอบข้อมูลลูกค้า หากถูกต้องให้คลิกปุ่ม “ชำระเงิน” หากไม่ถูกต้องให้คลิกปุ่ม “ยกเลิกการชำระเงิน” จะทำการรีเซ็ตหน้าจอทั้งหมด มีขั้นตอนดังนี้ 1. กำหนดฟังก์ชันปุ่ม “ยืนยัน” selectOK() 1.1 ลบคำสั่ง print() ในฟังก์ชัน SelectOK() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
2. กำหนดฟังก์ชันปุ่ม “ชำระเงิน” selectPay() 2.1 ลบคำสั่ง print() ในฟังก์ชัน selectPay() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
2.2 คลิกปุ่ม Run จากนั้นเลือกขนม 1 ชนิด แล้วคลิกปุ่ม “ยืนยัน”
2.3 จะปรากฏป๊อบอัพขึ้นมา ให้คลิกปุ่ม “OK”
2.4 กล้องจะเปิดขึ้นมาสแกนและวิเคราะห์ใบหน้า โดยจะแสดงชื่อลูกค้าขึ้นมา
2.5 ข้อมูลของลูกค้าที่อยู่ในฐานข้อมูลจะถูกดึงมาแสดงในหน้าจอ ดังรูป
2.6 คลิกปุ่ม “ชำระเงิน” จะแสดงข้อความในช่อง Shell ว่าได้รับขนมเรียบร้อยแล้ว และจะรีเซ็ตหน้าจอทั้งหมด
2.7 คลิกเข้าไปดูในฐานข้อมูล จะเห็นว่าจำนวนเงินของลูกค้าจะถูกหักเงินออกไปตามราคาขนม
3. กำหนดฟังก์ชันปุ่ม “ยกเลิกการชำระเงิน” SelectCancelPay() 3.1 ลบคำสั่ง print() ในฟังก์ชัน SelectCancelPay() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
3.2 คลิกปุ่ม Run แล้วทดลองเลือกสินค้าและสแกนใบหน้า จากนั้นลองคลิกปุ่ม “ยกเลิกการชำระเงิน” ข้อมูลบนหน้าจอจะถูกรีเซ็ตทั้งหมด ดังรูป
การเขียนโค้ดคำสั่งให้ขนมหล่นลงมายังช่องรับขนม 1. เขียนคำสั่งเรียกใช้ขา GPIO ของบอร์ด Raspberry Pi
2. กำหนดขา GPIO ที่เชื่อมต่อกับมอเตอร์แต่ละตัว ก่อนคำสั่ง class MainWindow() ดังรูป
3. แก้ไขโค้ดคำสั่งในฟังก์ชัน selectPay() โดยลบคำสั่ง print() ในแต่ละเงื่อนไขออก แล้วใส่โค้ดคำสั่งให้มอเตอร์หมุน ดังรูป
การเขียนโค้ดคำสั่งปิดหน้าจอโปรแกรม 1. ลบคำสั่ง print() ในฟังก์ชัน gotoClose() ที่อยู่ในคลาส MainWindow() แล้วเปลี่ยนเป็นคำสั่งต่อไปนี้
2. เมื่อคลิกปุ่ม Run แล้วทดลองคลิกปุ่ม “ปิดหน้าจอ” หน้าจอ GUI จะถูกปิด
โค้ดคำสั่งทั้งหมดของโปรแกรมตู้จำหน่ายขนมอัตโนมัติ
|