DIY ควบคุมแอร์ผ่าน WIFI

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

ในบล๊อกนี้ก็จะมาเล่าสิ่งที่ผมได้ทำใช้เอง นั่นก็คือโซลูชั่นสำหรับการควบคุมแอร์ผ่าน wifi – แต่ว่าบล๊อกนี้ผมจะไม่ได้ตั้งใจให้มันเป็น Tutorial ที่ทุกคนจะทำตามได้เลย เนื่องจากว่าแอร์ของแต่ละบ้านนั้นคนละยี่ห้อกันและ Setup ของแต่ละคนก็ไม่เหมือนกัน(ผมใช้ HomeBridge) ใครสนใจจะทำตามอาจจะต้องมีพื้นฐานระดับนึง แต่ยังไง ผมจะอธิบายให้เป็นขั้นตอนที่สุดครับ

ก่อนอื่นมาดูวิดีโอกันก่อน

 

Prototype ก่อนเป็นอันดับแรก

สิ่งที่ยากที่สุดของการควบคุมแอร์คือการสั่งงานแอร์ และเรามีวิธีเดียวที่จะสั่งงานแอร์ได้คือผ่านทาง Infrared เริ่มด้วยการต่อหลอด IR เข้ากับ ESP8266 (NodeMCU) และผมได้ต่อตัวรับ IR ไว้ด้วย

photo6174604148083894335

สิ่งที่ผมได้กลับมาจากการทดสอบด้วย 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 อันใหม่ที่จะติดตั้งที่ผนัง และใช้แทนรีโมตอันเดิม มีส่วนประกอบคร่าวๆ ประมาณนี้

  1. ESP 8266 NodeMCU
  2. หน้าจอ OLED 256×64 SSD1332
  3. LDR – ผมอยากให้จอลดแสงหรือดับเมื่อปิดไฟนอน เนื่องจากจอมันสว่างทำให้รำคาญตาเวลานอน
  4. ปุ่ม Push button
  5. IR LED และ LED สีฟ้า (เพื่อให้เห็นว่า IR กำลังทำงาน)
  6. NPN Transistor BC338 – สำหรับเพิ่มกำลังส่งให้  IR ยิงติดได้ง่ายขึ้น
smartac_schematic2_schem
วงจร Smart AC Remote

ผมเริ่มออกแบบตัว 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 – จำลองเป็นพัดลม(สั่งงานได้แค่เปิดปิด) แต่สั่งงานได้จากทุกที่

 

เมื่อติดตั้งกับผนังแล้วก็จะได้ออกมาแบบนี้

 

img_0130

 

ในบล๊อกนี้ก็ขอจบลงเพียงเท่านี้ ใครอยากสอบถามเพิ่มเติมก็ Comment ไว้ หรือติดต่อผ่านทาง Mail ได้เลยครับ
ขอบคุณทุกคนที่สนใจเข้ามาอ่านครับ

 

ลิงค์ Github
https://github.com/maxmacstn/MQTT-AC-Controller

ลิงค์ไฟล์ CAD

https://a360.co/2D1U4RG

 

8 thoughts on “DIY ควบคุมแอร์ผ่าน WIFI

Add yours

ใส่ความเห็น

Create a website or blog at WordPress.com

Up ↑