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

Предупреждение!
Автор не несёт ответственности за возможную порчу оборудования. Всё, что вы делаете — вы делаете на свой страх и риск!