โปรเจกต์ Chris' Arduino Smart Home Solution ที่ใช้งานจริงในบ้านของผม
Modular Smart Home Solution ที่เป็นทางเลือกแทน KNX และ Loxone! ใกล้จะพร้อมสำหรับการผลิตแบบ series-production และใช้งานจริงในบ้านของผมแล้ว
Modular Smart Home Solution ที่เป็นทางเลือกแทน KNX และ Loxone! ใกล้จะพร้อมสำหรับการผลิตแบบ series-production และใช้งานจริงในบ้านของผมแล้ว
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
โปรดรับชมวิดีโอเพื่อดูการแนะนำสั้นๆ และการทำงานบางส่วน :
[ลิงก์ dropbox สำหรับวิดีโอ : https://www.dropbox.com/s/6d0p0y16j1kb6az/20180220_CARDUINO_System.mp4?dl=0 ]
โปรเจกต์นี้แสดงโซลูชัน Home Automation ที่ใช้ Arduino Ethernet (A000068) และ openHAB2 โดยมีเป้าหมายเพื่อพัฒนาโซลูชันที่พร้อมสำหรับการใช้งานจริงในบ้านของผมเอง
ฟังก์ชันการทำงานต่างๆ ที่กำหนดไว้สำหรับห้อง "มาตรฐาน" มีดังนี้
การสวิตช์ (Switch):
- แสงสว่าง (ใช้ Relays)
- สวิตช์หนึ่งตัวสำหรับควบคุม Servomotor ของระบบทำความร้อนใต้พื้น (ใช้ Relays)
- Relays สองตัวต่อหน้าต่างเพื่อควบคุมม่านไฟฟ้า (สูงสุด 2 หน้าต่างต่อห้อง)
ปุ่มกด (Button):
- ควบคุมไฟ
- ควบคุมม่าน
- อื่นๆ เช่น ควบคุมปลั๊กไฟ
เซนเซอร์ (Sensors):
- อุณหภูมิ (DHT 22)
- ความชื้น (DHT 22)
- ความสว่าง
- การตรวจจับการเคลื่อนไหว (โดยเฉพาะในทางเดิน, HC-SR501)
- สถานะหน้าต่าง (เปิด, ปิด, แง้ม)
- ตัวรับสัญญาณ IR (ตัวเลือกเสริม)
--------------------------------------------------------
หลังจากศึกษาข้อมูลในอินเทอร์เน็ตแล้ว ได้มีการนำโซลูชัน Hardware ต่อไปนี้มาใช้งาน:
- Mainboard หนึ่งบอร์ด (ทำงานด้วย Arduino (Arduino Ethernet แบบไม่มี PoE, Code: A000068)) เพื่อจัดการข้อมูลจาก Sensor และ Button รวมถึงสั่งสวิตช์ Relays (ติดตั้งในตู้ควบคุมไฟฟ้า บรรจุในเคสขนาด 6 sub-units)
- Sensor Board หนึ่งบอร์ด ติดตั้งแยกตามจุดในแต่ละห้อง เชื่อมต่อด้วยสาย Ethernet
- แผงปุ่มกด 6 ช่องต่อห้อง เชื่อมต่อด้วยสาย Ethernet
- Relays 8 ตัวต่อห้อง
--------------------------------------------------------
หลังจากศึกษาข้อมูล Software และทำ Prototype เพิ่มเติม ผมได้เลือกใช้สภาพแวดล้อม openHAB2 ร่วมกับโปรโตคอล MQTT เป็นโครงสร้างพื้นฐานของระบบเครือข่าย เพื่อให้ง่ายต่อการควบคุมและแสดงข้อมูล (และยังมีรูปลักษณ์ที่ทันสมัยสำหรับการใช้งานบนอุปกรณ์มือถือ)
--------------------------------------------------------
ส่วนของ Mainboard:
- รูปลักษณ์ดูเป็นมืออาชีพเพื่อให้มั่นใจว่าผ่านเกณฑ์การใช้งานในตู้ควบคุมไฟฟ้า
- ออกแบบมาให้ประหยัดพื้นที่
- ง่ายต่อการเปลี่ยนใหม่ในกรณีที่เกิดข้อผิดพลาด
- จัดวางตำแหน่งปุ่ม Reset และพอร์ตสำหรับ Programming ได้อย่างเหมาะสม
- ช่องรับไฟ Input (7-12V) พร้อมฟิวส์เพิ่มเติม
- สามารถขยายและปรับขนาดระบบได้
- ราคาประหยัดโดยใช้อุปกรณ์มาตรฐาน (ประมาณ 40 € เมื่อสั่งจากผู้ผลิตบอร์ดในเยอรมนี - รวมประกอบเสร็จสรรพ!)
ส่วนของ Sensor Board:
- ติดตั้งแบบฝังผนัง
- DHT 22 (สำหรับควบคุมระบบทำความร้อนใต้พื้น)
- อุปกรณ์ 1 wire รหัส DS2438 สำหรับตรวจวัดอุณหภูมิและรองรับ ADC สองช่อง
- จุดเชื่อมต่อ 1 wire สำหรับเพิ่มอุปกรณ์อื่นๆ (เช่น เซนเซอร์อุณหภูมิ DS18B20)
- เซนเซอร์วัดความสว่าง (เชื่อมต่อกับ ADC ของตัวตรวจสอบแบตเตอรี่ DS2438)
- อินพุต TTL สองช่อง (สำหรับสถานะหน้าต่าง: เปิด, ปิด, แง้ม)
- อินพุต TTL หนึ่งช่องสำหรับตัวตรวจจับการเคลื่อนไหว
- ตัวรับสัญญาณ IR
- สร้างได้ง่าย (เช่น สามารถบัดกรีเองได้ที่บ้าน)
อุปกรณ์อื่นๆ ที่ใช้:
- Raspberry Pi รันระบบ openhabian
- ปุ่มกด SPS (ยี่ห้อ Jung, Gira)
- Relays เกรดอุตสาหกรรม (Wago 788-30??, 24 V)
- แหล่งจ่ายไฟ (Power supplies)
---------------------------------------------------------------------------------
การเชื่อมต่อระหว่างบอร์ด Arduino ทั้งหมดกับ Alexa ทำผ่าน openHAB cloud connector และ Alexa openHAB skill
-----------------------------------------------------------------------------------
ตอนนี้ผมขอให้รายละเอียดด้าน Hardware เพิ่มเติม
ส่วนประกอบหลักและอินเทอร์เฟซของ Mainboard แสดงอยู่ในรูปถัดไป โดยติดตั้ง Arduino ลงบน Mainboard ซึ่งตัว Mainboard รองรับ:
- I2C 16 I/O port expander สองตัว ตัวหนึ่งใช้สำหรับ Relays 8 ตัว (ร่วมกับ ULN) และ Pin Header สำหรับต่อกับบอร์ดเสริม (Piggy back board) อีกตัวใช้สำหรับ Input 6 ช่อง, พอร์ต I/O สองช่อง และ Pin Header สำหรับบอร์ดเสริม อินเทอร์เฟซสำหรับ Input ทั้ง 6 ช่อง, Vcc และ GND ใช้แจ็ค RJ 45 พอร์ตเพิ่มเติมอีกสองพอร์ตเชื่อมต่อกับ Pin Header บน Mainboard โดยตรง ส่วน Relays เชื่อมต่อผ่านขั้วต่อสกรูแบบเสียบได้ (Pluggable screw terminal)
- ไฟ Input 7-12 V ผ่านขั้วต่อสกรูแบบเสียบได้ (ป้องกันด้วย SMD fuse)
- แจ็ค RJ45 สองช่องสำหรับ Sensor Board สองบอร์ด
- เอาต์พุต I2C บนแจ็ค RJ45
Mainboard สามารถขยายการทำงานได้ด้วยการเสียบบอร์ดเสริม (Extension board piggy backed) บอร์ดเสริมนี้จะเพิ่มช่องเอาต์พุต Relays อีก 8 ช่อง และแจ็ค RJ45 สำหรับ Input อีก 6 ช่อง เพื่อเชื่อมต่อกับปุ่มกด SPS แบบ 6 ช่องในห้อง ส่วนพอร์ต I/O อีกสองพอร์ตของ I/O port expander จะเชื่อมต่อกับ Pin Header ในตัว เพื่อใช้เป็น LED แสดงสถานะหรือปุ่มสำหรับส่งข้อความทดสอบไปยัง MQTT server
นอกจากนี้ คุณยังสามารถพัฒนาบอร์ดเสริมในเวอร์ชันของคุณเองได้ เช่น รองรับ Relays 16 ตัว หรือแจ็ค RJ 45 สองช่องสำหรับเซนเซอร์ปุ่มกดสองชุด
หากบอร์ดเสริมยังมีปุ่มกดหรือเอาต์พุต Relays ไม่เพียงพอ คุณสามารถเชื่อมต่อ Mainboard อีกบอร์ดผ่าน I2C โดยไม่ต้องใช้ Arduino ซึ่งบอร์ดเวอร์ชันนี้ผมยังไม่ได้พัฒนาขึ้นมา แต่คุณจะเห็นข้อเสนอแนะด้านล่าง รวมถึงบอร์ดเสริมสำหรับส่วนขยายนั้นก็สามารถพัฒนาได้ตามความต้องการเฉพาะของคุณ
นี่คือภาพบางส่วนของ Hardware จริง










มีการวางสาย LAN มาตรฐานสองเส้นจาก Mainboard (ในตู้ควบคุมไฟฟ้า) ไปยังแต่ละห้อง เพื่อเชื่อมต่อกับปุ่มกด (6 ช่อง) และ Sensor Board ดังนั้น โดยรวมแล้ว Mainboard พร้อมบอร์ดเสริมหนึ่งตัวสามารถรองรับห้องมาตรฐานได้สองห้อง โดยใช้ปุ่มกด 6 ช่องสองชุด, Sensor Board สองบอร์ด และ Relays สูงสุด 16 ตัวเพื่อควบคุมไฟ, ม่าน และอื่นๆ
ทีนี้มาดูในส่วนของ Software กันบ้าง openhabian ที่รันบน Raspberry Pi คือหัวใจของโครงสร้างพื้นฐาน Software โดยมีส่วนประกอบหลักคือ:
- 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 (ไฟล์ items ส่วนตัวของคุณ คุณสามารถดูตัวอย่างได้ที่นี่)
---------------------------------------------------------------------------------
บทช่วยสอน (TUTORIAL) :
การติดตั้ง Openhabian และกำหนดค่า openHAB
อุปกรณ์ Raspberry Pi (พร้อมอุปกรณ์เสริม)

หาก Raspberry Pi พร้อมใช้งานในชื่อ openhabian ให้เปิด Browser ของคุณแล้วพิมพ์: (พอร์ตเริ่มต้นคือ 8080 เพื่อเข้าสู่หน้าต่อไปนี้)
ผมเลือกใช้การติดตั้งแบบ Standard:

จากนั้นคุณสามารถเลือก openhab log viewer เพื่อติดตามสถานะการติดตั้งได้


ดูผลลัพธ์จาก openhab log viewer ด้านบน (คุณจะเห็นว่าพอร์ตของ log viewer คือ 9001)
หากคุณรัน "IpOfYourRaspberryPi:8080" อีกครั้ง คุณจะเห็นหน้าจอดังนี้:

เลือกเมนู Paper UI
ในหน้าถัดไป ให้เลือก add-ons และ misc จากนั้นค้นหาคำว่า cloud

ติดตั้ง openHAB cloud add-on
สำหรับการสื่อสารผ่าน MQTT ให้ติดตั้ง add-ons ต่อไปนี้ด้วยวิธีเดียวกันกับข้างต้น
-Add-Ons -> Bindings -> MQTT Binding
-Add-Ons -> Actions -> MQTT Action
การใช้ Openhabian และ Putty

ยืนยันหน้าต่างโต้ตอบด้วย yes - หลังจากเชื่อมต่อได้แล้ว ให้ใช้ชื่อผู้ใช้ „openhabian“ และรหัสผ่าน „openhabian“ จากนั้นคุณจะเห็นหน้าจอเริ่มต้นดังนี้

ใช้คำสั่ง:
„sudo openhabian-config“ และยืนยันด้วยรหัสผ่านมาตรฐาน „openhabian“
คุณจะเห็นหน้าจอดังนี้

เลือก optional components:
เลือก mosquitto และกด „continue“ ในหน้าถัดไป
คุณจะถูกถามรหัสผ่าน (ชื่อผู้ใช้สำหรับ login ของ mosquitto server คือ openhabian)
หลังจากเลือกรหัสผ่าน การติดตั้งจะเสร็จสิ้นโดยอัตโนมัติ

(หมายเหตุ: ใช้ System Settings เพื่อเปลี่ยนรหัสผ่านมาตรฐาน)
ผมคิดว่าการตั้งค่า IP Address แบบ Static ให้กับระบบ openhabian นั้นมีประโยชน์ โดยทำตามขั้นตอนต่อไปนี้เพื่อเปลี่ยนเป็น Static (ขั้นตอนนี้ใช้ได้สำหรับ Raspberry Pi 3)
รันคำสั่ง "sudo nano /etc/dhcpcd.conf" บน putty console


ลบเครื่องหมาย comment ออกจากบรรทัดเหล่านี้และใส่ IP Address ที่คุณต้องการ
static ip_address=XXXXXXXXXX
static_ routers = XXXXXXXXXX
static domain_name_server=XXXXXXXXXXXXXXXXX
และ restart บริการ network ด้วยคำสั่ง
sudo /etc/init.d/networking restart
คุณสามารถใช้ MQTT client อย่างเช่น mqttfx เพื่อทดสอบ mosquitto server ได้
การกำหนดค่า mqttfx เพื่อเชื่อมต่อกับ 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
Restart OH2
sudo /etc/init.d/openhab2 restart
ตอนนี้เราพร้อมที่จะสร้างการกำหนดค่า items แล้ว
โปรดจำไว้ว่า Raspberry Pi ของคุณสามารถเข้าถึงได้ในรูปแบบ Network Drive ให้เปิด Windows Explorer คลิกขวาที่ Network แล้วเลือก Map network drive และกรอกข้อมูลต่อไปนี้
\\\\IPAddressOfYourRaspberryPi\\openhab-conf
แล้วเลือก „log in with different credentials“

Network Drive ที่เชื่อมต่อแล้วจะมีหน้าตาดังนี้

คุณสามารถหาไฟล์ item ได้ที่นี่ - บันทึกลงในโฟลเดอร์ item
ตรวจสอบที่ LogViewer ว่าไฟล์ item สามารถโหลดได้สำเร็จหรือไม่
ไปที่ myopenhab.org และสร้างบัญชีผู้ใช้:

ใช้อีเมลของคุณและเลือกรหัสผ่าน
log in เข้าสู่ openhabian ผ่าน ssh ( putty ) และตรวจสอบไฟล์ต่อไปนี้เพื่อดู uuid และ secret
uuid : /var/lib/openhab2/uuid
secret : /var/lib/openhab2/openhabcloud/secret
เปิดไฟล์ด้วยคำสั่ง
sudo nano /var/lib/openhab2/openhabcloud/secret
sudo nano /var/lib/openhab2/uuid
หลังจากสร้างบัญชีแล้วให้ restart OH 2 :
sudo systemctl restart openhab2.service
(คุณสามารถติดตามสถานะได้ด้วย log viewer ใน browser)
ควรมีข้อความปรากฏใน log ว่าการเชื่อมต่อสำเร็จ
[INFO ] [io.openhabcloud.internal.CloudClient] - Connected to the openHAB Cloud service
ติดตั้ง Alexa บนโทรศัพท์มือถือของคุณ
เปิดแอป
เลือก skills
ค้นหาคำว่า openhab
ติดตั้ง skill และเปิดใช้งานโดยลงชื่อเข้าใช้ด้วยข้อมูลบัญชี myopenhab.org ของคุณ
อนุญาตให้แอปเข้าถึงบัญชีของคุณและเริ่มการค้นหาอุปกรณ์ที่ติด Tag สำหรับ Alexa ไว้
"Alexa, discover my devices."
จากนั้นคุณสามารถสั่งว่า:
"Alexa, switch Guest Room Lighting on"
"Alexa, switch Hochfahren on",
"Alexa, switch runter on" ,
คุณจะพบไฟล์ต่อไปนี้ให้ดาวน์โหลด:
1. Arduino Ethernet Sketch สำหรับ Mainboard (เผยแพร่ข้อมูลปุ่มกดและเซนเซอร์ และบอกรับข้อมูล (Subscribe) สำหรับ Relays และ Window Topic สำหรับห้องมาตรฐาน)
2. ไฟล์ item สำหรับห้องมาตรฐาน
3. Standard Room Widget สำหรับ Habpanel บน openHAB 2
4. ไฟล์ Rule สำหรับห้องมาตรฐานและกฎของ Alexa
นอกจากนี้ คุณยังจะพบไฟล์สำหรับควบคุม RGB LED strip ด้วย Arduino Ethernet ที่ทำงานร่วมกับ RGB shield ( https://www.velleman.eu/products/view/?id=412138 )
1. Sketch สำหรับ Arduino Ethernet + RGB Shield ที่ทำงานเป็น MQTT Client
2. ไฟล์ Items สำหรับ RGB
3. ไฟล์ Rules สำหรับควบคุม RGB
และยังมีฟังก์ชันอีกมากมายที่อยู่ใกล้แค่เอื้อม:
- ควบคุมและรับข้อมูลอุณหภูมิและความชื้นผ่าน Alexa
- เพิ่มกฎเพื่อควบคุมพัดลมเมื่อความชื้นสูงเกินไป
- เพิ่มกฎเพื่อควบคุม Relays เพื่อเปิด/ปิด ระบบทำความร้อนใต้พื้นตามอุณหภูมิ
- RGB strip: เพิ่ม item สำหรับหรี่ไฟ (Dimmer) และอัปเดต Sketch RGB เพื่อบอกรับข้อมูลหัวข้อนี้เพื่อเปลี่ยนความสว่างของ RGB LED strip
- RGB strip: เพิ่ม item สำหรับไฟ "กะพริบ" (Flash) และอัปเดต Sketch RGB เพื่อบอกรับข้อมูลหัวข้อนี้เพื่อให้ไฟ RGB LED strip กะพริบ
- ควบคุมปลั๊กไฟผ่าน Alexa เพื่อปิดอุปกรณ์ที่เปิดรอใช้งาน (Standby)
- วิทยุ WLAN บางรุ่นสามารถควบคุมได้ผ่าน openhab 2 - ซึ่งไม่ยากเกินไปที่จะเชื่อมต่อกับ Alexa (เปิด/ปิด, เพิ่ม/ลดเสียง เหมือนตัวหรี่ไฟ)
- esp8266 น่าสนใจมาก โดยเฉพาะการนำมาใช้ร่วมกับ Sensor Board เพื่อยกเลิกการใช้สายเคเบิล
Arduino Ethernet และ openHAB 2 เปิดโลกแห่ง Home Automation ที่ไร้ขีดจำกัดให้กับผม และ Alexa คือส่วนเติมเต็มที่ยอดเยี่ยมที่สุดครับ :-)
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้
ประเมิน Project
เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า
รีวิวจากคนใช้งานจริง
ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย
ยังไม่มีรีวิวบนหน้านี้ ถ้าเคยใช้งานหรือมีข้อเสนอแนะ เขียนเป็นคนแรกได้เลย