Project is available for free download!
Arduino IRemote NEC, RC5, RC6, SONY, JVC

Relay control by remote control

Functional Description:

  • Relay and power control via remote control.
  • The transmission medium is an infrared diode on the remote control (transmitter) and on the receiver - module KY-022.
  • The received signal can be decoded and assigned a specific action that is controlled by Arduino. Measure the quantity, send it to the server. Turn on output, lighting, boiler, drawer on demand, perform time action, sequence.
  • Use is simple and versatile. The receiver range is up to 10 meters. Can be used for various protocols: NEC, RC5, RC6, SONY, JVC.
  • Used hardware:

  • Arduino Nano Arduino Nano
  • KY-022 receiverKY-022
  • 8-channel relay 8-channel relay
  • Exploitation:

  • Remote light control
  • Open Garage / Entrance Gate on Demand
  • On Demand Measurement
  • Wireless toy controls (RC technique, custom projects ...)

    Source code with header file IRremote.h for signal loading and 1x relay control:

  • Return codes are from one button. Returns 820, 20 alternately for repeated presses. The same code repeated under RC5 is repeated when you hold down the button.
  • /*|----------------------------------------------------------|*/
    /*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
    /*|EMAIL:                              |*/
    /*|DOSKA:  Arduino Uno, Mega, Nano, NEFUNGUJE NA ESP8266     |*/
    /*|WEB:                              |*/
    /*|LICENCIA: MIT                                             |*/
    #include <IRremote.h> //kniznica pre senzor KY-022
    int led = 13;
    int ledstate = LOW;
    int RECV_PIN = 8;
    IRrecv irrecv(RECV_PIN); //KY-022 na RECV VYVODE
    decode_results results;
    void setup() {
      pinMode(led, OUTPUT);
      irrecv.enableIRIn(); //prijimaj signaly
    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println("Zaznamenany kod: ");
        Serial.println(results.value, HEX);
        String abc = String(results.value, HEX);
        if ((abc == "820") || (abc == "20")) { //hodnoty tlacidla hore na ovladaci
          ledstate = !ledstate;
          digitalWrite(led, ledstate);
        irrecv.resume(); // Povol nacitavanie dalsich hodnot
      delay (100); // kratky delay, odrusenie citania chyb