แอร์บ้านเป็นสิ่งแรกๆที่ผมอยากให้เชื่อมต่อเข้ากับระบบ Smart Home ได้ เพราะเราสามารถสั่งเปิดแอร์ก่อนถึงห้องได้เลยหลังจากการเดินทางอันเหน็ดเหนื่อย กลับมาก็เจอแอร์เย็นๆ ต้อนรับเลย และหากคุณใช้รีโมตแบบเดิม คุณก็ต้องตั้งเวลาปิดแอร์ทุกครั้งที่เปิด หรือว่าตื่นมาปิดแอร์ตอนเช้า แต่สำหรับระบบ Smart Home นี้ คุณสามารถตั้งเวลาปิดแอร์อัตโนมัติสำหรับทุกวันหรือให้มันปิดเองก่อนออกจากบ้านก็ได้
ในบล๊อกนี้ก็จะมาเล่าสิ่งที่ผมได้ทำใช้เอง นั่นก็คือโซลูชั่นสำหรับการควบคุมแอร์ผ่าน wifi – แต่ว่าบล๊อกนี้ผมจะไม่ได้ตั้งใจให้มันเป็น Tutorial ที่ทุกคนจะทำตามได้เลย เนื่องจากว่าแอร์ของแต่ละบ้านนั้นคนละยี่ห้อกันและ Setup ของแต่ละคนก็ไม่เหมือนกัน(ผมใช้ HomeBridge) ใครสนใจจะทำตามอาจจะต้องมีพื้นฐานระดับนึง แต่ยังไง ผมจะอธิบายให้เป็นขั้นตอนที่สุดครับ
ก่อนอื่นมาดูวิดีโอกันก่อน
Prototype ก่อนเป็นอันดับแรก
สิ่งที่ยากที่สุดของการควบคุมแอร์คือการสั่งงานแอร์ และเรามีวิธีเดียวที่จะสั่งงานแอร์ได้คือผ่านทาง Infrared เริ่มด้วยการต่อหลอด IR เข้ากับ ESP8266 (NodeMCU) และผมได้ต่อตัวรับ IR ไว้ด้วย
สิ่งที่ผมได้กลับมาจากการทดสอบด้วย Setup ด้านบน
- สัญญาณ IR ที่ออกมาไม่ค่อยแรง ตอนยิง IR ควรยิงใกล้ๆ
- สัญญาณ IR จากรีโมตแอร์นั้นค่อนข้างยาวและซับซ้อน ไม่เหมือนกับอุปกรณ์อื่นๆ เช่น TV
- เนื่องจากเรามองไม่เห็น Infrared ผมจึงต่อ LED คร่อม เพื่อที่ผมจะได้รู้ว่ามันยิง IR ออกมาแล้ว
Library ที่ผมใช้คือ IRremoteESP8266 ซึ่งเป็น Library สำหรับการรับและยิง IR
ใน Library นี้มี Class ที่ทำมารองรับการยิง IR สำหรับแอร์ด้วย! – แอร์ผมยี่ห้อ Samsung ใช้คลาส IRSamsungAc ซึ่งมันทำให้ผมสะดวกมากๆ เพราะไม่ต้องมานั่งบันทึกสัญญาณรีโมตเอง แต่ก็มีปัญหาหน่อยคือ function ac.off() ของ Lib ไม่ทำงาน ทำให้ผมปิดแอร์ไม่ได้ 555555
วิธีทางแก้คือผมต้องบันทึกสัญญาณที่ส่งออกมาจากรีโมต โดยใช้ไฟล์ IRrecvDumpV2 (อยู่ใน Examples ของ Library) เมื่อเรากดรีโมตไปที่ตัวรับที่ได้เชื่อมต่อกับ NodeMCU ไว้ก่อนหน้า เราจะได้ array ยาวๆ ออกมา ซึ่งจะเป็นข้อมูลช่วงเวลาของ infrared หลังจากนั้นค่อยเอาสัญญาณที่บันทึกได้นั้นยิงออกไปเมื่อต้องการจะปิดแอร์
ตัวอย่างไฟล์ทดสอบยิง IR
#include Arduino.h #include IRremoteESP8266.h #include IRsend.h #include ir_Samsung.h //include ต้องใส่วงเล็บ แต่เอาออกเนื่องจากทำให้เว็บแสดงผลผิดพลาด const uint16_t kIrLed = 4; // Pin ที่ต่อหลอด Infrared แนะนำ pin : 4 (D2). IRSamsungAc ac(kIrLed); // Lib รีโมตแอร์ Samsung IRsend irsend(kIrLed); // Lib ยิง IR //Array ข้อมูลสัญญาณ IR ที่บันทึกได้จาก IRrecvDumpV2 uint16_t ac_off[349] = {640, 17770, 3056, 8898, 522, 472, 550, 1436, 554, 438, 560, 434, 560, 434, 560, 432, 556, 438, 554, 438, 554, 438, 554, 1432, 556, 442, 550, 442, 550, 1436, 550, 1458, 474, 520, 516, 1470, 552, 1436, 556, 1428, 560, 1428, 584, 1402, 560, 438, 556, 438, 554, 438, 556, 438, 556, 438, 554, 438, 554, 442, 552, 464, 528, 464, 470, 524, 542, 450, 546, 446, 552, 442, 554, 438, 556, 438, 556, 434, 558, 434, 560, 434, 560, 434, 556, 438, 556, 442, 552, 442, 550, 444, 550, 442, 550, 448, 546, 464, 528, 464, 474, 518, 546, 446, 550, 442, 554, 438, 554, 438, 560, 434, 560, 434, 554, 1432, 556, 1432, 556, 2934, 3030, 8898, 556, 1436, 550, 442, 550, 468, 526, 464, 530, 464, 474, 520, 546, 446, 550, 442, 556, 438, 554, 1432, 554, 438, 554, 440, 554, 1432, 556, 438, 556, 1432, 554, 1436, 552, 1436, 550, 1458, 554, 1432, 474, 1514, 550, 442, 550, 444, 554, 438, 554, 438, 554, 438, 554, 438, 554, 438, 556, 438, 556, 438, 556, 438, 554, 442, 550, 442, 550, 442, 552, 464, 530, 464, 530, 464, 470, 522, 546, 448, 550, 442, 550, 444, 554, 438, 554, 438, 556, 438, 556, 438, 554, 438, 550, 442, 550, 442, 552, 442, 550, 442, 550, 442, 550, 446, 546, 468, 524, 470, 524, 468, 516, 476, 548, 446, 550, 2912, 3052, 8900, 554, 1434, 554, 438, 554, 438, 556, 438, 556, 438, 556, 438, 554, 438, 554, 442, 550, 442, 550, 1438, 550, 464, 530, 464, 474, 1514, 546, 446, 550, 442, 550, 442, 552, 1432, 554, 1432, 554, 1432, 554, 1432, 556, 442, 550, 1436, 552, 442, 550, 1458, 530, 1458, 520, 478, 546, 448, 546, 446, 550, 1434, 554, 1432, 556, 1432, 556, 438, 530, 464, 528, 470, 524, 468, 520, 474, 520, 1466, 522, 472, 522, 494, 500, 1488, 520, 1468, 550, 444, 550, 442, 526, 468, 524, 1462, 524, 468, 526, 468, 526, 468, 526, 468, 526, 468, 524, 474, 520, 472, 520, 472, 522, 498, 494, 1488, 500, 1488, 526}; // SAMSUNG_AC void setup() { ac.begin(); irsend.begin(); Serial.begin(9600); delay(200); ac.on(); Serial.println("Default state of the remote."); Serial.println("Setting desired state for A/C."); ac.setFan(kSamsungAcFanAuto); //แรงลมอัตโนมัติ ac.setMode(kSamsungAcCool); //โหมดเย็น ac.setTemp(25); //อุณหภูมิ 25 ac.setSwing(false); //ไม่ส่าย ac.send(); //ใช้ Lib IRSamsungAc ยิงสัญญาณ IR จากที่ตั้งค่าไว้ด้านบน } void loop() { delay(10000); //ใช้ Lib IRsend ยิงสัญญาณ IR จากที่บันทึกได้ (เนื่องจากผมใช้ Lib IRSamsungAcในการปิดแอร์ไม่ได้) irsend.sendRaw(ac_off,349,38); }
เมื่อส่วนการยิง IR ซี่งเป็นส่วนที่สำคัญที่สุดสำเร็จแล้ว ต่อมาก็เป็นส่วนของ User interface ว่าเราจะทำให้มันควบคุมได้ผ่านอะไรได้บ้าง
เชื่อมต่อกับ HomeKit
เหมือนเดิมที่ผมเคยทำไปในโปรเจ็ค DIY ม่านไฟฟ้า ผมจะใช้ HomeBridge-mqtt สำหรับการเชื่อมต่อไปยัง HomeBridge
สำหรับแอร์ ผมจะสร้าง accessories ที่ใช้ HeaterCooler Service (รองรับ iOS 11+) ขึ่นมา
publish ไปยัง
homebridge/to/add
payload
{ "name": "Smart AC", "service_name": "smart_ac", "service": "HeaterCooler", "manufacturer": "ESP8266", "firmwarerevision": "1.0.0", "SwingMode": 1, "RotationSpeed": {"maxValue":3, "minValue": 0, "minStep": 3}, "CoolingThresholdTemperature": {"maxValue":28, "minValue": 18, "minStep": 1} }
ออกแบบ Hardware
ตัว Smart Remote อันใหม่ที่จะติดตั้งที่ผนัง และใช้แทนรีโมตอันเดิม มีส่วนประกอบคร่าวๆ ประมาณนี้
- ESP 8266 NodeMCU
- หน้าจอ OLED 256×64 SSD1332
- LDR – ผมอยากให้จอลดแสงหรือดับเมื่อปิดไฟนอน เนื่องจากจอมันสว่างทำให้รำคาญตาเวลานอน
- ปุ่ม Push button
- IR LED และ LED สีฟ้า (เพื่อให้เห็นว่า IR กำลังทำงาน)
- NPN Transistor BC338 – สำหรับเพิ่มกำลังส่งให้ IR ยิงติดได้ง่ายขึ้น
ผมเริ่มออกแบบตัว Remote ที่จะติดตั้งที่ผนังโดยใช้ Fusion 360
หลังจากนั้นก็ 3D Print ออกมา ขัด และพ่นสีนิดหน่อยก็จะได้ออกมาแบบนี้ครับ
Software ฝั่ง ESP8266
สำหรับตัวโค้ดฝั่ง ESP8266 ผมขอไม่อธิบายเพราะยาวมาก สามารถไปดูได้ใน GitHub เลยครับ แต่จะมาบอกว่ามีฟังก็ชั่นอะไรบ้าง
- เมื่อแอร์ยังไม่เปิด หน้าจอจะแสดงผลเป็นนาฬิกาจาก NTP
- มีปุ่มสามปุ่มง่ายๆ เปิด/ปิด, เพิ่มอุณภูมิ, ลดอุณหภูมิ กดค้างปุ่ม Power เพื่อเปลี่ยนโหมด
- สามารถตั้งอุณหภูมิได้, การส่าย, ความแรงลม และโหมดของแอร์ (Cool, Fan)
- หน้าจอลดแสงเองเมือห้องสว่างน้อย และปิดหน้าจอเมื่อห้องไม่มีแสง(เวลาปิดไฟนอน)
- อัพเดท Firmware ผ่าน WiFi ได้ด้วย Arduino OTA
- ควบคุมผ่าน HomeKit โดยใช้ HeaterCooler Service (รองรับแค่ iOS 11+)
- ควบคุมผ่าน HomeKit, Alexa โดยใช้ Fan Service – จำลองเป็นพัดลม(สั่งงานได้แค่เปิดปิด) แต่สั่งงานได้จากทุกที่
เมื่อติดตั้งกับผนังแล้วก็จะได้ออกมาแบบนี้
ในบล๊อกนี้ก็ขอจบลงเพียงเท่านี้ ใครอยากสอบถามเพิ่มเติมก็ Comment ไว้ หรือติดต่อผ่านทาง Mail ได้เลยครับ
ขอบคุณทุกคนที่สนใจเข้ามาอ่านครับ
ลิงค์ Github
https://github.com/maxmacstn/MQTT-AC-Controller
ลิงค์ไฟล์ CAD
OLED รุ่นนี้จะซื้อได้จากไหนหรอคับ
ถูกใจถูกใจ
ผมสั่งมาจากเว็บนี้ครับ
https://www.buydisplay.com/default/serial-oled-module-price-3-2-inch-display-256×64-screens-white-on-black
ถูกใจถูกใจ
สวยงามมากครับ
ถูกใจถูกใจ
ทำขายหรือเปล่าครับ
ถูกใจถูกใจ
ไม่ได้ขายครับ
ถูกใจถูกใจ
สนใจครับสอบถามได้ไหม จะทําเป็น project
ถูกใจถูกใจ
Excelent proyect! How did you manage the power supply? Are you using some kind of current regulator to convert from 220v into 5v? Or are you using batteries?
ถูกใจถูกใจ
I’m using an external 5v power supply.
ถูกใจถูกใจ