Управляйте лампой переменного тока с помощью любого инфракрасного пульта дистанционного управления, используя Arduino и реле.
В этом руководстве мы научимся использовать инфракрасный пульт дистанционного управления для управления светодиодной лампой через Arduino и модуль реле. Этот проект включает декодирование сигналов от пульта и использование их для управления реле, которое, в свою очередь, будет включать и выключать светодиодную лампу. К концу этого руководства вы сможете использовать любой инфракрасный пульт для управления своими светильниками.
Мы будем использовать инфракрасный приемник для захвата сигналов от пульта, а Arduino будет интерпретировать эти сигналы для выполнения конкретных действий. Предоставленный код позволит вам выбрать тип пульта (черный или белый) и использовать ли вам печатную плату или голый модуль для приемника. Обязательно посмотрите связанное видео для получения дополнительных деталей и разъяснений (в видео на 0:00).
Аппаратное обеспечение объяснено
Для этого проекта основными компонентами являются плата Arduino, инфракрасный приемный модуль и реле. Инфракрасный приемник отвечает за прием сигналов от пульта дистанционного управления и передачу их на Arduino. Реле действует как переключатель для управления AC-лампой, позволяя ей включаться и выключаться в зависимости от полученных сигналов.
Инфракрасный приемник обычно работает на частоте 38 кГц и может улавливать сигналы на расстоянии примерно от 10 до 15 метров. Как только Arduino получает сигнал, он декодирует его и использует реле для управления подачей питания на лампочку.
Инструкции по проводке

Начните подключение, соединив модуль инфракрасного приемника с 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 Использование пульта от телевизора для управления лампой кондиционера
/*
* 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
Вещи, которые могут вам понадобиться
-
Амазонка
-
eBay
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Нет доступных файлов.