Управление четырьмя лампами на 220В пультом от телевизора (Arduino UNO)
Схема устройства для дистанционного управления люстрой с четырьмя лампами при помощи пульта дистанционного управления на ИК-лучах. Устройство выполнено на основе микроконтроллерной платы ARDUINO UNO и инфракрасного пульта типа RC-5 (для старого телевизора «Горизонт»).
Такой пульт был выбран потому, что протокол RC-5 применялся в телевизорах выпускавшихся лет 15-25 назад, и в современной аппаратуре используется крайне редко.
Это обеспечивает бесконфликтность между данной системой и имеющейся аппаратурой. К тому же, пульты RC-5 и сейчас имеются в продаже, и стоят очень недорого.
Использование недорогой готовой платы ARDUINO UNO интересно тем, что это готовый модуль. - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и стабилизатор напряжения питания.
Принципиальная схема
Принципиальная схема переключателя показана на рис.1.
Сигналы для управления лампами люстры для управления которыми снимаются с цифровых портов D4, D5, D6, D7, и поступают на транзисторные ключи на VT1-VT4, в коллекторных цепях которых включены электромагнитные реле К1-К4, управляющие питанием ламп люстры. Порт D2, используется для приема кодов команд от интегрального фотоприемника F1.
Рис. 1. Схема управления четырьмя лампами на 220В пультом от телевизора ( Arduino UNO).
Система питания построена по бестрансформаторной схеме, широко распространенной в различных электронных выключателях и переключателях промышленного производства.
Напряжение от электросети поступает на выпрямитель на диодах VD8-VD11 через реактивное сопротивление конденсатора С2. Его сопротивление вместе со стабилитронами VD5-VD6 работает как параметрический стабилизатор, понижающий напряжение до 12V. Резистор R8 служит для разрядки конденсатора С2 после того, как схему отключат от электросети.
Резистор R9 скорее работает как своеобразный предохранитель (он перегорит в случае возникновения неисправности). В данной схеме три стабилитрона 1N4742A, включенных параллельно. Это требуется для повышения надежности и исключения перегрева стабилитрона. Резисторы R5-R7 служат для уравнивания тока через стабилитроны.
Переключатель работает следующим образом. Для того чтобы включить всю люстру или выключить её из любого состояния используется кнопка «Выкл.» пульта, которая обычно служит для выключения телевизора. Цифровые кнопки от «1» до «4» служат для индивидуального включения и выключения каждой группы ламп люстры.
Например, если нужно включить только лампу Н1, -нажимаем кнопку «1» пульта. Если её хотим выключить, - еще раз нажимаем кнопку «1» пульта Точно так же и с другими лампами. То есть, можем включить или выключить любые лампы.
А вот кнопкой «Выкл» мы можем включить все лампы сразу, либо выключить любое их количество, которое было включено.
Программа
Программа показана в таблице 1.
Рис. 2. Исходный код программы для Arduino UNO.
Таблица 1.
/* управление люстрой на 4 лампы */
#include
IRrecv irrecv(2); // фотоприемник на порту D2
decode_results results;
void setup() {
pinMode(4, OUTPUT); // задание порта D4 как выходного
pinMode(5, OUTPUT); // задание порта D5 как выходного
pinMode(6, OUTPUT); // задание порта D6 как выходного pin
Mode(7, OUTPUT); // задание порта D7 как выходного
irrecv.enableIRIn(); // запуск приема команд
}
void loop() {
if (irrecv.decode(&results)) {
switch( results.value )
{ case 0x530DB67C:
digitalWrite( 4, HIGH); // кнопка вкл - единица на D4
digitalWrite( 5, HIGH); // кнопка вкл - единица на D5
digitalWrite( 6, HIGH); // кнопка вкл - единица на D6
digitalWrite( 7, HIGH); // кнопка вкл - единица на D7
break;
case 0x17B4A228:
digitalWrite( 4, LOW); // кнопка вык - ноль на D4
digitalWrite( 5, LOW); // кнопка вык - ноль на D5
digitalWrite( б, LOW); // кнопка вык - ноль на D6
digitalWrite( 7, LOW); // кнопка вык - ноль на D7
break;
case 0x56EF334B:
digitalWrite( 4, HIGH); // кнопка 1 - единица на порту D4
break;
case 0xC2D091BF:
digitalWrite( 4, LOW); // кнопка 1 - ноль на порту D4
break;
case 0x17313DCE:
digitalWrite( 5, HIGH); // кнопка 2 - единица на порту D5
break;
case 0x528A5222:
digitalWrite( 5, LOW); // кнопка 2 - ноль на порту D5
break;
case 0xE4400B14:
digitalWrite( 6, HIGH); // кнопка 3 - единица на порту D6
break;
case 0x50216988:
digitalWrite( б, LOW); // кнопка 3 - ноль на порту D6 break;
case 0x321579D4:
digitalWrite( 7, HIGH); // кнопка 4 - единица на порту D7
break;
case 0x6D6E8E28:
digitalWrite( 7, LOW); // кнопка 4 - ноль на порту D7
break;
}
irrecv.resume() ;
}
Данная программа требует загрузки библиотеки IRremote.h которая нужна для распознавания сигнала пульта ДУ. Эта библиотека есть в стандартном наборе программного обеспечения для ARDUINO, у меня версия Arduino 1.6.11.
Далее идет назначение портов.
В строке:
IRrecv irrecv(2);
входным назначен порт D2. На него подается сигнал с выхода интегрального фотоприемника.
А в строках:
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
выходными назначены порты D4. D5, D6, D7. Но. порты можно выбрать и другие, -как вам захочется.
Особенность пульта RC-5 в том, что его каждой команде соответствует два кода. Один при первом нажатии кнопки, и второй при втором её же нажатии. И так, если одну кнопку все время нажимать, то код будет, то один то другой. Поэтому, одну и ту же кнопку можно использовать для подачи двух разных, даже противоположных по смыслу команд.
Это здесь и используется, чтобы одной и той же кнопкой можно было включать и выключать, - если выключено она включит, если включено, она выключит. Но это имеет и негативный аспект, - иногда для выполнения команды требуется двухкратное нажатие кнопки.
Например, если с первого нажатия кнопки «1» лампа Н1 не включилась, нужно нажать кнопку «1» еще раз.В программе после «case Ох» записаны коды команд, которые формируется при нажатии соответствующей кнопки пульта RC-5 В строках:
case 0x530DB67C:
digitalWrite( 4, HIGH);
digitalWrite( 5, HIGH);
digitalWrite( 6, HIGH);
digitalWrite( 7, HIGH);
break;
задано включение всех ламп при первом нажатии кнопки «Выкл.».
В строках:
case 0х17В4А228:
digitalWrite( 4, LOW);
digitalWrite( 5, LOW);
digitalWrite( 6, LOW);
digitalWrite( 7, LOW);
break;
задано выключение всех ламп, которые были включены до того, при втором нажатии кнопки «Выкл.». Таким образом, код первого нажатия кнопки «Выкл» 530DB67C, а код второго нажатия этой же кнопки 17В4А228.
Аналогично и с остальными кнопками, используемыми в данной системе, - каждая кнопка из числа «1», «2», «3», «4» управляет своей лампой, при каждом нажатии меняя команду на противоположную, например, в строках:
case 0x56EF334B:
digitalWrite( 4, HIGH);
break;
case 0xl7313DCE:
digitalWrite( 4, LOW);
break;
задается управление кнопкой «1» первой лампой. При первом нажатии кнопки «1» она дает код 56EF334B, который приводит к включению лампы Н1, а при втором нажатии кнопка «1» дает код 17313DCE, который приводит к выключению Ш.
Устройство может работать только с пультом RC-5. Реле WJ118-1C можно заменить любыми реле с обмотками на 12V и контактами на 220V (230V), при условии что их обмотки сопротивлением не менее 200 Ом.
Если Вы еще не знакомы с ARDUINO UNO, почитайте статью Л.1, там написано все подробно на примере переключателя для ёлочной гирлянды. Описывается установка программы Arduino 1.6.11, и дана пошаговая инструкция как работать с ней.
Каравкин В. РК-11-19.
Литература: 1. Каравкин В. Ёлочная гирлянда на ARDUINO как средство от боязни микроконтроллеров, РК-11-2016.