Arduino: управление светом с пульта дистанционного управления
В этой статье я расскажу, как можно управлять освещением в комнате с помощью пульта дистанционного управления.
Необходимые компоненты
- Arduino
- Реле на 5 вольт
- IR-приёмник TSOP1xxx
- Любой подходящий пульт ДУ
Сборка
Собираем следующую схему:
Внимание! Если код кнопки будет считываться с ошибками, либо не считываться совсем, необходимо собрать схему с фильтром:
Распиновка IR-приёмника TSOP1xxx:

С реле возможны варианты. Обычное реле без обвязки подключать напрямую к Arduino нельзя! Обязательно необходимо использовать либо транзисторы, либо оптопару. Можно взять и готовую сборку, например такую:

Здесь два реле с обвязкой, можно подключать напрямую к микроконтроллеру (контакты IN1 и IN2). На контакты GND и VCC подаётся питание 5 вольт. Только необходимо иметь ввиду, что у некоторых таких сборок «логика наоборот». То есть при подаче сигнала реле отключается, при снятии — включается.
Также можно использовать и твердотельное реле, что я и сделал. Они хоть и дороже, но обладают рядом преимуществ: абсолютно бесшумная работа, очень малое энергопотребление, можно подключать напрямую к микроконтроллеру, широкий диапазон управляющего напряжения. Вот пример твердотельного реле для нагрузки переменного тока 24-380 В и управляющим напряжением от 3 до 32 вольт:

Пульт можно использовать практически любой. У меня был такой:

Для начала, нам необходимо узнать коды кнопок пульта, на которые мы хотим назначить управление освещением. Для этого заливаем в память Arduino следующий скетч:
/************************************************************* project: IR to Serial author: Gladyshev Dmitriy description: Выводит в консоль код нажатой кнопки пульта IDE: Arduino 1.0.1 *************************************************************/ #include <IRremote.h> int RECV_PIN = 3; //пин подключения IR приёмника IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); pinMode(7,OUTPUT); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); irrecv.resume(); // Receive the next value } }
Теперь при нажатии кнопок на пульте, в консоли должны появляться числа. Это и будет код кнопки. Запишите необходимый код.
Теперь заливаем в Arduino другой скетч:
/************************************************************* project: IR Light v1.0 author: Gladyshev Dmitriy description: Управление освещением с IR ПДУ IDE: 1.0.1 2 марта 2013 *************************************************************/ #include <IRremote.h> int RECV_PIN = 3; //пин подключения IR приёмника int RELAY_PIN = 7; //пин подключения реле IRrecv irrecv(RECV_PIN); decode_results results; bool LampState = false; void setup() { pinMode(RELAY_PIN,OUTPUT); digitalWrite(RELAY_PIN,LOW); irrecv.enableIRIn(); // Включаем ресивер } void loop() { if (irrecv.decode(&results)) { if (results.value == 16713975) //Код кнопки { LampState = !LampState; if (LampState) { digitalWrite(RELAY_PIN,HIGH); } else { digitalWrite(RELAY_PIN,LOW); } } irrecv.resume(); // Получаем следующее значение } }
При необходимости изменяем номера пинов, к которым подключены IR-приёмник и реле:
int RECV_PIN = 3; //пин подключения IR приёмника
int RELAY_PIN = 7; //пин подключения реле
Также заменяем в следующей строчке код кнопки (на тот, который вы записали ранее):
if (results.value == 16713975) //Код кнопки
При включении питания лампа изначально не горит. При каждом нажатии кнопки на пульте будет включаться/выключаться.
Основной скетч
Библиотеки:
IRRemote
Работа проверялась с Arduino IDE v1.0.1
