Трехрелейная плата для управления нагрузкой с помощью ИК-пульта
В этой статье мастер-самодельщик расскажет нам, как он изготовил плату на базе Arduino, которая может управляться с помощью любого универсального ИК-пульта дистанционного управления. Плата имеет 3 реле и может использоваться для управления различной нагрузкой (вентиляторы, освещение и т.д.) мощностью менее 1000 Вт.
Инструменты и материалы:
-Паяльные принадлежности;
-Мультиметр;
-Провода;
-Релейный модуль — 3 шт;
-Транзистор BC547 — 3 шт;
-Оптопара PC817 — 3 шт;
-Atmega328p или Arduino;
-Кристалл 16 МГц;
-Резистор 1 кОм — 9 шт;
-Резистор 10К;
-Конденсатор 22 пФ — 2 шт;
-Конденсатор 100 нФ;
-Винтовые клеммы — 3шт;
-5 мм красный светодиод — 3шт;
-Резистор 100 Ом;
-Печатная плата;
-Батарея 9В;
-Диод 1N4007 — 3 шт;
-ИК-приемник TSOP 1738;
Шаг первый: декодирование сигнал ИК-пульта
Каждая цифра / кнопка ИК-пульта дистанционного управления имеет идентификационный номер. Он выдается микроконтроллером внутри пульта дистанционного управления и передается через ИК-светодиод. Эти данные представлены в виде чередований 0 и 1. Чтобы понять какой код «передается» каждой кнопкой, нужно захватить их и декодировать. Сделать это можно с помощью несложной схемы на базе Ардуино.
Подробней как декодировать любой ИК-пульт с помощью Arduino можно ознакомится по этой ссылке.
Шаг второй: схема и плата
Согласно принципиальной схеме мастер производит монтаж платы. Сначала устанавливает все реле и соответствующие им винтовые клеммы. Затем устанавливает все остальные компоненты: транзистор, оптрон, резисторы, диоды и светодиоды. Используя ту же идею, можно увеличить количество каналов с одного до трех и даже больше. Максимальное количество каналов ретрансляции, которые могут поддерживаться этим методом, — 12.
После блока управления схемой устанавливает микроконтроллер и схему питания. Для этого мастер использует популярный микроконтроллер Arduino Atmega328p- 8bit. Этого более чем достаточно для проекта такого типа, Atmega328p работает на кристалле 16 МГц и также имеет функцию EEPROM (память). EEPROM помогает запоминать последнее состояние реле при отключении или отключении питания.
Наконец, подключает ИК-приемник TSOP-1738 и для считывания значения шестнадцатеричных данных с помощью цифрового входного вывода Arduino. Код точно включает / выключает соответствующее реле, как указано в коде.
Батареи на 9В достаточно для правильного питания схемы. Микроконтроллер и реле работают от 5В, поэтому при использовании 9-вольтовой батареи необходимо использовать регулятор 5В (7805).
Плату можно сделать самостоятельно или заказать ее изготовление промышленным способом. Файлы для изготовления платы можно скачать здесь
.
Шаг третий: работа устройства
Каждая кнопка на ИК-пульте имеет разные шестнадцатеричные числа (код). Если нужно включить / выключить устройство, понадобятся две кнопки ИК-пульта. Одна для включения, другая для выключения того же устройства.
Для включения/выключения 3-х канального реле нужны шесть кнопок. Кроме того, если нужно включить / выключить все устройства одновременно, понадобятся еще две кнопки. Всего на ИК-пульте должно быть 8 кнопок.
При нажатии кнопки на пульте ИК-данные будут захвачены на стороне приемника, и микроконтроллер декодирует данные, немедленно включив / выключив соответствующий контакт.
Этот код управляет только цифровыми выводами Arduino. Для включения / выключения любой нагрузки нельзя напрямую установить реле на какой-либо микроконтроллер без схемы управления и переключения. Вот почему здесь используется комбинация оптопары и транзистора NPN в качестве переключателя для правильного управления реле. Соответствующую библиотека ИК можно загрузить здесь
.
Шаг четвертый: код
Соответствующую библиотека ИК можно загрузить здесь
Этот код написан для 4-х канального реле, но он отлично работает и на этой плате 3-канального реле.
Код можно скачать ниже.
Показать / Скрыть текст/* hello guys this code is designed by Sagar saini, youtube channel- sagar networks
* follow us on hackster using this link
* If the code not work, try to update IR libraries or download new and compatible library from my website.
* link: https://drive.google.com/file/d/14ooV9b64H_579zfkCLHSwh-WmZjaBadH/view?usp=sharing this code is 4 channel relay/ but work fine on this 3 channel relay pcb.
* To decode the data of any universal ir remote follow this link:
https://www.hackster.io/sainisagar7294/arduino-based-ir-remote-decoder-ac67c4
* I am always available on Instagram so please check out me there: saini_sagar_7294
*/
#include <IRremote.h>
const int RECV_PIN=8;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define Relay1 12 // Load1 Pin Out
#define Relay2 11 // Load2 Pin Out
#define Relay3 10 // Load3 Pin Out
#define Relay4 9 // Load4 Pin Out
int load1, load2, load3, load4, power;
void setup()
{
Serial.begin(9600);
pinMode(Relay1, OUTPUT); // declare as output for Load1 Pin Relay1
pinMode(Relay2, OUTPUT); // declare as output for Load2 Pin Relay2
pinMode(Relay3, OUTPUT); // declare as output for Load3 Pin Relay3
pinMode(Relay4, OUTPUT); // declare as output for Load4 Pin Relay4
digitalWrite(Relay1, 0); // Turn Off Load1
digitalWrite(Relay2, 1); // Turn Off Load2
digitalWrite(Relay3, 1); // Turn Off Load3
digitalWrite(Relay4, 1); // Turn Off Load4
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
}
void loop() {
if (IrReceiver.decode())
{
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
if(IrReceiver.decodedIRData.decodedRawData==0xED127F80){ // For Load1 ON ( change the hex value ED127F80 to your remote value)
load1 = 0;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xE51A7F80){ // For Load1 Off
load1 = 1;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xFE017F80){ // For Load2 On
load2 = 0;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xFD027F80){ // For Load2 Off
load2 = 1;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xFB047F80){ // For Load3 On
load3 = 0;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xFA057F80){ // For Load3 Off
load3 = 1;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xF8077F80){ // For Load4 On
load4 = 0;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xF7087F80){ // For Load4 Off
load4 = 1;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xE11E7F80){ // For Load4 Off
load1=0;
load2=0;
load3=0;
load4=0;
}
else if(IrReceiver.decodedIRData.decodedRawData==0xFC037F80){ // For Load4 Off
load1=1;
load2=1;
load3=1;
load4=1;
}
irrecv.resume(); // Receive the next value
delay(100);
}
if(power==1){
digitalWrite(Relay1, 1); // Turn Off Load1
digitalWrite(Relay2, 1); // Turn Off Load2
digitalWrite(Relay3, 1); // Turn Off Load3
digitalWrite(Relay4, 1); // Turn Off Load4
}else{
digitalWrite(Relay1, load1);
digitalWrite(Relay2, load2);
digitalWrite(Relay3, load3);
digitalWrite(Relay4, load4);
}
delay(500);
}
Все готово.
В будущих обновлениях мастер планирует сделать эту схему более компактной и увеличить скорость микроконтроллера — просто заменив ее версией STM. Так же планируется функция EEPROM в коде и возможность подключения Bluetooth или Wi-Fi.
Источник