Projekt je dostupný zadarmo na stiahnutie! - Podporte autora tohto projektu pre odomknutie ďalších momentálne platených projektov v budúcnosti: PayPal
Arduino KY-022 IRremote SONY Panasonic NEC RC5 RC6 JVC AIWA RC-T501 WHYNTER

Ovládanie relé diaľkovým ovládačom


Popis funkčnosti:

  • Ovládanie relé a výkonových prvkov prostredníctvom diaľkového ovládača.
  • Prenosovým médiom je infračervená dióda na diaľkovom ovládači (vysielači) a na prijímači - module KY-022.
  • Prijatý signál je možné dekódovať a priradiť mu špecifickú akciu, ktorú riadi Arduino. Odmeraj veličinu, odošli ju na server. Zapni výstup, osvetlenie, kotol, zásuvku na vyžiadanie, vykonaj časovú akciu, sekvenciu.
  • Použitie je jednoduché a univerzálne. Dosah prijímača je až 10 metrov. Možné použiť pre rôzne protokoly: NEC, RC5, RC6, SONY, JVC.
  • Použitý hardvér:

  • Arduino Nano Arduino Nano
  • KY-022 prijímačKY-022
  • Diaľkový ovládač SILVERCREST KH 2159 SILVERCREST KH 2159
  • 8-kanálové relé 8-kanálové relé
  • Využitie:

  • Vzdialené ovládanie svetiel
  • Otvorenie garážovej/vstupnej brány na vyžiadanie
  • Odmeranie veličiny na vyžiadanie
  • Bezdrôtové ovládanie hračiek (RC technika, vlastné projekty...)
  • Zdrojový kód s hlavičkovým súborom IRremote.h pre načítanie signálu a ovládanie 1x relé:

  • Návratové kódy sú z jedného tlačidla (šípka hore). Striedavo pri opakovaných stlačeniach vracia 820, 20. Pri držaní tlačidla sa opakuje rovnaký kód, testované s diaľkovým ovládačom SILVERCREST KH 2159
  • /*|----------------------------------------------------------|*/
    /*|SKETCH PRE NACITANIE KODOV Z DIALKOVYCH OVLADACOV         |*/
    /*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
    /*|EMAIL: martinius96@gmail.com                              |*/
    /*|DOSKA:  Arduino Uno, Mega, Nano, NEFUNGUJE NA ESP8266     |*/
    /*|WEB: https://arduino.php5.sk                              |*/
    /*|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);
      Serial.begin(115200);
      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
    }
    
          
    IR ovládanie relé - schéma zapojenia

    Program pre získanie protokolu diaľkového ovládača

    /*
     * IRremote: IRrecvDump - dump details of IR codes with IRrecv
     * An IR detector/demodulator must be connected to the input RECV_PIN.
     * Version 0.1 July, 2009
     * Copyright 2009 Ken Shirriff
     * http://arcfn.com
     * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
     * LG added by Darryl Smith (based on the JVC protocol)
     */
    
    #include <IRremote.h>
    
    int RECV_PIN = 8;
    
    IRrecv irrecv(RECV_PIN);
    
    decode_results results;
    
    void setup()
    {
      Serial.begin(115200);
      irrecv.enableIRIn(); // Start the receiver
    }
    
    
    void dump(decode_results *results) {
      // Dumps out the decode_results structure.
      // Call this after IRrecv::decode()
      int count = results->rawlen;
      if (results->decode_type == UNKNOWN) {
        Serial.print("Unknown encoding: ");
      }
      else if (results->decode_type == NEC) {
        Serial.print("Decoded NEC: ");
    
      }
      else if (results->decode_type == SONY) {
        Serial.print("Decoded SONY: ");
      }
      else if (results->decode_type == RC5) {
        Serial.print("Decoded RC5: ");
      }
      else if (results->decode_type == RC6) {
        Serial.print("Decoded RC6: ");
      }
      else if (results->decode_type == PANASONIC) {
        Serial.print("Decoded PANASONIC - Address: ");
        Serial.print(results->address, HEX);
        Serial.print(" Value: ");
      }
      else if (results->decode_type == LG) {
        Serial.print("Decoded LG: ");
      }
      else if (results->decode_type == JVC) {
        Serial.print("Decoded JVC: ");
      }
      else if (results->decode_type == AIWA_RC_T501) {
        Serial.print("Decoded AIWA RC T501: ");
      }
      else if (results->decode_type == WHYNTER) {
        Serial.print("Decoded Whynter: ");
      }
      Serial.print(results->value, HEX);
      Serial.print(" (");
      Serial.print(results->bits, DEC);
      Serial.println(" bits)");
      Serial.print("Raw (");
      Serial.print(count, DEC);
      Serial.print("): ");
    
      for (int i = 1; i < count; i++) {
        if (i & 1) {
          Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
        }
        else {
          Serial.write('-');
          Serial.print((unsigned long) results->rawbuf[i]*USECPERTICK, DEC);
        }
        Serial.print(" ");
      }
      Serial.println();
    }
    
    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        dump(&results);
        irrecv.resume(); // Receive the next value
      }
    }