IR(infrared) Receive dan Send dengan Arduino

Remote TV, Remote Aircond, Remote Kipas, semua remote kebanyakannya berasaskan komponen Infrared LED Transmitter dan Receiver.

Hanya terdapat beberapa jenama kipas sahaja yang menggunakan kaedah Transmisi Radio Frequency, yang mana TIDAK menggunakan Sistem IR LED.

Dalam Tutorial ini, kami akan menerangkan bagaimana MENERIMA serta MENGHANTAR Signal IR Remote menggunakan Arduino/NodeMCU dengan menggunakan Library IR Remote.

LIBRARY UPDATE 2021

Kali terakhir kami menggunakan Library IR Remote adalah pada tahun 2019, sewaktu menghasilkan video di bawah, mengawal Aircond melalui Blynk App.

Library IR Remote pada 2019 adalah tidak SOLID dan tidak STABIL berbanding Library IR Remote 2021. Mendapatkan Data dari Aircond telah melibatkan kerja-kerja pengubahsuaian Library dan sebagainya.

Tahun 2021, Library IR Remote, telah di RE-VAMP oleh komuniti GitHub, menjadikannya lebih padu, tetapi penggunaanya adalah kompleks terutamanya bagi Beginners yang tidak faham maksud-masud syntax coding. Tanpa pemahaman syntax coding dan kaedah penggunaan, Library iniakan menjadi sangat sukar.

Beberapa Project yang dapat di hasilkan menggunakan Library IR Remote 2021 adalah:

  • Custom Remote Control IR
  • Kawal Project anda dengan Remote IR sedia ada

AMARAN!
Project berkaitan Arduino bukan semudah Copy-Paste. Pengguna perlu FAHAM Konsep, Fizik, Mekanisma disebalik setiap applikasi dan sensor. Sila baca SEMUA INFO yang terdapat dalam artikel ini untuk mendapat gambaran dan pemahaman yang jelas.
Pemahaman penting untuk memahami sebarang masalah yang bakal berlaku ketika membuat project yang berkaitan.

SISTEM INFRARED LED TRANSMIT/RECEIVE

Sistem Infrared (IR) Remote

Setiap device Remote Infrared pasti akan mempunyai sekurang-kurangnya 2 Komponen Utama, iaitu MicroController dan juga IR LED, untuk Transmit Data.

IR LED

Infrared (IR) LED merupakan medium utama penghantaran DATA, iaitu melalui Cahaya Infrared yang dihasilkan oleh LED.

WAVELENGTH
Wavelength untuk Infrared LED yang biasa dijual adalah dalam lingkungan 800nM~900nM.

JENIS DAN JARAK TRANSMISI
Jarak penghantaran Data Transmisi untuk sistem Infrared bergantung pada Kepadatan-Cahaya-Infrared dan juga pada Power-Transmisi LED yang biasanya dalam lingkungan 15mW/Sr ~ 25mW/Sr.
mW/Sr adalah Unit Radiant Intensity Power dalam unit milliwatt per Steradian.

LED yang biasa dijual, dan mudah didapati HANYAlah dalam lingkungan 15mW/Sr ~ 25mW/Sr yang boleh memberikan jarak transmisi sehingga 3m~5m.

Terdapat juga jenis LED IR yang mempunyai sehingga 600mW/Sr, tetapi sangat sukar untuk didapati dari penjual/kedai-kedai biasa.

Kaedah mudah untuk meningkatkan Jarak-Transmisi adalah melalui penggunaan Reflector di bahagian belakang LED atau penambahan Kanta untuk memfokuskan Cahaya-Transmisi.
Boleh rujuk artikel berikut untuk mendapat gambaran yang lebih jelas:
https://www.wikihow.com/Improve-Remote-Control-Effectiveness

MENGAPA CAHAYA INFRARED ?
Cahaya Infrared tidak TAMPAK dengan mata kasar. Oleh itu, Transmisi Infrared tidak akan mengganggu penglihatan manusia. Jika ia tampak, maka sekeliling kita dalam rumah contohnya, akan penuh dengan sinar-sinar cahaya yang tidak diingini menyala dan berkelip.

Dalam masa yang sama, LED adalah antara komponen termurah dan termudah untuk di hasilkan. Dengan itu, sistem Remote dapat dihasilkan dengan Kos yang sangat rendah.

MICROCONTROLLER

MENGAPA PERLU MICROCONTROLLER ?
MicroController adalah peranti yang akan mengawal 2 perkara penting:

  • MengSTRUKTURkan DATA yang dihantar
  • Mengawal MODULASI FREQUENCY Transmisi Infrared
Contoh Signal Data Infrared yang lebih perinci

PENGHANTARAN DATA
Jika diperhatikan contoh data ringkas di atas, terdapat 8-bit Signal iaitu 01001101 yang juga mewakili Huruf “M”dalam sistem Data International, ASCII. Bagi mengstrukturkan Signal supaya data 8-bit dapat dihantar dengan tepat, MicroController perlu digunakan.
(American Standard Code for Information Interchange)

ASCII TABLE DATA
Standard Data ASCII adalah standard yang diguna-pakai untuk hampir kesemua device, seperti Internet, USB, WhatsApp, komputer, dan semua device-device intelligent, semua, menggunakan Standard Data ASCII bagi membuat komunikasi.

Terdapat 3 Jenis-Format data yang boleh dihasilkan dari 1 set binary 8-bit.
Jika 01001101 adalah ASCII “M”.
Ia juga boleh bererti:

  • 77 dalam format Decimal
  • 4D dalam format Hexadecimal

Apakah format yang diguna-pakai dalam setiap Jenama brand ?
Jadi, format apa yang digunakan tidak penting. Yang penting kita tahu data yang di hantar, supaya dapat digunakan semula untuk membuat Replikasi Penghantaran.

MODULASI FREQUENCY
Kepentingan Modulasi Frequency adalah untuk membezakan antara Cahaya Infrared yang terdapat pada Cahaya Matahari, Mentol, dan juga perkakas lain.
Dengan adanya modulasi frequency, Signal Infrared dapat di hantar pada frequency tertentu yang berbeza dan unik, supaya tiada gangguan penghantaran data.

Modulasi Frequency yang digunakan oleh Sistem IR Remote adalah pada 38kHz. Bagi menghasilkan modulasi yang laju dan tepat sebegini, penggunaan MicroController amat diperlukan.

INFRARED RECEIVER

Terdapat 2 jenis Infrared Receiver Diode yang biasa digunakan dalam applikasi Infrared Remote:

TSOP38238 dan VS1838B

Nombor-Komponen ini amat penting kerana 2 model ini mempunyai Built-In Frequency Filter 38kHz. Nombor-Komponen yang berlainan akan mempunyai Frequency-Filter yang berlainan.

38kHz merupakan STANDARD yang digunakan oleh hampir semua Device Infrared Remote.

PROTOCOL DATA BERLAINAN BRAND/JENAMA

SETIAP BRAND seperti Sony, Samsung, DEKA, York dan lain-lain, mempunyai PROTOCOL DATA yang berlainan, namun, menggunakan Format-Binary yang sama. Ini penting untuk diketahui sebelum memulakan project Infrared, kerana terdapat SETTING yang terlibat dalam Coding Arduino bagi melaraskan Sistem untuk menerima data yang sesuai.

Dalam masa yang sama, setiap BRAND ini kebanyakannya TIDAK mengkongsikan Struktur Data mereka kepada umum. Kebanyakan struktur data mereka hanya diketahui selepas Kajian-Reverse-Engineering dari para Hobbyist.

Senarai Remote IR yang telah kami Testing
Format Data Remote yang telah kami Test

Jadual Data di atas adalah hasil testing yang kami jalankan menggunakan Library IR Remote.h , yang akan diterangkan selepas ini.

UNKNOWN DATA – TIDAK BERJAYA

Dari jadual, kita dapat lihat ada kemungkinan Protocol yang dikesan dari Library Arduino adalah bersifat UNKNOWN, yang mana bentuk data 8-bit nya tidak dapat dikesan.
Dalam masa yang sama, TIDAK SEMUA Remote dapat dibaca semua data.

Jika anda lihat, terdapat 2 Remote yang kami tidak dapat kesan bentuk datanya berlabel “Tidak Berjaya”. Jika ini berlaku, kita TIDAK DAPAT TRANSMIT-SEMULA signal tersebut.

RAW PULSE

Terdapat juga data yang berada dalam bentuk RAW-PULSE, yang mana, data 8-bitnya dapat dikesan, tetapi struktur data tidak diketahui.
Untuk kes sebegini, datanya dapat di-Hantar Semula.

SIZE DATA DAN MAKLUMATNYA

Bagi setiap Brand, Size Data yang di-Transmit adalah tidak sama, TERUTAMANYA untuk Remote Aircond. Remote Aircond kebiasaannya akan mempunyai size data yang tersangat besar, dari 100bit sehingga 700bit, bergantung pada Jenis/Jenama.

Contoh: Analisa data jenis-jenis remote

Contoh Analisa-Data di atas hanya untuk rujukan sahaja dan bukanlah data yang sebenar.

Jika dilihat dari contoh di atas, Data Remote Aircond York adalah sehingga 139bit, yang mana hampir ke-SEMUA SETTING dan MODE, perlu dihantar dalam Satu-Transmisi.

AMARAN!
Bagi membaca IR Data dari Remote Aircond, Arduino UNO/MEGA/NANO TIDAK BOLEH digunakan kerana mereka mempunyai saiz memory yang kecil.
Di sini, penggunaan Board NodeMCU ESP8266 atau NodeMCU ESP32 PERLU digunakan, kerana mereka mempunyai Saiz Memori yang Besar dan juga mempunyai Processor yang laju ~200MHz berbanding UNO (8MHz/16MHz) .

LIBRARY IR Remote.h

Git Hub > IR Remote > Code > DownloadZIP

Link GitHub adalah berikut untuk Library IR Remote.h.

DOWNLOAD .zip FILE DARI FORUM GITHUB

Download Library, dan Install-kan dalam Arduino IDE sebelum boleh digunakan dalam coding.

SAMBUNGAN WIRING

Jadual Ringkasan Sambungan Wiring

Jadual di atas, adalah ringkasan sambungan Pin yang diambil dari Library IR Remote.h.
Pin Input IR adalah Pin untuk Receiver Diode IR.
Pin Output IR adalah Pin untuk IR LED Emitter.

Kedudukan Pin ini adalah tetap, dan tidak boleh diubah.

Dalam setiap EXAMPLE code yang diberikan dari Library ini, terdapat TAB yang berlabel PinDefinitionsAndMore.h . Di sini, anda boleh lihat list Pin untuk Board-board lain.

SAMBUNGAN WIRING RECEIVER DIODE IR

Komponen dan wiring untuk RECEIVING adalah sangat Straight-Forward. IR Receiver diode, TERUS disambung pada pin-pin di atas tanpa komponen lain.

Anda boleh menggunakan antara 2 model yang dinyatakan di atas, samada TSOP38238 atau VS1838B, kedua-duanya berfungsi sama.

SAMBUNGAN WIRING LED TRANSMITTER IR (Low Power)

Bagi Circuit wiring untuk Transmitter-LED, cuma 2 komponen sahaja diperlukan untuk Circuit Low-Power:

  • IR LED Transmitter
  • Resistor 220Ohm

Kegunaan resistor adalah untuk memastikan LED tidak MENARIK-CURRENT MELEBIHI Current-Rating Pin MicroController, iaitu sebanyak 20-40mA maksimum.

Low Power = Short Distance

SAMBUNGAN WIRING LED TRANSMITTER IR (High Power)

Dalam Circuit High-Power di atas, Transistor 2N2222 digunakan untuk AMPLIFY signal keluaran dari MicroController, seterusnya JARAK transmisi dapat ditingkatkan.

Senarai Komponen:

  • Infrared LED x1
  • Resistor 1 kOhm x1
  • Resistor 30~100 Ohm x1 (30Ohm jika ada)
  • Butang ( jika diperlukan)

BOARD ARDUINO / NODEMCU ?

Jika Aircond terlibat dalam Project anda, maka anda TERPAKSA menggukan samada NodeMCU ESP8266 atau ESP32.
Arduino UNO/NANO tidak dapat membaca ataupun menghantar Signal Aircond.

CODING – TERIMA DATA (Receive) DAN DECODE

Di bawah ini, adalah coding lengkap supaya Arduino dapat membaca Signal IR dari mana-mana remote, kecuali Aircond. Kami akan terangkan seterusnya, bagaimana menerima Signal dari Remote Aircond.

//SENARAI PROTOCOL YANG BOLEH DIGUNA-PAKAI (Disable sahaja jika tidak faham)

//#define DECODE_DENON        // Includes Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC    // the same as DECODE_KASEIKYO
//#define DECODE_LG
//#define DECODE_NEC          // Includes Apple and Onkyo (DEFAULT ENABLED)
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6
//#define DECODE_BOSEWAVE
//#define DECODE_LEGO_PF
//#define DECODE_MAGIQUEST
//#define DECODE_WHYNTER

#define DECODE_DISTANCE     // universal decoder for pulse width or pulse distance protocols
//#define DEBUG // Activate this for lots of lovely debug output from the decoders.
//#define INFO                // (DEFAULT OFF) To see valuable informations from universal decoder for pulse width or pulse distance protocols
//#define DECODE_HASH         // special decoder for all protocols

/********************Struktur Jangan DiUbah******************/
#include <Arduino.h>

//PENTING!
//Define saiz Data Buffer, Terutamanya untuk remote Aircond
#if !defined(RAW_BUFFER_LENGTH)
#define RAW_BUFFER_LENGTH  100  //Size Data Standard kebanyakan IR Remote - 48 bit.(Boleh Gunakan UNO/NANO/MEGA)
//#define RAW_BUFFER_LENGTH  750  //750 bit untuk kebanyakan Aircond Remote (Gunakan ESP8266/ESP32 Sahaja!)
#endif

#include "PinDefinitionsAndMore.h"
#include <IRremote.hpp>
/*********************************************************/

//DECLARE LIBRARY & VARIABLE LAIN DI SINI


void setup() {
    //MULAKAN SERIAL MONITOR
    Serial.begin(9600);
    
    //Enable di bawah untuk lihat version Library (TidakPenting)
    //Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

    //Initialize IR RECEIVER Library. Default Feedback Pin adalah pin LED built-in Arduino
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);

    //NOTA DALAM SERIAL MONITOR
    Serial.println("IR Remote Ready!");
    
}//END VOID SETUP

void loop() {
    
    //Mulakan Data Decode Jika ada data IR diterima
    //Jangan ada sebarang "DELAY" dalam set coding ini
    if (IrReceiver.decode()) {

        //Print Data IR yang diterima
        IrReceiver.printIRResultShort(&Serial);

        //Jika Protocol IR yang diterima bukan antara yang universal
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            //Print info untuk data yang UNKNOWN
            Serial.println("UNKNOWN PROTOCOL:");
            IrReceiver.printIRResultRawFormatted(&Serial, true);
        }
        Serial.println();

        //ENABLE semula penerimaan IR Data. Penting untuk aktifkan semula selepas decode data.
        IrReceiver.resume(); // Enable receiving of the next value

        /*********Boleh Enable di bawah jika mahu membuat sesuatu dengan data yang diterima***********/
        //BUAT SESUATU JIKA MENERIMA DATA "ADDRESS"
        //if(IrReceiver.decodedIRData.address == 0x10) {
           //Serial.println("Address Received");
           //BUAT SESUATU DI SINI


           //KOSONGKAN MAKLUMAT ADDRESS SELEPAS MELAKSANAKAN SESUATU
           //IrReceiver.decodedIRData.address = 0;
        //}
        
        //BUAT SESUATU JIKA MENERIMA DATA "COMMAND"
        //if(IrReceiver.decodedIRData.command == 0x68) {
           //Serial.println("Command Received");
           //BUAT SESUATU DI SINI

           
           //KOSONGKAN MAKLUMAT COMMAND SELEPAS MELAKSANAKAN SESUATU
           //IrReceiver.decodedIRData.command = 0;
        //}
        /*********End Control Sesuatu***********/
           
    }//end IR Decode
    
}//END VOID LOOP

REMOTE AIRCOND

Bagi menerima Signal dari Remote Aircond, terdapat 2 perkara yang perlu dilaksanakan:

  • Perlu gunakan Board NodeMCU ESP8266/ ESP32 dan tidak boleh menggunakan UNO/NANO/MEGA
  • Perlu UBAH satu baris di dalam coding yang di tunjukkan di bawah.
//PENTING!
//Define saiz Data Buffer, Terutamanya untuk remote Aircond
#if !defined(RAW_BUFFER_LENGTH)
//#define RAW_BUFFER_LENGTH  100  //Size Data Standard kebanyakan IR Remote - 48 bit.(Boleh Gunakan UNO/NANO/MEGA)
#define RAW_BUFFER_LENGTH  750  //750 bit untuk kebanyakan Aircond Remote (Gunakan ESP8266/ESP32 Sahaja!)
#endif

Aktifkan Syntax-Coding RAW_BUFFER_LENGTH 750, dan padamkan RAW_BUFFER_LENGTH 100.

ESP8266 dan ESP32 mempunyai kapasiti Internal Memory yang besar yang mampu untuk DECODE Signal Aircond yang besar dan panjang.

REMOTE LAIN-LAIN

Jika menggunakan Board UNO/NANO/MEGA, hanya RAW_BUFFER_LENGTH 100 sahaja dapat digunakan, Signal IR Remote Aircond tidak dapat dibaca.

//PENTING!
//Define saiz Data Buffer, Terutamanya untuk remote Aircond
#if !defined(RAW_BUFFER_LENGTH)
#define RAW_BUFFER_LENGTH  100  //Size Data Standard kebanyakan IR Remote - 48 bit.(Boleh Gunakan UNO/NANO/MEGA)
//#define RAW_BUFFER_LENGTH  750  //750 bit untuk kebanyakan Aircond Remote (Gunakan ESP8266/ESP32 Sahaja!)
#endif

IrReceiver.begin()

Syntax .begin() bagi Receiver dan Transmitter adalah berbeza. Jika perlu menggunakan kedua-dua Receive dan Transmit serentak, pastikan 2 .begin() digunakan, satu untuk Receive, dan satu lagi untuk Transmit.
Rujuk seterusnya untuk coding Transmit.

DECODE PROTOCOL SPECIFIC

//#define DECODE_DENON        // Includes Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC    // the same as DECODE_KASEIKYO
//#define DECODE_LG
//#define DECODE_NEC          // Includes Apple and Onkyo (DEFAULT ENABLED)
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6
//#define DECODE_BOSEWAVE
//#define DECODE_LEGO_PF
//#define DECODE_MAGIQUEST
//#define DECODE_WHYNTER

Jika anda mengetahui jenis protocol remote yang anda gunakan, anda boleh aktifkan mana-mana setting DECODE dibahagian atas coding. Namun, dari Testing kami, coding yang kami sediakan sudah mampu membaca hampir kebanyakan Remote.

CONTOH DAPATAN SERIAL MONITOR

3 Data Penting yang anda perlu perhatikan dari Dapatan Serial Monitor selepas scan IR Remote adalah:

  • Protocol
  • Address
  • Command

3 ini diperlukan untuk membuat Penghantaran Semula.

DATA TV SHARP

DATA ANDROID BOX

DATA KIPAS DEKA

Kipas Deka tidak dapat dikesan jenis Protocolnya, maka Library akan memberikan RAW DATA sebesar 12 Bit dalam bentuk Signal-MicroSeconds, yang boleh dihantar semula dengan fungsi .sendRaw().

DATA AIRCOND YORK

Aircond York dan juga mana-mana Aircond tidak akan dapat dikesan jenis Protocolnya kerana data yang terlalu besar sehingga 100~700 bit. Library akan memberikan RAW DATA dalam Signal Microseconds juga.

LANGKAH PENTING UNTUK AIRCOND

Data Aircond perlukan kesabaran kerana proses menggunakan RAW DATA Aircond dari Library sukar dan rumit. Rujuk gambar di bawah, Data Aircond perlu diubah struktur sebelum dapat digunakan untuk proses penghantaran.

Bagi menggunakan Data Aircond untuk dihantar semula, satu langkah penting yang perlu dilakukan adalah mengikut STEP-STEP berikut:

  • Copy Data Dapatan dari Serial Monitor
  • Pastekan dalam NotePad atau NotePad++
  • Delete dan buang simbol-simbol ‘+’ dan ‘-‘
  • Susun dan rapatkan semua data
  • Pastikan semua data mempunyai perantara komma ‘,’

NOTA PENTING:
Data perlu diubah dengan berhati-hati supaya tidak ada DATA yang TER-delete atau hilang.

CODING – HANTAR DATA TRANSMISI

WIRING DAN KOMPONEN

Dalam contoh coding berikut, Circuit High-Power telah digunakan bersama NodeMCU.

CODING TRANSMIT

/**********Declaration Library IR Remote***************/
#include <Arduino.h>
#include "PinDefinitionsAndMore.h"

//Define yang tidak diperlukan
//#define SEND_PWM_BY_TIMER
//#define USE_NO_SEND_PWM

#include <IRremote.hpp>
/******************************************************/

//DEFINE LIBRARY LAIN DI SINI


//VARIABLE UNTUK PENGUNAAN BUTANG
bool Butang1X = false;
bool Butang2X = false;
bool Butang3X = false;
bool Butang4X = false;


//VARIABLE UNTUK MENYIMPAN RAW DATA, TERUTAMANYA REMOTE AIRCOND
//(Jika ada Hex Data, ini tidak diperlukan)

//Contoh Data untuk Remote Aircond 139bit - BUTANG ON
//Nota Kaki: Signal Aircond yang panjang hanya boleh dihantar dengan ESP8266/ESP32
//Tidak boleh menggunakan Board UNO/NANO
const uint16_t irSignal1[] = {3100,3050,3100,4400,650,1600,600,1600,600,550,600,550,550,
1600,600,550,600,1600,600,550,550,550,550,1650,600,1650,600,1600,600,550,550,1650,600,
1600,600,550,600,500,600,550,550,550,550,550,550,550,600,500,600,550,550,550,550,550,
550,550,600,550,550,550,550,550,550,550,550,550,600,550,550,550,550,1650,600,550,550,
1600,600,550,600,500,600,550,550,1650,600,500,600,550,550,1600,600,550,600,550,550,550,
550,550,550,550,600,500,600,550,550,550,550,550,550,550,600,500,600,550,550,550,550,550,
550,550,600,1600,600,550,550,550,600,500,600,550,550,550,550,550,550,550,600,550,550,550,
550,550,550,550,550,550,600,550,550,550,550,550,550,550,550,550,600,550,550,550,550,550,
550,550,600,500,600,550,550,550,550,550,550,550,600,550,550,550,550,550,550,550,550,550,
600,550,550,550,550,550,550,550,550,550,600,550,550,550,550,550,550,550,600,500,600,550,
550,1600,600,550,600,1600,600,1650,600,1600,600,550,550,1650,600,550,550,1650,600,1600,
600,550,550,1650,600,1600,600,1650,600,1650,600,500,600,1600,600,550,550,550,600,550,550,
550,550,550,550,550,600,500,600,550,550,550,550,550,550,1650,600,1600,600,1650,600,1600,
600,550,600,1600,600,550,550,550,600};

//Contoh Data untuk Remote Aircond 139bit - BUTANG OFF
//Nota Kaki: Signal Aircond yang panjang hanya boleh dihantar dengan ESP8266/ESP32
//Tidak boleh menggunakan Board UNO/NANO
const uint16_t irSignal2[] = {3100,3050,3100,4400,650,1600,600,1600,600,550,600,550,550,
1600,600,550,600,1600,600,550,550,550,600,1600,600,1650,600,1600,600,550,550,1650,600,
1600,600,550,600,500,600,550,550,550,550,550,550,550,600,500,600,550,550,550,550,550,550,
550,600,550,550,550,550,550,550,550,550,550,600,550,550,550,550,550,550,550,600,1600,600,
550,550,550,550,550,600,1600,600,550,550,550,600,1600,600,550,550,550,600,500,600,550,
550,550,550,550,550,550,600,550,550,550,550,550,550,550,550,550,600,550,550,550,550,550,
550,1650,600,550,550,550,550,550,550,550,600,550,550,550,550,550,550,550,600,500,600,550,
550,550,550,550,550,550,600,500,600,550,550,550,550,550,550,550,600,550,550,550,550,550,
550,550,550,550,600,550,550,550,550,550,550,550,600,500,600,550,550,550,550,550,550,550,
600,500,600,550,550,550,550,550,550,550,600,550,550,550,550,550,550,550,550,550,600,1600,
600,550,550,1650,600,1600,600,550,600,550,550,1600,600,550,600,1600,600,1650,600,550,550,
1600,600,1650,600,1600,600,1650,600,550,550,1650,600,550,550,550,550,550,550,550,550,550,
600,550,550,550,550,550,550,550,600,500,600,1600,600,1650,600,1600,600,1650,600,550,550,
1650,600,500,600,550,550};


void setup() {
    //INITIALIZE LED UNTUK TUNJUKKAN PENGHANTARAN DATA SEDANG BERLAKU
    pinMode(LED_BUILTIN, OUTPUT);
    
    //INITIALIZE SERIAL MONITOR
    Serial.begin(9600);

    //4 BUTANG DIGUNAKAN UNTUK MENGHANTAR DATA
    pinMode(D7, INPUT_PULLUP);  //Butang1 untuk Data1
    pinMode(D3, INPUT_PULLUP);  //Butang2 untuk Data2
    pinMode(D2, INPUT_PULLUP); //Butang3 untuk Data3
    pinMode(D1, INPUT_PULLUP); //Butang4 untuk Data4
    /******Anda boleh menggunakan butang yang banyak untuk fungsi yang banyak***********/
    /******Mengikut kapasiti MicroController yang andagunakan***************************/

    //Initialize IR SENDER Library. 
    IrSender.begin(); 

    //Sekadar nota dalam Serial Monitor
    Serial.print("Ready menghantar Signal!");
    
}//END VOID SETUP

void loop() {
    /****Penggunaan dengan Butang Pertama****/
    //Contoh menghantar Data Aircond 139 bit - ON AIRCOND
    if(digitalRead(D7) == LOW && Butang1X == false){
      Butang1X = true;

      //Data Aircond 139bit di irSignal1
      IrSender.sendRaw(irSignal1, sizeof(irSignal1) / sizeof(irSignal1[0]), NEC_KHZ);
      //Sekadar Nota dalam Serial Monitor 
      Serial.println("Sent");
    }
    //If Statement untuk pastikan Fungsi Butang berlaku SEKALI sahaja
    if(digitalRead(D7) == HIGH && Butang1X == true){
      Butang1X = false;
    }
    
    /****Penggunaan dengan Butang Kedua****/
    //Contoh menghantar Data Aircond 139 bit - ON AIRCOND
    if(digitalRead(D3) == LOW && Butang2X == false){
      Butang2X = true;
      //Data Aircond 139bit di irSignal2
      IrSender.sendRaw(irSignal2, sizeof(irSignal2) / sizeof(irSignal2[0]), NEC_KHZ);
      //Sekadar Nota dalam Serial Monitor
      Serial.println("Sent");
    }
    //If Statement untuk pastikan Fungsi Butang berlaku SEKALI sahaja
    if(digitalRead(D3) == HIGH && Butang2X == true){
      Butang2X = false;
    }
    
    /****Penggunaan dengan Butang Ketiga****/
    if(digitalRead(D2) == LOW && Butang3X == false){
      Butang3X = true;
      //Data Remote TV Sharp (<Address>,<Command>,<Ulangan>)
      IrSender.sendSharp(0x10,0x68, 1);
      //Sekadar Nota dalam Serial Monitor
      Serial.println("Sent");
    }
    //If Statement untuk pastikan Fungsi Butang berlaku SEKALI sahaja
    if(digitalRead(D2) == HIGH && Butang3X == true){
      Butang3X = false;
    }
    
    /****Penggunaan dengan Butang Keempat****/
    if(digitalRead(D1) == LOW && Butang4X == false){
      Butang4X = true;
      //Data Remote Android Box (<Address>,<Command>,<Ulangan>)
      IrSender.sendNEC(0x1,0x11,1);
      //Sekadar Nota dalam Serial Monitor
      Serial.println("Sent");
    }
    //If Statement untuk pastikan Fungsi Butang berlaku SEKALI sahaja
    if(digitalRead(D1) == HIGH && Butang4X == true){
      Butang4X = false;
    }
    /***************/
    
}//END VOID LOOP

Syntax IrSender.send<PROTOCOL>

Perhatikan coding di atas, bagi setiap Data yang DAPAT dikesan PROTOCOL-nya, kaedah SEND perlu menggunakan format SEND masing-masing.

  • IrSender.sendSharp(<Address>,<Command>,<ulangan>)
  • IrSender.sendSony(<Address>,<Command>,<ulangan>)
  • IrSender.sendNEC(<Address>,<Command>,<ulangan>)
  • IrSender.sendRC6(<Address>,<Command>,<ulangan>)
  • IrSender.sendSamsung(<Address>,<Command>,<ulangan>)

3 data yang perlu diletakkan adalah:

  • Address
  • Command
  • Ulangan : berapa bilangan transmisi ( 1 mencukupi, 2 atau 3 boleh diulang untuk ketepatan)

Syntax IrSender.sendRAW

IrSender.sendRAW perlu digunakan untuk data-data UNKNOWN seperti Aircond. Data perlu disusun dahulu dan diubah strukturnya seperti yang diterangkan sebelum ini.

NOTA PENTING:
Bagi Transmisi Data Aircond, ia hanya dapat di hantar dengan Board ESP8266 atau ESP32. Arduino UNO/NANO tidak mempunyai kapasiti untuk menghantar 139 bit data Aircond yang besar.

Selamat Mencuba!

PERSEDIAAN UNTUK KE CODING ARDUINO

Jika anda menghadapi kesukaran dalam menggunakan atau memahamkan Arduino dan Coding, kami sarankan anda ikuti E-Learning E-Kursus Pemantapan Asas Arduino MatGyver ini.

Sebelum membuat sebarang Project Arduino, kita perlu tahu dahulu Fundamental Hardware dan juga Fundamental C++ Coding supaya kita dapat kenal-pasti sebarang masalah atau error-error basic yang bakal terjadi ketika membuat project ini.

Jika anda mempunyai sebarang PERTANYAAN berkenaan artikel ini, anda boleh maklumkan dalam bahagian COMMENT.

Selamat Membuat Project Electric-Drum!


Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

5 thoughts on “IR(infrared) Receive dan Send dengan Arduino

    1. konsepnya sama tuan. scan dan rekod signal mana2 remote IR sekali pun. Selepas tu memang boleh transmit semula. Kebanyakan IR remote boleh direkod dan scan signalnya menggunakan teknik yang sama digunakan dalam artikel ini.

      Like

Tinggalkan komen

This site uses Akismet to reduce spam. Learn how your comment data is processed.