Kebetulan di rumah ada AC 1 pk (Air Conditioner/pendingin ruangan) merk Samsung, jadi sekalian dijadikan objek penelitian :). Objektif dari eksperimen berikut adalah untuk mengendalikan perangkat AC (khususnya merk Samsung) secara ‘soft control‘ menggunakan remote control infrared (infra merah) buatan sendiri. Yang dimaksud dengan dengan ‘soft control’ adalah pengendalian secara ‘smooth‘ melalui controller internal AC melalui media infrared sehingga tidak langsung memutus tegangan dan arus kompresor AC. Sebagaimana kita tahu kalau kita langsung melakukan on/off tegangan langsung ke perangkat AC maka akan menyebabkan kompresor cepat rusak. Pun kalau misalnya sudah di on kan dengan menyalakan tegangannya, AC juga tidak langsung nyala bukan? masih tetap butuh remote control bawaannya untuk menyalakan dan mengatur suhunya. Nah, obyektif dari eksperimen kali ini adalah menggantikan peran remote control dengan NodeMCU (dan bisa juga Arduino atau Raspberry Pi) plus led infrared sehingga dapat kita sesuai keinginan misalnya remote control jarak jauh menggunakan internet melalui protokol IoT (Internet of Things)
Untuk tutorial kali ini, saya akan membahas mengenai bagaimana mengendalikan AC merk Samsung (merk lain seperti Panasonic, Daikin, Toshiba dll menyesuaikan ya, beda protokol soalnya) dengan NodeMCU (arduino sama aja sih prinsipnya). Anggap aja kita belum tahu protokol infrared yang digunakan untuk mengendalikan AC Samsung ini. Langkah pertama adalah ‘menyadap’ protokol infrared dari remote control bawaan AC Samsung. Caranya sangat mudah, yang Anda butuhkan hanya sebuah LED infrared receiver yang banyak tersedia di pasaran. Salah satunya adalah tipe TL1838/VS1838B yang harganya sekitar seribuan aja. Kemudian buat rangkaian seperti gambar berikut:
Setelah rangkaian di atas jadi, isi NodeMCU dengan program di bawah ini untuk menyadap informasi infrared dengan menghadapkan remote control bawaan AC ke led infrared receiver VS1838B
#include <Arduino.h> #include <IRrecv.h> #include <IRremoteESP8266.h> #include <IRac.h> #include <IRtext.h> #include <IRutils.h> const uint16_t kRecvPin = D2; const uint32_t kBaudRate = 115200; const uint16_t kCaptureBufferSize = 1024; #if DECODE_AC const uint8_t kTimeout = 50; #else // DECODE_AC const uint8_t kTimeout = 15; #endif // DECODE_AC const uint16_t kMinUnknownSize = 12; IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true); decode_results results; void setup() { #if defined(ESP8266) Serial.begin(kBaudRate, SERIAL_8N1, SERIAL_TX_ONLY); #else // ESP8266 Serial.begin(kBaudRate, SERIAL_8N1); #endif // ESP8266 while (!Serial) delay(50); Serial.printf("\n" D_STR_IRRECVDUMP_STARTUP "\n", kRecvPin); #if DECODE_HASH irrecv.setUnknownThreshold(kMinUnknownSize); #endif // DECODE_HASH irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { uint32_t now = millis(); Serial.printf(D_STR_TIMESTAMP " : %06u.%03u\n", now / 1000, now % 1000); if (results.overflow) Serial.printf(D_WARN_BUFFERFULL "\n", kCaptureBufferSize); Serial.println(D_STR_LIBRARY " : v" _IRREMOTEESP8266_VERSION_ "\n"); Serial.print(resultToHumanReadableBasic(&results)); String description = IRAcUtils::resultAcToString(&results); if (description.length()) Serial.println(D_STR_MESGDESC ": " + description); yield(); . #if LEGACY_TIMING_INFO // Output legacy RAW timing info of the result. Serial.println(resultToTimingInfo(&results)); yield(); #endif Serial.println(resultToSourceCode(&results)); Serial.println(); yield(); } }
Perhatikan bahwa agar sketch di atas dapat berjalan, Anda harus menginstal library ‘IRremoteESP8266’ terlebih dahulu (bisa melalui Library Manager atau bisa download di https://github.com/crankyoldgit/IRremoteESP8266)
Hadapkan remote bawaan AC ke led VS1838B dan tekan tombol-tombol yang ada di remote bawaan dan amati hasilnya di jendela Serial Monitor Arduino IDE
Timestamp : 000039.972 Library : v2.7.1 Protocol : TCL112AC Code : 0x23CB2601002403033800000080F7 (112 Bits) Mesg Desc.: Power: On, Mode: 3 (Cool), Temp: 28C, Fan: 0 (Auto), Econo: Off, Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): On uint16_t rawData[227] = {3052, 1612, 494, 1112, 500, 1082, 520, 318, 474, 370, 524, 318, 502, 1080, 472, 372, 524, 316, 504, 1082, 494, 1112, 526, 316, 502, 1082, 494, 348, 524, 316, 502, 1082, 492, 1114, 524, 318, 502, 1082, 470, 1136, 500, 318, 524, 316, 496, 1112, 500, 342, 498, 316, 526, 1082, 524, 316, 504, 316, 526, 316, 494, 350, 524, 316, 502, 318, 524, 316, 496, 346, 472, 372, 502, 316, 528, 314, 498, 348, 472, 372, 500, 316, 526, 316, 524, 318, 474, 370, 500, 1084, 520, 318, 476, 370, 510, 1072, 524, 316, 472, 372, 470, 1114, 522, 1082, 470, 372, 526, 316, 504, 314, 526, 316, 474, 372, 522, 318, 502, 1082, 492, 1112, 524, 320, 500, 314, 522, 320, 472, 370, 502, 316, 526, 316, 524, 320, 474, 372, 522, 322, 500, 1082, 470, 1136, 502, 1082, 492, 348, 472, 370, 526, 316, 502, 316, 526, 316, 474, 370, 524, 316, 502, 316, 524, 316, 474, 372, 524, 316, 502, 316, 526, 314, 474, 372, 524, 318, 502, 316, 524, 318, 474, 372, 472, 372, 500, 344, 500, 314, 496, 348, 472, 370, 500, 316, 526, 316, 472, 372, 472, 370, 502, 318, 524, 316, 498, 346, 472, 372, 500, 318, 526, 314, 496, 1112, 524, 1060, 524, 1080, 470, 1138, 498, 316, 522, 1084, 524, 1060, 524, 1080, 472, 1138, 498}; // TCL112AC uint8_t state[14] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x03, 0x38, 0x00, 0x00, 0x00, 0x80, 0xF7};
Ternyata eh ternyata, protokol yang digunakan adalah protokol yang sama untuk AC merk TCL (protokol TCL112AC). Saya tidak mau menjelek-jelekkan Samsung mengapa tidak pakai protokol sendiri padahal sudah punya nama besar, barangkali memang sudah ada kerjasama bisnis dengan TCL.
Ok, karena sudah kita dapatkan protokolnya kita kemudian dapat memanfaatkannya untuk mengendalikan AC Samsung dengan mengeluarkan protokol tersebut dengan LED infrared Transmiter (ingat, kali ini led nya tipe transmitter ya, kali percobaan sebelumnya untuk menyadap yang kita gunakan adalah tipe receiver). Ada dua cara untuk mengeluarkan protokol kendali ke AC target:
- Dengan menyadap protokol kendali masing-masing tombol remote bawaan. Dengan cara ini kita harus mencoba satu-satu tombol pada remote bawaan, menyimpannya di memori, kemudian mengeluarkannya secara utuh (apa adanya) ke AC target melalui led transmitter infra merah.
- Menggunakan library yang sudah jadi setelah kita mengetahui tipe protokolnya (untuk case di atas, setelah kita tes salah satu tombol, kita jadi tahu bahwa protokol kendali infrared AC merk Samsung adalah protokol TLC)
Cara pertama efektif untuk tipe-tipe AC yang tidak ada library-nya, sehingga merk apapun AC-nya kita masih akan mampu mengendalikannya. Tapi jika AC target menggunakan protokol umum sebaiknya kita menggunakan cara kedua, yakni menggunakan library yang sudah ada (lebih stabil dan teruji)
Source Code Pengendalian AC dengan Infrared
Baiklah, langkah terakhir dari percobaan ini adalah melakukan pengendalian AC Samsung membuat rangkaian LED transmitter dan NodeMCU seperti gambar di bawah dan memprogramnya agar dapat mengeluarkan protokol kendali.
Perhatikan bahwa pada gambar skematik di atas kita menggunakan transistor BC547 sebagai penguat arus LED infrared TX agar dapat menyuplai arus yang cukup untuk menyalakan led dan melakukan proses switching sesuai protokol data kendali yang dikeluarkan (pinout NodeMCU berbasis mikrokontroller ESP12E dengan rate arus max 12mA, tidak cukup untuk menghidupkan LED infrared)
Untuk source code pengendalian AC dengan infrared dapat dilihat sebagai berikut. Berhubung sudah jelas bahwa AC Samsung di rumah saya menggunakan protokol TLC maka saya menggunakan function-function yang sudah pakem di library-nya.
#include <Arduino.h> #include <IRremoteESP8266.h> #include <IRsend.h> #include <ir_Tcl.h> const uint16_t kIrLed = D5; IRTcl112Ac ac(kIrLed); void setup() { ac.begin(); Serial.begin(115200); pinMode (D7, INPUT); pinMode (D6, INPUT); } void loop() { byte tombolon=digitalRead(D7); byte tomboloff=digitalRead(D6); if (tombolon==0) ac_on(); if (tomboloff==0) ac_off(); delay(1000); //debouncing } void ac_on() { ac.on(); ac.setFan(2); ac.setMode(3); //3=cool ac.setTemp(27); //ac.setSwingVertical(false); ac.setSwingHorizontal(false); Serial.println(ac.toString()); // Now send the IR signal. #if SEND_TCL112AC ac.send(); #endif // SEND_DAIKIN } void ac_off () { ac.off(); Serial.println(ac.toString()); // Now send the IR signal. #if SEND_TCL112AC ac.send(); #endif // SEND_DAIKIN }
Tinggal tekan saja tombol On/off di rangkaian maka hasilnya akan sama ketika ketika kita menekan tombol on/off di remote bawaan. Gimana, sudah terbuka wawasannya? sudah muncul ide-ide baru? 🙂 Silahkan dikembangkan lebih lanjut ya, misalkan bagaimana mengatur suhunya, swing AC nya, melakukan penjdawalan on/off AC, dll. Untuk tutorial selanjutnya akan saya bahas bagaimana melakukan kendali AC jarak jauh menggunakan IoT (tidak lagi menggunakan tombol fisik seperti contoh di atas), jadi Anda bisa melakukan kendali AC dari mana aja dan secara terpusat dari server. Nantikan ya …..
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Pak saya coba error di line 38 error: ‘amp’ was not declared in this scope; kenapa ya? Saya sudah install library IRremoteESP8266 via library manager
amp dihapus aja, itu kode html di web
Kalo buat ac panasonic gimana bang?
bisa di-scan dulu mas