Код для поиска

Управляйте лампой переменного тока с помощью любого инфракрасного пульта дистанционного управления, используя Arduino и реле.

Управляйте лампой переменного тока с помощью любого инфракрасного пульта дистанционного управления, используя Arduino и реле.

В этом руководстве мы научимся использовать инфракрасный пульт дистанционного управления для управления светодиодной лампой через Arduino и модуль реле. Этот проект включает декодирование сигналов от пульта и использование их для управления реле, которое, в свою очередь, будет включать и выключать светодиодную лампу. К концу этого руководства вы сможете использовать любой инфракрасный пульт для управления своими светильниками.

Мы будем использовать инфракрасный приемник для захвата сигналов от пульта, а Arduino будет интерпретировать эти сигналы для выполнения конкретных действий. Предоставленный код позволит вам выбрать тип пульта (черный или белый) и использовать ли вам печатную плату или голый модуль для приемника. Обязательно посмотрите связанное видео для получения дополнительных деталей и разъяснений (в видео на 0:00).

Аппаратное обеспечение объяснено

Для этого проекта основными компонентами являются плата Arduino, инфракрасный приемный модуль и реле. Инфракрасный приемник отвечает за прием сигналов от пульта дистанционного управления и передачу их на Arduino. Реле действует как переключатель для управления AC-лампой, позволяя ей включаться и выключаться в зависимости от полученных сигналов.

5V реле модуля с высоким уровнем триггера
5В модуль реле с высоким уровнем сигнала

Инфракрасный приемник обычно работает на частоте 38 кГц и может улавливать сигналы на расстоянии примерно от 10 до 15 метров. Как только Arduino получает сигнал, он декодирует его и использует реле для управления подачей питания на лампочку.

Инструкции по проводке

IR_remote_AC_relay_wiring

Начните подключение, соединив модуль инфракрасного приемника с Arduino. Контакт VCC приемника соединяется с контактом 5V на Arduino, а контакт заземления соединяется с контактом GND. Контакт сигнала от инфракрасного приемника необходимо подключить к цифровому контакту.11на Arduino.

Затем подключите модуль реле. Управляющий контакт реле должен быть подключен к цифровому пину.2на Arduino. Также подключите контакты VCC и GND реле к 5V и GND Arduino соответственно. Наконец, подключите AC лампочку к реле в соответствии со спецификациями реле, чтобы обеспечить безопасную работу.

Примеры кода и руководство по использованию

На фазе настройки программы мы инициализируем последовательное соединение и настраиваем вывод реле. ИдентификаторRECV_PINустановлено на11, к которому подключен сигнальный контакт инфракрасного приемника. Это позволяет нам получать данные от пульта дистанционного управления.

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(RELAY_PIN, OUTPUT); // define a pin for relay as OUTPUT
  digitalWrite(RELAY_PIN, HIGH); // set relay to OFF at the beginning
}

В функции цикла мы постоянно проверяем поступающие сигналы с пульта. Когда сигнал обнаружен, значение декодируется, и выполняется соответствующее действие в зависимости от нажатой клавиши.

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // Print the received value
    robojaxValidateCode(results.value); // Validate the code
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

ТотrobojaxValidateCodeФункция проверяет полученный код на соответствие известным значениям для пульта. В зависимости от нажатой клавиши она выполнит соответствующее действие с использованием реле.

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // Check White remote codes
    for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
      if (whiteRemote[i] == cd) {
        Serial.print("Key pressed: ");
        Serial.println(whiteRemoteKey[i]);
        relayAction(whiteRemoteKey[i]); // Take action
      }
    }
  }
}

В этой функции код проверяет, соответствует ли нажатая клавиша значениям определенного массива. Если совпадение найдено, он вызываетrelayActionфункция для включения или выключения реле в зависимости от нажатой клавиши.

Демонстрация / Что ожидать

После завершения соединений и загрузки кода вы можете использовать свой инфракрасный пульт для управления лампочкой AC. Нажимайте назначенные кнопки на пульте, и реле должно соответственно включать или выключать лампочку. Убедитесь, что протестировали каждую кнопку, чтобы увидеть ее реакцию (в видео на 5:00).

Временные метки видео

  • 00:00 Начало
  • 00:49 Введение
  • 02:00 Проведение проводки и подключение
  • 05:27 Объяснение кода Arduino
  • 09:51 Демонстрация управления светодиодной лампой переменного тока с помощью разных пультов управления
  • 13:13 Использование пульта от телевизора для управления лампой кондиционера

Изображения

5V LOW-LEVEL trigger relay
5V LOW-LEVEL trigger relay
5V HIGH-level trigger relay module
5V HIGH-level trigger relay module
remote
remote
IR_remote_AC_relay_wiring
IR_remote_AC_relay_wiring
138-Source for controlling an AC load using an Arduino
Язык: C++
/*
 * Original library from - http://arcfn.com
 * 
 * This Arduino code decodes any remote code and then you can control an AC load using a relay
 * sold on eBay for Arduino. 
 * You have to select the type of your remote as Black or White in the code below
 * and also select your receiver 1838 as either a PCB or bare module. See video for details
 * 
 * You have to watch this video: https://youtu.be/muAkBQb24NI
 * before proceeding with this code. 
 * 
 * Modified/Written by Ahmad Shamshiri
 * on July 31, 2018 at 20:33 in Ajax, Ontario, Canada
 * for Robojax.com
 * Watch video instructions for this code: https://youtu.be/j5kb0WBpD30
 * Get other Arduino codes from Robojax.com
 * 
 */

#include <IRremote.h>

int RECV_PIN = 11;
const char type ='W';// W for white, B for black. Must keep single quotes like 'B' or 'W'
const boolean PCB = 1;// if receiver is PCB set to 1, if not set to 0. See video for details
boolean displayCode = true;// to display remote code. if not, set to false

//***** Relay settings begins
const int RELAY_PIN = 2;// 
const String ON="3";// turn relay ON with + key on remote
const String OFF="1";// turn relay OFF with - key on remote
//**** Relay settings ends

IRrecv irrecv(RECV_PIN);


// this is array holding codes for White Remote when used with PCB version of receiver
unsigned int whiteRemotePCB[] ={
            0xE318261B, // CH-
            0x511DBB,   // CH
            0xEE886D7F,  // CH+

            0x52A3D41F, // |<<
            0xD7E84B1B, // >>|
            0x20FE4DBB, // >||          

            0xF076C13B, // -
            0xA3C8EDDB, // +
            0x12CEA6E6, // EQ

            0xC101E57B, // 0
            0x97483BFB, // 100+
            0xF0C41643, // 200+

            0x9716BE3F, // 1
            0x3D9AE3F7, // 2
            0x6182021B, // 3           

            0x8C22657B, // 4 
            0x488F3CBB, // 5
            0x449E79F,  // 6

            0x32C6FDF7, // 7
            0x1BC0157B, // 8
            0x3EC3FC1B  // 9                          
            };

// this is array holding codes for White Remote when used with non-PCB version of receiver            
unsigned int whiteRemote[] ={
            0xFFA25D, // CH-
            0xFF629D,   // CH
            0xFFE21D,  // CH+

            0xFF22DD, // |<<
            0xFF02FD, // >>|
            0xFFC23D, // >||          

            0xFFE01F, // -
            0xFFA857, // +
            0xFF906F, // EQ

            0xFF6897, // 0
            0xFF9867, // 100+
            0xFFB04F, // 200+

            0xFF30CF, // 1
            0xFF18E7, // 2
            0xFF7A85, // 3           

            0xFF10EF, // 4 
            0xFF38C7, // 5
            0xFF5AA5,  // 6

            0xFF42BD, // 7
            0xFF4AB5, // 8
            0xFF52AD  // 9                          
            };
// key lables of white remote
 String whiteRemoteKey[] ={
            "CH-",
            "CH",
            "CH+",

            "|<<",
            ">>|",
            ">||",

            "-",
            "+",
            "EQ",

            "0",
            "100+",
            "200+",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9"
            };

// this is array holding codes for Black Remote when used with non-PCB version of receiver
 unsigned int blackRemote[] ={
            0xFF629D, // ^
            0xFF22DD,   // <
            0xFF02FD,  // OK
            0xFFC23D, // >
            0xFFA857, // v

            0xFF6897, // 1
            0xFF9867, // 2
            0xF0C41643, // 3           

            0xFF30CF, // 4 
            0xFF18E7, // 5
            0xFF7A85,  // 6

            0xFF10EF, // 7
            0xFF38C7, // 8
            0xFF5AA5,  // 9 

            0xFF42BD, // *
            0xFF4AB5, // 0
            0xFF52AD  // #                                      
            };

// this is array holding codes for Black Remote when used with PCB version of receiver
 unsigned int blackRemotePCB[] ={
            0x511DBB, // ^
            0x52A3D41F,   // <
            0xD7E84B1B,  // OK
            0x20FE4DBB, // >
            0xA3C8EDDB, // v


            0xC101E57B, // 1
            0x97483BFB, // 2
            0xF0C41643, // 3           

            0x9716BE3F, // 4 
            0x3D9AE3F7, // 5
            0x6182021B,  // 6

            0x8C22657B, // 7
            0x488F3CBB, // 8
            0x449E79F,  // 9 

            0x32C6FDF7, // *
            0x1BC0157B, // 0
            0x3EC3FC1B  // #                                      
            };

// Black remote key names
 String blackRemoteKey[] ={
            "^",
            "<",
            "OK",
            ">",
            "v",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9",
            
            "*",
            "0",
            "#"
            };

decode_results results;


void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Robojax IR Decode");
  Serial.println("Control Relay with Remote");
  irrecv.enableIRIn(); // Start the receiver

  pinMode(RELAY_PIN,OUTPUT);// define a pin for relay as OUTPUT
  digitalWrite(RELAY_PIN, HIGH);// set relay to OFF at the begining
}

void loop() {

  if (irrecv.decode(&results)) {
    if(displayCode)Serial.println(results.value, HEX);
    robojaxValidateCode(results.value);// used the "robojaxValidateCode" bellow
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

/*
 * function: robojaxValidateCode
 * validates the remote code and prints the correct key name
 * cd is code passed from the loop
 * Written by A. S. for Robojax
 */
void robojaxValidateCode(int cd)
{

  // Robojax IR Remote decoder
  int found=0;

 if(type =='W' && !PCB)
 {
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=0 then check White remote code
      for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
      {
        if(whiteRemote[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action
          found=1;
        }// if matched
      }// for
 }else if(type =='W' && PCB){
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=1 then check White remote code
      for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
      {
        if(whiteRemotePCB[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action 
          found=1;
        }// if matched
      }// for  
 }else if(type =='B' && PCB){
    // Robojax IR Black Remote decoder
       // if type is set to 'B' (black remote) and PCB=1 then check Black remote code
       for(int i=0; i< sizeof(blackRemotePCB)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemotePCB[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
         relayAction(blackRemoteKey[i]);// take action     
          found=1;
        }// if matched
      }// for   
 }else{

      // if type is set to 'B' (black remote) and PCB =0 then check Black remote code
       for(int i=0; i< sizeof(blackRemote)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemote[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
          relayAction(blackRemoteKey[i]);// take action          
    
          found=1;
        }// if matched
      }// for  
 }// else
  if(!found){
    if(cd !=0xFFFFFFFF)
      {
    Serial.println("Key unknown");
      }
  }// found
}// robojaxValidateCode end

/*
 * 
 * relayAction()
 * receives string "value" as input and based on the settings, 
 * turns relay pin HIGH or LOW
 */
void relayAction(String value)
{
  // Robojax IR Relay control
   if(value == ON)
   {
    digitalWrite(RELAY_PIN, LOW);// Turn relay ON
    Serial.println("Relay Turned ON");
   }

   if(value == OFF)
   {
    digitalWrite(RELAY_PIN, HIGH);// Turn relay OFF
    Serial.println("Relay Turned OFF");
   }
}//relayAction end

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Нет доступных файлов.