กลับไปหน้ารวมไฟล์
homotica-a-simple-cost-effective-home-control-system-78b894.md

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; ไม่จำเป็นเท่าไหร่ แต่ก็ดีที่มี

Completed hardware setup

นี่คือหน้าตาของชุดติดตั้งที่เสร็จสมบูรณ์ ผมคิดว่ามันค่อนข้างเรียบร้อยทีเดียว!

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

ข้อมูล Frontmatter ดั้งเดิม

title: "Homotica - a simple, cost-effective home control system"
description: "Create a simple home automation system using Arduino and an Android phone."
author: "daveVertu"
category: "Home & Automation"
tags:
  - "gate"
  - "lights"
  - "home automation"
  - "domotic"
  - "app"
  - "mobile app"
  - "android"
  - "door"
views: 72108
likes: 125
price: 2450
difficulty: "Intermediate"
components:
  - "1x Arduino UNO"
  - "1x Arduino Ethernet Shield 2"
  - "1x Relay (generic)"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://github.com/homotica/homotica"
  - "https://github.com/homotica/homotica"
documentationLinks: []
passwordHash: "02d798d31ba69cf8476f6fced60f2749fe8bdce2baf356cbe7a6a0815af4a05f"
encryptedPayload: "U2FsdGVkX1/aI/Z/eBSovhoRDjPHO6Dls+W9R77I8pOOwjPqk4CaSkqHo+NmH9rSNzQuJYpF6WWB9Cx2XOalIMiNVlvPEz+ourNLzTexC1Y="
seoDescription: "Build a simple, cost-effective Home Automation System using Arduino and an Android phone for easy home control."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/homotica-a-simple-cost-effective-home-control-system-78b894_cover.png"
lang: "th"