Homotica - ระบบควบคุมบ้านที่เรียบง่ายและคุ้มค่า
ทำไมต้องเป็นโปรเจกต์นี้?
ทุกคนต่างหลงรักระบบ Automation การสั่งให้บ้านเปิดไฟหรือเปิดประตูโรงรถด้วยการแตะหน้าจอโทรศัพท์มือถือนั้นเป็นเรื่องที่น่าอัศจรรย์ อย่างน้อยผมก็คิดเช่นนั้น
ด้วยเหตุนี้ ผมจึงตัดสินใจลองสร้างระบบของตัวเองเพื่อควบคุมอุปกรณ์ในบ้านจากสมาร์ทโฟน โดยไม่ต้องซื้อ wifi adapter ราคาแพงของบริษัทอื่น, smart bulbs หรือสิ่งอื่นใดทำนองนั้น; ดังนั้น มันจึงต้องมีราคา ถูก, ใช้งานง่าย และสามารถควบคุมได้ทั้งจากการเชื่อมต่ออินเทอร์เน็ต ภายในบ้าน (local) และมือถือ ผมรู้ว่ามีโปรเจกต์ดีๆ ที่ใช้งานได้จริงมากมาย (ยกตัวอย่างเช่น Cayenne หรือ ของ Anurag Vasanwala); อย่างไรก็ตาม ผมตัดสินใจสร้างของตัวเองเพื่อให้ตรงตามความต้องการของผมอย่างสมบูรณ์แบบ ผมเน้นการทำงานในสองส่วนหลัก: การตั้งค่า Hardware และการพัฒนา Android app ที่ดี
การติดตั้ง Hardware
"Hardware" ประกอบด้วยส่วนประกอบหลักสามอย่าง: Arduino, Ethernet adapter และ relay board อุปกรณ์ทั้งหมดที่ผมต้องการควบคุม ซึ่งขณะนี้คือไฟบางดวง, ประตูรถ, ประตูหลัก และประตูโรงรถ ถูกเชื่อมต่อเข้ากับ relay board; โดยที่ relay board ถูกควบคุมโดย Arduino ซึ่งเชื่อมต่อผ่าน Ethernet shield ไปยัง router ของผม นอกจากนี้ ผมพบ RFID reader ราคา 2 ยูโร และตัดสินใจลองใช้: ตอนนี้มันเชื่อมต่อกับ Arduino และช่วยให้ผมสามารถเปิด/ปิดประตูรั้วได้โดยใช้ RFID tag; ไม่จำเป็นเท่าไหร่ แต่ก็ดีที่มี

นี่คือหน้าตาของชุดติดตั้งที่เสร็จสมบูรณ์ ผมคิดว่ามันค่อนข้างเรียบร้อยทีเดียว!
Protocol การสื่อสาร
คำสั่งทั้งหมดที่ผู้ใช้ป้อนในแอปจะถูกส่งไปยัง Arduino IP ที่ระบุโดยใช้ UDP protocol; จากนั้น string ที่ได้รับจะถูกแยกวิเคราะห์ (parsed) และอุปกรณ์ที่ต้องการจะถูกสั่งงาน Arduino private IP และ router public IP จะถูกเก็บไว้ใน database ของแอป; แอปพลิเคชันจะเป็นผู้ตัดสินใจว่าจะใช้ IP ใด ขึ้นอยู่กับเครือข่ายที่เชื่อมต่ออยู่ในปัจจุบัน เมื่อ Arduino ได้รับข้อมูลอินพุตแล้ว มันจะส่งรหัสยืนยันกลับไปยังโทรศัพท์ เพื่อให้ผู้ใช้ทราบว่าคำสั่งทำงานอย่างถูกต้องหรือไม่ แอปยังอนุญาตให้ผู้ใช้ป้อน router public IP ในรูปแบบของ URL string: คุณสามารถสร้าง URL ที่ไม่ซ้ำกันโดยใช้บริการ Dynamic DNS (เช่น no-ip.com) และลงทะเบียนใน router; ด้วยวิธีนี้คุณจะมีที่อยู่ IP แบบ (กึ่ง) static ซึ่งมีประโยชน์ในกรณีที่ผู้ให้บริการอินเทอร์เน็ตของคุณไม่ได้ให้ที่อยู่ IP แบบ static มาให้ - เช่นของผม
ในการกำหนด protocol การสื่อสารระหว่างแอปและ Arduino ข้อกำหนดต่อไปนี้จะต้องถูกนำมาพิจารณา: มันจะต้องบอก Arduino ว่าจะให้ดำเนินการใด (เปิด/ปิด/trigger/จำลองการกดปุ่ม...) และบน pin ใด และจะต้องมี unique ID string เพื่อป้องกันผู้ใช้ที่ไม่ประสงค์ดีเข้าควบคุมบ้าน ไวยากรณ์ที่ผมคิดขึ้นมาคือดังนี้:
?MT=codecode!pin!mode!del!+!pin!mode!del!+ในที่นี้ ‘MT’ ระบุถึงการทำงานหลายอย่าง (multiple action) - หรือ scene - และ ‘codecode’ คือรหัส 8 ตัวอักษรที่ไม่ซ้ำกัน หลังจากรหัส 8 ตัวอักษร string คำสั่งแรกจะถูกส่งไป; ในกรณีที่เป็น multiple action จะมีการส่ง string เพิ่มเติมโดยใช้ตัวอักษร ‘+’ เป็นตัวแบ่ง
แน่นอนว่าอาจมีใครบางคนทำได้ดีกว่านี้มาก ดังนั้น หากคุณมีข้อเสนอแนะใดๆ เกี่ยวกับเรื่องนี้ โปรดโพสต์ได้เลย ผมยินดีเป็นอย่างยิ่งที่จะปรับปรุงโค้ด
ส่วนติดต่อผู้ใช้ - Android app
การออกแบบแอปเป็นอีกจุดหนึ่งที่สำคัญ: ผมต้องการให้มันสามารถปรับแต่งได้อย่างเต็มที่ สวยงามน่าใช้ และใช้งานง่าย เนื่องจากครอบครัวของผมจะใช้มัน หลังจากออกแบบและเขียนโค้ดแล้ว นี่คือหน้าตาของมัน:


แน่นอนว่าไม่ใช่แอปมืออาชีพ แต่ผมค่อนข้างพอใจกับมัน!
แอปมีคุณสมบัติดังนี้:
- การสร้างอุปกรณ์เดี่ยวๆ เช่น ไฟ หรือประตู;
- Scenes (หรือ “group actions”) ซึ่งจะดำเนินการรายการคำสั่งที่กำหนดไว้ล่วงหน้า โดยอิงจากอุปกรณ์ที่มีอยู่;
- คำสั่งเสียงที่สามารถปรับแต่งได้;
- การจัดการ Arduino หลายตัว;
โค้ด Arduino
โค้ด Arduino sketch ค่อนข้างเรียบง่าย:
- ในฟังก์ชัน `checkUDP()` การเชื่อมต่อจะถูกตรวจสอบ; หากมีข้อมูลใดๆ มันจะค้นหา `auth code` และเมื่อพบแล้ว `string` ที่เหลือจะถูกส่งไปยัง `processing method` ที่เกี่ยวข้อง ขึ้นอยู่กับว่าเป็น `single action`, `multiple action` (หรือ “scene”), `connection check request` หรือ `sensor reading request`
- ในฟังก์ชัน `checkRFID()` Arduino จะตรวจสอบ `RFID reader`; หากพบการ์ดใดๆ โค้ดที่อ่านได้จะถูกนำไปเปรียบเทียบกับโค้ดที่ได้รับอนุญาต และหากพบในกลุ่มนั้น การดำเนินการที่เกี่ยวข้องจะถูกเรียกใช้
- `homotica.refresh()` จะสั่งให้ `homotica library` ตรวจสอบว่ามีเวลาเพียงพอแล้วหรือไม่สำหรับ pin ที่กำหนดที่จะถูกดึง `high` หรือ `low`; สิ่งนี้ถูกตั้งค่าเมื่อผู้ใช้ส่งคำสั่ง “push”; `library` สามารถใช้งานได้บน Github (ลิงก์ที่ด้านล่างของหน้า)
นี่ คือโค้ด sketch; อย่างที่ผมบอกไป ยินดีรับข้อเสนอแนะเสมอ!
การพัฒนาในอนาคต
ผมวางแผนที่จะพัฒนาต่อไป อย่างน้อยก็ในส่วนของแอป เพราะผมค่อนข้างพอใจกับผลลัพธ์ของโปรเจกต์นี้ ในอนาคตอันใกล้ ผมอยากจะเพิ่มคุณสมบัติเหล่านี้:
- Triggers อิงตามเวลาและตำแหน่ง
- การอ่านค่าจาก Sensor และการประมวลผลข้อมูล
- การแจ้งเตือนแบบ Real-time จาก Arduino ไปยังแอป
หากคุณต้องการดูแอป โปรดลองใช้ได้เลย; ผมได้นำมันไปวางจำหน่ายบน Play Store ที่ ลิงก์นี้ อย่างไรก็ตาม โปรดจำไว้ว่านี่คือเวอร์ชันแรก
ขอบคุณที่อ่าน ขอให้เป็นวันที่ดี! ;)
Dave
รายละเอียดทางเทคนิคเพิ่มเติม
โครงสร้าง Smart Home แบบ Modular
Homotica คือระบบ home automation แบบ DIY ที่ออกแบบมาเพื่อความเข้ากันได้สูงสุดและต้นทุนการสร้างที่ต่ำ
- แผงควบคุมแบบรวมศูนย์: Arduino ทำหน้าที่เป็นศูนย์กลาง ควบคุมอินพุตจากสวิตช์ไฟและ motion sensors โดยใช้ 4-channel relay module เพื่อสลับการทำงานของเครื่องใช้ไฟฟ้าในครัวเรือนที่ใช้ไฟ 220V AC
- อินเทอร์เฟซแบบหลาย Protocol: รองรับทั้งการควบคุมระยะไกลด้วย Infrared (IR) และการควบคุมคำสั่งแบบ Serial-over-USB จาก PC ส่วนกลางหรือ Raspberry Pi
หลักปรัชญาการออกแบบ
- การทำงานแบบ Failsafe: มีคุณสมบัติ "Local Override" หากตัวควบคุมหลักล่มหรือเครือข่ายไม่ทำงาน สวิตช์ไฟจริงที่ผนังก็ยังคงสามารถควบคุมไฟได้ผ่าน
direct-gate logicในfirmware