Проект доступен для бесплатного скачивания! - Поддержите автора этого проекта, чтобы разблокировать другие платные проекты в будущем: PayPal
Arduino KY-022 IRremote SONY Panasonic NEC RC5 RC6 JVC AIWA RC-T501 WHYNTER

Управление реле с помощью пульта дистанционного управления


Функциональное описание:

  • Дистанционное управление реле и силовыми элементами.
  •       
  • Средой передачи является инфракрасный диод на пульте дистанционного управления (передатчик), а на приемнике - модуль KY-022.
  • Принятый сигнал может быть декодирован, и ему может быть назначено определенное действие, которое контролируется Arduino. Измерьте количество, отправьте его на сервер. Включите выход, освещение, котел, ящик по требованию, выполните действие по времени, последовательность.
  • Использование простое и универсальное. Дальность действия приемника до 10 метров. Может использоваться для различных протоколов: NEC, RC5, RC6, SONY, JVC.
  • Используемое оборудование:

  • Arduino Nano Arduino Nano
  • KY-022 приемникKY-022
  • Дистанционное управление SILVERCREST KH 2159 SILVERCREST KH 2159
  • 8-канальное реле 8-канальное реле
  • эксплуатация:

  • Дистанционное управление огнями
  • Открытие гаража / въездных ворот по запросу
  • Измерение по запросу
  • Беспроводное управление игрушками (техника RC, индивидуальные проекты ...)
  • Исходный код с заголовочным файлом IRremote.h для загрузки сигнала и управления реле 1x:

  • Коды возврата от одной кнопки. С другой стороны, при повторном нажатии он возвращает 820, 20. Когда кнопка удерживается, повторяется тот же код, повторяемый под RC5.
  • /*|----------------------------------------------------------|*/
    /*|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

    Программа для получения протокола удаленного управления

    /*
     * 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
      }
    }