รูปภาพ
เกริ่นนำ
ระบบควบคุมด้วยเสียงส่วนใหญ่ชอบส่งข้อมูลไปประมวลผลบนเซิร์ฟเวอร์เมฆยักษ์อย่าง Amazon Alexa กันใช่ไหมล่ะ? แต่โปรเจค **Voice Controlled Home Automation** นี้มันตัดขาดจากอินเทอร์เน็ตซะเลย! มันใช้เอนจินแปลงเสียงเป็นข้อความ (Google Speech-to-Text) แบบออฟไลน์ในสมาร์ทโฟน Android แล้วส่งข้อความล้วนๆ ผ่านบลูทูธตรงเข้าไปยังเมทริกซ์รีเลย์สวิตชิ่งของ Arduino เลยจ้า
พูดง่ายๆ ก็คือ ในระบบ Home Automation ทั่วไปเรามีสวิตช์ไร้สายไว้เปิดปิดอุปกรณ์ใช่ไหม? แต่โปรเจคนี้เราควบคุมอุปกรณ์ด้วยเสียงเราเองเลยว่ะ! Arduino Mega มีขา Digital ตั้ง 54 ขา เพราะฉะนั้นเราจะต่ออุปกรณ์ได้เพียบเลย โปรเจคนี้จะช่วยเหลือผู้ที่มีข้อจำกัดทางร่างกาย ให้สามารถใช้เสียงควบคุมสิ่งต่างๆ ในบ้านได้ สู้งานนะน้อง!
แยกชิ้นส่วนข้อมูลจากบลูทูธ (String Parsing)
สมมติน้องพูดว่า "เปิดไฟห้องนั่งเล่น" แอพในมือถือจะแปลงคลื่นเสียงนั้นเป็นสายอักขระ ASCII
- มือถือจะส่งสายอักขระนี้ผ่านบลูทูธเข้าไปที่ ขา RX ของ HC-05 หรือ HC-06 ที่ต่อกับ Arduino
- การประกอบบัฟเฟอร์: Arduino อ่านสายอักขระทั้งเส้นทีเดียวไม่ได้ มันอ่านทีละตัวอักษร
('T', 'u', 'r', 'n'...) - น้องต้องเขียนลูป
while(Serial.available())เพื่อต่อตัวอักษรแต่ละตัวให้กลายเป็นวัตถุStringของ C++ ที่สมบูรณ์ - ตัวอักษรจบประโยคสุดสำคัญ: แอพ Android ต้องถูกโปรแกรมให้ส่งตัวอักษร
\n(Newline) ตอนจบประโยค Arduino จะใช้เงื่อนไขif (incomingChar == '\n')เป็นตัวบอกให้หยุดฟังและเริ่มประมวลผลข้อมูล! ห้ามช็อตนะตัวนี้
ค้นหาคำสั่งด้วย indexOf
พอ Arduino ได้สายอักขระสมบูรณ์มาแล้ว เช่น message = "เปิดพัดลมห้องนอน" การตรวจสอบเงื่อนไขต้องทำแบบยืดหยุ่นหน่อย
- อย่าใช้
if (message == "เปิดพัดลมห้องนอน")เด็ดขาด! เพราะถ้ามือถือได้ยินเป็น "เปิดพัดลมห้องนอนที" การเปรียบเทียบตรงๆ จะล้มเหลวทันที - ให้ใช้ฟังก์ชัน
.indexOf()แบบให้อภัย ที่ค้นหาคำหลักภายในสายอักขระแทน
if (message.indexOf("bedroom") >= 0 && message.indexOf("on") >= 0) {
digitalWrite(RelayPin1, LOW); // เปิดพัดลมซะ!
} else if (message.indexOf("all") >= 0 && message.indexOf("off") >= 0) {
// ปิดรีเลย์ทุกตัวในบ้านซะ!
}
อุปกรณ์ฮาร์ดแวร์ที่ต้องจัด
- Arduino Uno/Mega (แนะนำ Mega เพราะแรมเยอะ ช่วยบัฟเฟอร์สายอักขระยาวๆ ได้ดี)
- โมดูลบลูทูธ HC-05 หรือ HC-06 (ตามรูปด้านบนเลย)
- รีเลย์แบบแยกส่วนด้วยแสง (Optically Isolated Relays) หลายๆ ตัว 5V (ต้องทนแรงดันไฟบ้าน 120V / 10A AC ได้ เพื่อใช้กับหลอดไฟและพัดลม)
- สมาร์ทโฟน Android ที่รันแอพ "Bluetooth Voice Controller" ทั่วไป หรือจะเป็นแอพที่เขียนเองด้วย MIT App Inventor ก็ได้จัดไปวัยรุ่น