GrabDuck

Arduino: управление светом с пульта дистанционного управления — Student-proger.ru

:

В этой статье я расскажу, как можно управлять освещением в комнате с помощью пульта дистанционного управления.

Необходимые компоненты

  • Arduino
  • Реле на 5 вольт
  • IR-приёмник TSOP1xxx
  • Любой подходящий пульт ДУ

Сборка
Собираем следующую схему:
Схема соединения для управления светом

Внимание! Если код кнопки будет считываться с ошибками, либо не считываться совсем, необходимо собрать схему с фильтром:
Схема соединения для управления светом2

Распиновка IR-приёмника TSOP1xxx:

Распиновка TSOP1xxx

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

Сдвоенное реле с обвязкой

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

Твёрдотельное реле FOTEK SSR-25 DA
Пульт можно использовать практически любой. У меня был такой:
IR ПДУ

Для начала, нам необходимо узнать коды кнопок пульта, на которые мы хотим назначить управление освещением. Для этого заливаем в память Arduino следующий скетч:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*************************************************************
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
  }
}

/************************************************************* 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 другой скетч:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*************************************************************
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(); // Получаем следующее значение
  }
}

/************************************************************* 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-приёмник и реле:

11
12
int RECV_PIN = 3; //пин подключения IR приёмника
int RELAY_PIN = 7; //пин подключения реле

int RECV_PIN = 3; //пин подключения IR приёмника int RELAY_PIN = 7; //пин подключения реле

Также заменяем в следующей строчке код кнопки (на тот, который вы записали ранее):

29
if (results.value == 16713975) //Код кнопки

if (results.value == 16713975) //Код кнопки

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

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

Похожие записи: