กลับไปหน้ารวมไฟล์
chris-arduino-smart-home-solution-working-in-my-own-house-f24a1e.md

วิดีโอสั้นๆ แนะนำตัวและอธิบายคร่าวๆ อยู่ด้านล่างนี่เลยจ้า ดูให้จบก่อนเริ่มงานนะ :

Introduction Video

The Professional Maker: ออโตเมชันระดับอุตสาหกรรม จัดไปวัยรุ่น!

โปรเจค Smart Home ส่วนใหญ่จบแค่บนเบรดบอร์ด แต่ Chris' Arduino Smart Home Solution อันนี้ ออกแบบมาให้ติดตั้งถาวรในตู้ MDB (ตู้ควบคุมไฟฟ้า) ได้เลย! ระบบแบบโมดูลาร์นี้เป็นตัวเลือกที่แข็งแกร่งแทนมาตรฐานแพงๆ อย่าง KNX หรือ Loxone ด้วยการใช้ PCB แบบติดตั้งบน DIN-rail และ Arduino Ethernet มันเลยเชื่อมโลกของนัก DIY กับวิศวกรไฟฟ้าเข้าด้วยกันได้อย่างเนียนๆ

โปรเจคนี้โชว์โซลูชัน Home Automation ที่ใช้ Arduino Ethernet (A000068) กับ openHAB2 เป้าหมายคือพัฒนาระบบที่พร้อมติดตั้งในบ้านจริงๆ โดยเน้นที่ความสามารถในการขยายฮาร์ดแวร์และมาตรฐานการติดตั้งระดับมืออาชีพ

มาดูกันว่าในหนึ่งห้อง "มาตรฐาน" ต้องใช้สกิลอะไรบ้าง

สวิตช์ (Switch):

  • ควบคุมไฟ (ผ่านรีเลย์)
  • สวิตช์ 1 ตัวสำหรับควบคุมเซอร์โวมอเตอร์ของระบบทำความร้อนใต้พื้น (ผ่านรีเลย์)
  • รีเลย์ 2 ตัวต่อหน้าต่าง 1 บาน สำหรับควบคุมม่านไฟฟ้า (สูงสุด 2 หน้าต่างต่อห้อง)

ปุ่มกด (Button):

  • ควบคุมไฟ
  • ควบคุมม่าน
  • อื่นๆ เช่น ควบคุมปลั๊กไฟ (ยังต้องคิดเพิ่ม)

เซนเซอร์ (Sensors):

  • อุณหภูมิ (DHT22)
  • ความชื้น (DHT22)
  • ความสว่าง
  • ตรวจจับการเคลื่อนไหว (โดยเฉพาะในทางเดิน, HC-SR501)
  • สถานะหน้าต่าง (เปิด, ปิด, เปิดระแนง)
  • ตัวรับสัญญาณอินฟราเรด (เพิ่มได้ถ้าอยาก)

หลังจากส่องข้อมูลในเน็ตมาซักพัก ก็ได้โซลูชันฮาร์ดแวร์ออกมาดังนี้:

  • เมนบอร์ด 1 ตัว (ใช้ Arduino Ethernet แบบไม่มี PoE รหัส A000068) สำหรับจัดการข้อมูลจากเซนเซอร์กับปุ่มกด และสั่งงานรีเลย์ (วางในตู้ MDB ใส่ในเคสแบบ 6 ยูนิต)
  • บอร์ดเซนเซอร์ 1 ตัวต่อห้อง ติดตั้งในห้องนั้นๆ เชื่อมต่อด้วยสายอีเธอร์เน็ต
  • ปุ่มกด 6 ปุ่ม 1 ชุดต่อห้อง เชื่อมต่อด้วยสายอีเธอร์เน็ต
  • รีเลย์ 8 ตัว ต่อห้อง

พอมาดูด้านซอฟต์แวร์และทำโปรโตไทป์ทดลองบ้าง ก็พบว่า openHAB2 ร่วมกับโปรโตคอล MQTT นี่แหละเหมาะสุดสำหรับสร้างโครงสร้างเครือข่ายเพื่อควบคุมและเผยแพร่ข้อมูลได้ง่าย (แถมหน้าตาก็โมเดิร์น ใช้กับมือถือก็สวย)


System Architecture: Decentralized Power

ระบบของพี่ใช้สถาปัตยกรรมแบบ "Motherboard-Daughterboard" ที่ขยายได้ง่ายสุดๆ:

  • The Mainboard Hub: แต่ละห้องจะถูกควบคุมโดย Arduino Ethernet ตัวนึงที่ติดตั้งอยู่บนเมนบอร์ดที่ออกแบบเอง บอร์ดนี้จะคุม รีเลย์ (Relay) อุตสาหกรรมกำลังสูง 8 ตัว (สำหรับไฟและเครื่องทำความร้อน) และมี MCP23017 I/O expanders 2 ตัวเพื่อเชื่อมต่อกับเซ็นเซอร์และปุ่มกด
  • The Sensor Nodes: เชื่อมต่อด้วย สายแลน RJ45 ปกติ แต่ละห้องจะมีบอร์ดเซ็นเซอร์แบบกระจายศูนย์ (Decentralized) บอร์ดพวกนี้จะคอยวัด อุณหภูมิและความชื้น (DHT22), ความสว่าง, และ การเคลื่อนไหว (PIR) แล้วส่งข้อมูลกลับไปที่ฮับกลาง โดยไม่ต้องกังวลเรื่องสัญญาณรบกวนจากสายอนาล็อกยาวๆ
  • The Piggyback Extension: ถ้าห้องไหนต้องการการควบคุมที่มากขึ้น (เช่น ม่านไฟฟ้าคู่และโซนไฟหลายจุด) ก็สามารถเพิ่ม บอร์ด Piggyback เข้าไปในสแต็กได้เลย ซึ่งจะให้รีเลย์เพิ่มอีก 8 เอาต์พุต และอินพุตปุ่มกดเพิ่มอีก 6 อินพุต

เมนบอร์ด (Mainboard) :

  • หน้าตาดูโปรเหมือนในตู้ไฟฟ้า จบเรื่องใบอนุญาตการติดตั้ง
  • ออกแบบให้ประหยัดพื้นที่
  • เปลี่ยนง่ายถ้าเกิดข้อผิดพลาด
  • ตำแหน่งปุ่มรีเซ็ตและพอร์ตโปรแกรมวางได้เหมาะสม
  • มีอินพุตไฟเลี้ยง (7-12V) พร้อมฟิวส์เพิ่มความปลอดภัย
  • ขยายได้และปรับขนาดได้ตามต้องการ
  • คุมงบได้ด้วยการใช้ชิ้นส่วนมาตรฐานบางอย่าง (ราคาประมาณ 40 ยูโรจากผู้ผลิตบอร์ดในเยอรมัน - ประกอบเสร็จเรียบร้อย!)

บอร์ดเซ็นเซอร์ (Sensor Board) :

  • ติดตั้งแบบฝังเรียบ
  • มี DHT22 (สำหรับควบคุมระบบทำความร้อนใต้พื้น)
  • มีอุปกรณ์ 1-Wire อย่าง DS2438 เป็นตัวตรวจสอบอุณหภูมิและรองรับ ADC สองช่อง
  • มีคอนเนคเตอร์ 1-Wire เพื่อเพิ่มอุปกรณ์อื่นๆ (เช่น เซ็นเซอร์อุณหภูมิ DS18B20)
  • เซ็นเซอร์วัดความสว่าง (เชื่อมต่อกับ ADC ของ DS2438)
  • มีอินพุต TTL 2 ช่อง (สำหรับสถานะหน้าต่าง: เปิด, ปิด, เอียง)
  • มีอินพุต TTL 1 ช่องสำหรับตัวตรวจจับการเคลื่อนไหว (Motion Detector)
  • มีตัวรับสัญญาณอินฟราเรด (IR Receiver)
  • ประกอบง่าย (จะบัดกรีเองที่บ้านก็ได้)

อุปกรณ์อื่นๆ ที่ใช้ :

  • Raspberry Pi ที่รัน openHABian
  • ปุ่มกด SPS (ยี่ห้อ Jung, Gira)
  • รีเลย์อุตสาหกรรม (Wago 788-30??, 24 V)
  • เพาเวอร์ซัพพลาย

การเชื่อมต่อระหว่างบอร์ด Arduino ทุกตัวกับ Alexa ทำผ่าน openHAB cloud connector และ Alexa openHAB skill ครับ


เอาล่ะ มาดูรายละเอียดฮาร์ดแวร์กันบ้าง

ส่วนประกอบหลักและอินเทอร์เฟซของเมนบอร์ดแสดงไว้ในรูปต่อไปนี้ Arduino จะถูกวางบนเมนบอร์ด เมนบอร์ดตัวนี้รองรับ:

  • I2C 16 I/O port expanders 2 ตัว ตัวหนึ่งใช้สำหรับควบคุมรีเลย์ 8 ตัว (ร่วมกับ ULN) และมีพินเฮดเดอร์สำหรับเชื่อมต่อกับบอร์ด Piggyback อีกตัวหนึ่งใช้สำหรับอินพุต 6 ช่อง, พอร์ต I/O สองพอร์ตที่เชื่อมต่อกับ... และพินเฮดเดอร์สำหรับบอร์ด Piggyback อินเทอร์เฟซสำหรับอินพุต 6 ช่องนี้, Vcc และ GND อยู่ที่แจ็ค RJ45 พอร์ตเพิ่มเติมอีกสองพอร์ตเชื่อมต่อกับพินเฮดเดอร์ที่อยู่บนเมนบอร์ดโดยตรง รีเลย์เชื่อมต่อผ่านเทอร์มินัลแบบสกรูที่ถอดได้
  • อินพุตไฟเลี้ยง 7-12 V ผ่านเทอร์มินัลแบบสกรูที่ถอดได้ (มีฟิวส์แบบ SMD คอยป้องกัน)
  • แจ็ค RJ45 2 ตัวสำหรับบอร์ดเซ็นเซอร์ 2 บอร์ด
  • เอาต์พุต I2C บนแจ็ค RJ45
ส่วนประกอบหลักและอินเทอร์เฟซของเมนบอร์ด

เมนบอร์ดสามารถขยายได้ด้วยบอร์ดเสริมแบบ Piggyback บอร์ดเสริมนี้จะเพิ่มเอาต์พุตรีเลย์อีก 8 ตัว และแจ็ค RJ45 อีกหนึ่งตัวสำหรับอินพุตเพิ่มอีก 6 ช่อง เพื่อเชื่อมต่อกับปุ่มกด SPS 6 ปุ่มในห้องหนึ่งห้อง พิน I/O อีกสองพินของพอร์ตขยาย I/O ตัวหนึ่งจะเชื่อมต่อกับพินเฮดเดอร์บนบอร์ดโดยตรง ตัวอย่างเช่น ใช้เป็นไฟสถานะ LED หรือปุ่มกดเพื่อส่งข้อความทดสอบไปยังเซิร์ฟเวอร์ MQTT

บอร์ดส่วนขยาย (Extension Board)

น้องๆ สามารถพัฒนาบอร์ดส่วนขยายเวอร์ชันของตัวเองได้นะ เช่น บอร์ดที่รองรับรีเลย์ 16 ตัว หรือมีแจ็ค RJ45 สองตัวสำหรับเซ็นเซอร์ปุ่มกดสองชุด

ถ้าบอร์ดส่วนขยายให้อินพุตปุ่มกดหรือเอาต์พุตรีเลย์ไม่พอ ก็สามารถเชื่อมต่อเมนบอร์ดอีกตัวผ่าน I2C ที่ทำงานโดยไม่มี Arduino ได้ ซึ่งเวอร์ชันนั้นพี่ยังไม่ได้พัฒนานะ แต่ด้านล่างพี่มีไอเดียไว้ให้แล้ว หรือน้องจะออกแบบบอร์ด Piggyback สำหรับส่วนขยายนั้นให้ตรงกับความต้องการเฉพาะของน้องก็ได้

Mainboard Version ที่ยังไม่มี Arduino นะจ๊ะ

จัดรูปจริงของฮาร์ดแวร์ให้ดูกันหน่อย

บอร์ด piggy back
Mainboard ประกอบเสร็จแล้ว พร้อม piggy back board และ arduino
ด้านหน้าของ Sensor Board
ด้านหลังของ Sensor Board

เราจะเดินสาย LAN มาตรฐานสองเส้นจาก mainboard (ที่อยู่ในตู้ควบคุม) ไปยังห้อง เพื่อเชื่อมต่อกับปุ่มกด (6 ปุ่ม) และ sensor board นั่นแปลว่า mainboard หนึ่งตัวพร้อม extension board สามารถรองรับห้องมาตรฐานได้สองห้อง โดยใช้ปุ่มกด 6 ปุ่มสองชุด, sensor board สองชุด และรีเลย์ได้สูงสุด 16 ตัว เพื่อควบคุมไฟ, ม่าน และอื่นๆ ตามใจชอบ

หัวใจของซอฟต์แวร์: MQTT + OpenHAB 2

"สมอง" ของบ้านหลังนี้อยู่บน Raspberry Pi ที่รัน OpenHAB 2 (Openhabian):

  1. โปรโตคอล MQTT: Arduino ทั้งหลายทำหน้าที่เป็น MQTT Clients คอยส่งข้อมูลเซนเซอร์ไปยัง Mosquitto Broker และรับฟังคำสั่งจากหัวข้อ (topic) ต่างๆ เพื่อสั่งงานรีเลย์ วิธีนี้ทำให้ตอบสนองเร็วมากๆ กดปุ๊บ ไฟติดปั๊บ
  2. เชื่อมต่อกับเสียง: ผ่าน OpenHAB Cloud Connector ระบบทั้งหมดจะเชื่อมโยงกับ Amazon Alexa ได้เลย น้องสามารถสั่งบ้านด้วยเสียงให้เปลี่ยน "ฉาก" แสงสว่าง, ปรับความร้อนพื้น, หรือตรวจสอบความชื้นในห้องรับแขกก็ยังได้
  3. UI/UX: ระบบมีแดชบอร์ดเว็บและแอพมือถือที่ทันสมัย ให้เราสามารถเข้าไปควบคุมหรือตั้งเวลาได้จากที่ไหนในโลกก็ได้

เอาล่ะ มาดูส่วนซอฟต์แวร์กันบ้าง Openhabian ที่รันอยู่บน Raspberry Pi คือศูนย์กลางของโครงสร้างซอฟต์แวร์ทั้งหมด ส่วนประกอบซอฟต์แวร์หลักมีดังนี้:

  • openHAB 2
  • Mosquitto Server ( MQTT Server, มันมากับการติดตั้ง openhabian อยู่แล้ว)
  • openhab cloud connector ( add-ons->, misc )
  • MQTT actions ( add-ons-> actions )
  • MQTT binding ( add-ons-> bindings )
  • item file (ไฟล์ไอเท็มส่วนตัวของน้อง ลองหาตัวอย่างดูได้)

TUTORIAL :

ติดตั้ง Openhabian และตั้งค่า openHAB

สิ่งที่ต้องมี: Raspberry Pi ( + อุปกรณ์เสริมต่างๆ)

  • ติดตั้ง Openhbian
  • ดาวน์โหลด SD Card Image
  • ใช้โปรแกรมอย่างเช่น Etcher เพื่อเขียน Image ลง SD Card
  • เสียบ SD Card เข้า Raspberry Pi และเชื่อมต่อ Raspberry Pi ด้วยสาย LAN (เข้ากับเราเตอร์ที่มี DHCP Server ทำงานอยู่)
  • รอสักครู่ (อาจจะใช้เวลานิดนึง) แล้วไปเช็ครายการ DHCP Client ในเราเตอร์จนกว่า Raspberry Pi จะได้รับ IP Address (หรือจะใช้โปรแกรมสแกน IP อย่าง Angry IP Scanner เพื่อหา Pi ของเราก็ได้)
Raspberry Pi ได้รับ IP Address แล้วจ้า

ถ้า Raspberry Pi ของน้องติดตั้งเป็น openhabian อยู่แล้ว ก็เปิดบราวเซอร์ขึ้นมา แล้วพิมพ์ที่อยู่ตามนี้เลย (พอร์ตเริ่มต้นคือ 8080 เพื่อเข้าถึงหน้านี้)

พี่เลือกการติดตั้งแบบ Standard นะ:

เริ่มต้นการติดตั้ง Openhabian

จากนั้นน้องก็เลือก openhab log viewer เพื่อดูสถานะการติดตั้งได้เลย

สถานะการติดตั้งใน Log Viewer

ดูด้านบนนั่นคือผลลัพธ์จาก openhab log viewer (สังเกตว่าพอร์ตของ log viewer คือ 9001)

ถ้าน้องลองเข้า "IpOfYourRaspberryPi:8080" อีกครั้ง จะเห็นหน้าตาแบบนี้:

เลือก Paper UI Dialog เข้าไปเลย

ในหน้าถัดไป ให้เลือก add-ons -> misc แล้วค้นหาคำว่า cloud

ติดตั้ง Openhab Cloud connector

ติดตั้ง add-on ชื่อ openHAB cloud ไปเลย

สำหรับการสื่อสารแบบ MQTT ให้ติดตั้ง add-on ต่อไปนี้ด้วยวิธีเดียวกัน

  • Add-Ons -> Bindings -> MQTT Binding
  • Add-Ons -> Actions -> MQTT Action

Openhabian กับ Putty

การเข้าถึง openhabian ผ่าน Putty

ตอบ yes ในไดอะล็อกแรกที่ขึ้นมา - หลังจากเชื่อมต่อได้แล้ว ให้ใช้ username เป็น "openhabian" และ password เป็น "openhabian" แล้วจะเห็นหน้าจอเริ่มต้นแบบนี้

ใช้คำสั่ง: "sudo openhabian-config" แล้วยืนยันด้วยพาสเวิร์ดมาตรฐาน "openhabian"

จะเห็นหน้าจอแบบนี้

เลือก optional components :

เลือก mosquitto แล้วกด "continue" ในหน้าจอถัดไป

ระบบจะถามหาพาสเวิร์ด (username สำหรับ login ไปที่ mosquitto server คือ openhabian)

หลังจากตั้งพาสเวิร์ดแล้ว การติดตั้งจะเสร็จสิ้นโดยอัตโนมัติ

(หมายเหตุ: ใช้ System Settings ในการเปลี่ยนพาสเวิร์ดมาตรฐานนะ อย่าให้ใครมาแฮกง่ายๆ)

พี่คิดว่ามันมีประโยชน์ถ้าเราเซ็ตให้ openhabian system มี IP แบบ static (ตายตัว) ตามขั้นตอนนี้เลย (วิธีนี้ใช้ได้กับ Raspberry Pi 3 นะ)

รันคำสั่ง "sudo nano /etc/dhcpcd.conf" บนคอนโซลของ putty

ลบเครื่องหมายคอมเมนต์ ( # ) ออกจากบรรทัดเหล่านั้น แล้วเพิ่มที่อยู่ IP ที่น้องกำหนดลงไป static ip_address=XXXXXXXXXX static_ routers = XXXXXXXXXX static domain_name_server=XXXXXXXXXXXXXXXXX แล้วรีสตาร์ท network service ด้วยคำสั่ง sudo /etc/init.d/networking restart

น้องสามารถใช้ MQTT client อย่างเช่น mqttfx มาทดสอบ mosquitto server ได้เลย

การตั้งค่า mgttfx เพื่อเชื่อมต่อกับ openhabian mosquitto server :

ตั้งค่า MQTT binding บน OH2 ที่ไฟล์: /etc/openhab2/services/mqtt.cfg mqtt:broker.url=tcp://localhost:1883 mqtt:broker.clientId=openhab mqtt:broker.retain=true mqtt:broker.async=false

รีสตาร์ท OH2 sudo /etc/init.d/openhab2 restart

ตอนนี้เราพร้อมจะสร้าง items definition แล้ว

อย่าลืมว่า Raspberry Pi ของน้องสามารถเข้าถึงได้ในฐานะ network drive ด้วยนะ เปิด Windows Explorer ขึ้นมา คลิกขวาที่ Network แล้วเลือก map network drive แล้วใส่ข้อมูลตามนี้

\IPAddressOfYourRaspberryPi\openhab-conf แล้วเลือก "ล็อกอินด้วยข้อมูลประจำตัวอื่น"

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

apps:
  - "1x OpenHAB 2 Smart Home Platform"
  - "1x Mosquitto MQTT Broker"
  - "1x Amazon Alexa"
author: "SaschaK"
category: "Home Automation"
components:
  - "1x piggyback for mainboard"
  - "1x DIN Rail B6504121"
  - "1x Arduino Ethernet Rev. 3"
  - "1x Raspberry Pi 3 Model B"
  - "1x Housing for Sensor board GH02KS030/010 Größe 1"
  - "1x sensor board"
  - "1x RGB Shield for Arduino"
  - "1x Soldering iron (generic)"
  - "1x DHT22 Temperature Sensor"
  - "1x Echo Dot"
  - "1x JUNG LS5236TSM  - Pushbutton sensor  ( alternative to gira)"
  - "1x PIR Motion Sensor (generic)"
  - "1x Mainboard"
  - "1x drilling machine"
  - "1x saw"
  - "1x 24 V Relais ( e.g. WAGO 788-304)"
  - "1x Arduino Ethernet Rev. 3"
  - "1x Pushbutton sensor 2, 3-gang 24 V zero-voltage with inscription space"
description: "โซลูชั่นบ้านอัจฉริยะแบบ Modular อีกทางเลือกนอกจาก KNX กับ Loxone! งานเทพๆ ใกล้จะพร้อมผลิตเป็นชุดแล้ว และที่สำคัญ... ตึงๆ เพราะพี่ติดตั้งและใช้งานจริงในบ้านแล้วจ้า งานง่ายแต่หล่อ วัยรุ่นต้องจัดไป!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/ecd07b07-dd59-4389-bc45-198316b95557.json"
  - "https://projects.arduinocontent.cc/28c53a2f-cca9-4f4a-83bc-4b9092b4f325.rules"
  - "https://projects.arduinocontent.cc/ecd07b07-dd59-4389-bc45-198316b95557.json"
  - "https://projects.arduinocontent.cc/f41527e0-5020-4c0c-8858-2ed296649435.items"
  - "https://projects.arduinocontent.cc/584b93b0-833f-4c0b-86ee-82ea34ec673a.rules"
  - "https://projects.arduinocontent.cc/584b93b0-833f-4c0b-86ee-82ea34ec673a.rules"
  - "https://projects.arduinocontent.cc/f41527e0-5020-4c0c-8858-2ed296649435.items"
  - "https://projects.arduinocontent.cc/28c53a2f-cca9-4f4a-83bc-4b9092b4f325.rules"
encryptedPayload: "U2FsdGVkX19R3PqBN6DeM6OXAGW+wot2xRuByc3/vXe4jgOTqPZWmwh6vr0zVQCrGgIIFDtG6sUYTaRM4lnp5Eedg0xBVhsaehY95oRT7mkapzxlZzH9874ddA/eA4wiZleTKv5S9y6Xy77jElv3PQ=="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/chris-arduino-smart-home-solution-working-in-my-own-house-f24a1e_cover.gif"
lang: "en"
likes: 1
passwordHash: "456071000b77a26cb2acdce74b3e3f84d0a23c3710ef0d386691393042856ca3"
price: 2450
seoDescription: "Industrial-grade Smart Home Solution with Arduino Ethernet. Learn to build a scalable MQTT-based system for lighting, shutter control, and climate management using OpenHAB 2."
tags:
  - "smart-home"
  - "openhab"
  - "mqtt"
  - "industrial-automation"
  - "ethernet"
title: "โปรเจคบ้านอัจฉริยะด้วย Arduino ของคริส ใช้งานจริงในบ้านพี่แล้ววว!"
tools:
  - "1x EAGLE PCB Designer"
  - "1x Soldering Station"
videoLinks:
  - "https://www.youtube.com/embed/9Nh8-3gT5PU"
views: 944