เครื่องเรียกคิวพบเห็นได้ทั่วไปตามสถานที่ให้บริการสาธาณะที่จำเป็นต้องใช้เวลาในการให้บริการ เช่น ธนาคาร ไปรษณีย์ โรงพยาบาล สถานที่ทำบัตรประชาชน เป็นต้น โดยระบบคิวในมุมผู้ใช้บริการแยกเป็น 2 ส่วน คือ
1) ระบบกดบัตรคิว ประกอบด้วยตู้กดคิว และบัตรคิว
2) ระบบเรียกคิว ประกอบด้วยจอแสดงผลคิวปัจจุบัน ลำโพงส่งเสียงเรียกคิว และรีโมทกดคิว
สำหรับบทความนี้จะแนะนำการสร้างเครื่องเรียกคิวจำลองที่ส่งเสียงได้ โดยใช้เสียงจากระบบ TTS (Text-to-Speech) แล้วใช้บอร์ด IOXESP32 ร่วมกับ IOXESP32 Audio shield V2 เล่นไฟล์เสียงตามลำดับ
ขอเชิญหมายเลข 10 ค่ะ
จากประโยคดังกล่าวแยกได้ 3 ส่วน คือ
ทั้ง 3 ส่วนจะเห็นว่ามีเฉพาะส่วนที่ 2 (ส่วนหมายเลขคิว) เท่านั้นที่เปลี่ยนไปเรื่อย ๆ ส่วนประโยคต้น และประโยคท้าย เพียงเล่นไฟล์เสียงก่อน และหลังเล่นเสียงหมายเลข ก็เพียงพอ
ส่วนที่ 2 (หมายเลขคิว) จำเป็นจะต้องเรียงลำดับไฟล์เสียงตามลำดับการนับเลขจริงของภาษาไทย โดยหากเป็นเลขหลักเดียว หนึ่ง สอง สาม ... สามารถเล่นไฟล์เสียงหนึ่งสองสามได้เลย
เลข 10 มีไฟล์เสียงแยก ที่อ่านออกเสียง "สิบ"
ตัวเลขหลักสิบขึ้นไปที่หลักหน่วยเป็นเลข 1 ต้องมีไฟล์เสียงแยก ที่อ่านออกเสียง "เอ็ด" และใช้ไฟล์เสียงออกเสียง "เอ็ด" แทนเลข 1 ในหลักหน่วยไปตลอด
เลขตั้งแต่ 11 ถึง 19 จะมีกฏให้เพิ่มคำว่าสิบมาคั่นกลาง เช่น 12 อ่านว่า "สิบ สอง", 15 อ่านว่า "สิบ ห้า" การเล่นไฟล์เสียงต้องเล่นไฟล์ที่ให้เสียง สิบ แล้วตามด้วยเสียงตัวเลขหลักหน่วย
เลข 20 มีไฟล์เสียงแยก ที่อ่านออกเสียง "ยี่สิบ"
เลขตั้งแต่ 21 ถึง 29 จะมีกฏให้เพิ่มคำว่า ยี่สิบ มาคั่นกลาง เช่น 22 อ่านว่า "ยี่สิบ สอง", 15 อ่านว่า "ยี่สิบ ห้า" การเล่นไฟล์เสียงต้องเล่นไฟล์ที่ให้เสียง ยี่สิบ แล้วตามด้วยเสียงตัวเลขหลักหน่วย
เลข 30 ถึง 99 เล่นไฟล์เสียงที่ออกเสียงตัวเลขก่อน แล้วตามด้วย สิบ เช่น 60 คือ "หก สิบ", 30 คือ "สาม สิบ" กรณีหลักหน่วยไม่ใช่ 0 ต้องเล่นไฟล์เสียงที่ให้เสียงหลักหน่วยต่อท้าย เช่น 35 ต้องเล่นไฟล์เสียง "สาม สิบ ห้า", 61 ต้องเล่นไฟล์เสียง "หก สิบ เอ็ด"
เลข 100 ถึง 999 ต้องอ่านออกเสียงเลขหลักร้อย ตามด้วยคำว่า "ร้อย" แล้วตามด้วยกฏเดียวกันกับเลข 10 ถึง 99 ดังนั้นจึงต้องมีไฟล์เสียง "ร้อย" แยก เช่น 256 อ่านว่า "สอง ร้อย ห้า สิบ หก", 376 อ่านว่า "สาม ร้อย เจ็ด สิบ หก" เป็นต้น
จากหลักการดังกล่าว จึงต้องเตรียมไฟล์เสียงที่ออกเสียง ดังนี้
โดยเสียงใช้ได้ทั้งเสียงบันทึกจากคนจริง ๆ หรือเสียงจากระบบแปลงข้อความเป็นเสียง (TTS) ในบทความนี้เลือกใช้เสียงจากระบบ TTS จาก https://ttsmaker.com/th (นำไฟล์เสียงที่ได้ไปใช้งานต่อได้ฟรี)
หากยังไม่มีชุดไฟล์เสียง ดาวน์โหลดได้ที่ https://dl.artronshop.co.th/Sample-Queue-Calling-System-with-IOXESP32/sound-asset.zip
อุปกรณ์ที่ใช้สร้างเครื่องเรียกคิว มีดังนี้
1) บอร์ด IOXESP32 รุ่นใดก็ได้ สั่งซื้อได้ที่
2) โมดูล IOXESP32 Audio shield V2 สั่งซื้อได้ที่ https://www.artronshop.co.th/p/529
3) ลำโพง สั่งซื้อได้ที่ https://www.artronshop.co.th/p/518 หรือ https://www.artronshop.co.th/p/518
4) (ใช้กรณีต้องการให้แสดงเลขคิวปัจจุบัน) โมดูล IOXESP32 4-Digit shield สั่งซื้อได้ที่ https://www.artronshop.co.th/p/22
5) (หากต้องการให้ติดตั้งลงกล่องสะดวก) BASE32 หรือ IOXESP32 Dual Base หรือ IOXESP32 Triple Base สั่งซื้อได้ที่ https://www.artronshop.co.th/product/tag/ioxesp32
เสียบลำโพงเข้ากับ IOXESP32 Audio shield V2 (ดังรูป)
หรือต่อกับวงจรขยายเสียงภายนอกผ่านช่องเสียบแจ็คหูฟัง (ดังรูป)
ประกบบอร์ด IOXESP32 เข้ากับ IOXESP32 Audio shield V2 (ดังรูป)
เตรียมไฟล์เสียงดังนี้
ชื่อไฟล์ | ประโยค |
1.mp3 | หนึ่ง |
2.mp3 | สอง |
3.mp3 | สาม |
4.mp3 | สี่ |
5.mp3 | ห้า |
6.mp3 | หก |
7.mp3 | เจ็ด |
8.mp3 | แปด |
9.mp3 | เก้า |
10.mp3 | สิบ |
x1.mp3 | เอ็ด |
20.mp3 | ยี่สิบ |
100.mp3 | ร้อย |
เมื่อเตรียมไฟล์ครบแล้ว ให้นำไฟล์ใส่ลง MicroSD Card โดยต้องไม่ให้ไฟล์อยู่ในโฟลเดอร์ใด ๆ เลย (ดังรูป)
แล้วนำ MicroSD Card ไปเสียบลง IOXESP32 Audio shield V2 (ดังรูป)
ติดตั้งไลบรารี่ IOXESP32Audio ผ่าน Library Manager ดังนี้
เปิด Library Manager ขึ้นมา (1) จากนั้นใส่ IOXESP32Audio ลงในช่องค้นหา (2) กดปุ่ม INSTALLรอจนกว่าจะขึ้น installed (ดังรูป) เป็นอันจบขั้นตอนติดตั้งไลบรารี่ IOXESP32Audio
จากนั้นเขียนโปรแกรมดังนี้
1) include ไฟล์ไลบรารี่ที่จำเป็น
2) ประกาศขาของ ESP32 ที่ใช้กดเพื่อเรียกคิวต่อไป (ตัวอย่างใช้ขา IO0 ซึ่งสวิตช์ IO0 มีอยู่แล้วบน IOXESP32 ทุกรุ่น จึงไม่จำเป็นต้องต่อสวิตช์ภายนอกเพิ่มเติม) พร้อมประกาศตัวแปร count เพื่อใช้นับเลขคิว
3) ใน void setup() เรียกใช้คำสั่ง Audio.begin(); เพื่อให้ IOXESP32 Audio shield V2 พร้อมใช้งาน และใช้คำสั่ง pinMode(); สั่งให้ขาที่ต่อสวิตช์เป็น INPUT
4) ใน void loop() ใส่โค้ดตรวจจับการกดสวิตช์ดังนี้
5) ภายในปีกกาของโค้ดส่วนตรวจจับการกดสวิตช์ ให้เพิ่มค่าในตัวแปร count ขึ้น 1 เลข เพื่อเป็นการเรียกคิวต่อไป
6) ใส่โค้ดส่วนสร้างรายการไฟล์เสียงที่ต้องการให้ดังออกลำโพง
7) ใส่โค้ดส่วนเล่นไฟล์เสียงจากรายการไฟล์เสียง
ได้โค้ดเต็ม ๆ ดังนี้
อัพโหลดโปรแกรมลงบอร์ด แล้วเปิด Serial Monitor ขึ้นมา ลองกดปุ่ม IO0 บนบอร์ด IOXESP32 ผลที่ได้จะมีเสียงเรียกคิว "ขอเชิญหมายเลข 1 ค่ะ" ออกมาแล้ว เมื่อกดอีกครั้งจะได้ "ขอเชิญหมายเลข 2 ค่ะ" เมื่อกดอีก จะเป็นการเรียกคิวต่อไปเรื่อย ๆ ที่หน้าต่าง Serial Monitor จะขึ้นลำดับไฟล์เสียงที่เล่นขึ้นมา
เสียบชุด IOXESP32 + Audio shield V2 ลงใน IOXESP32 Dual Base แล้วเสียบ IOXESP32 4-digit shield ลงอีกฝั่ง (ดังรูป)
ติดตั้งไลบรารี่ IOXESP32_4Digit ดังนี้
2) แล้วรอจนกว่าจะดาวน์โหลดเสร็จสิ้น จะได้ไฟล์ IOXESP32_4Digit-main.zip มา
3) เปิดโปรแกรม ArduinoIDE ขึ้นมา แล้วกดไปที่ Sketch > Include Library เลือก Add .ZIP Library...
4) เลือกไฟล์ IOXESP32_4Digit-main.zip ที่ได้ดาวน์โหลดมา แล้วกดปุ่ม Open
จากโค้ดโปรแกรมเดิม แก้ไขดังนี้
1) include ไฟล์ IOXESP32_4Digit.h เพิ่ม
2) ใน void setup() ให้เพิ่มคำสั่ง Display.begin(); เพื่อให้จอพร้อมใช้งาน
3) ใน void loop() หลังคำสั่ง count++; ให้ใช้คำสั่ง Display.print() แสดงค่าในตัวแปร count จากนั้นใช้คำสั่ง Display.blinkRate() เพื่อกำหนดความเร็วการกระพริบ
4) ใน void loop() หลังชุดโค้ดเล่นเสียง ใช้ Display.blinkRate() เพื่อสั่งหยุดจอกระพริบ
ได้โค้ดโปรแกรมที่แก้ไขแล้วฉบับเต็มดังนี้
เมื่ออัพโหลดโปรแกรมแล้วลองกดปุ่ม IO0 จะพบว่าเลขคิวแสดงบนหน้าจอพร้อมมีเสียงออกมาแล้ว
สามารถสร้างเครื่องเรียกคิวได้โดยใช้ IOXESP32 + IOXESP32 Audio shield V2 โดยใช้ไฟล์เสียงประโยคต่าง ๆ ใส่ลง MicroSD Card แล้วสั่งให้เล่นไฟล์เสียงต่อกันเพื่อให้กลายเป็นประโยคเรียกคิว หากต้องการแสดงหมายเลขคิวปัจจุบันสามารถใช้ IOXESP32 4-digit shield และ IOXESP32 Dual Base ต่อเพิ่มได้