Дистанционное управление: связь с Arduino через инфракрасное излучение
Датчик инфракрасного (ИК, IR) излучения позволяет использовать Arduino для приема и декодирования сигналов с пульта дистанционного управления от телевизора.
Большинство ТВ пультов дистанционного управлению использует инфракрасное излучение, чтобы передавать телевизору закодированные сообщения. Длина волны этого инфракрасного свет равна, как правило, 930 и 950 нм, что делает его невидимым для людей. Когда вы нажимаете одну из кнопок на пульте дистанционного управления телевизором, пульт модулирует ИК сигнал широтно-импульсно модулированным (ШИМ) сигналом, уникальным для этой кнопки. Этот сигнал улавливается ИК приемником в телевизоре, который демодулирует сигнал и определяет, какая кнопка была нажата. Мы можем сделать что-то похожее с Arduino, если снабдим нашу плату ИК приемником.
ИК приемник имеет три вывода: два для питания устройства и один для выходного сигнала датчика. Приемник демодулирует ИК сигнал и выдает демодулированный ШИМ сигнал. Выходной вывод подключен к выводу 3 платы Arduino. Затем Arduino, проанализировав ШИМ сигнал, определяет, какая кнопка была нажата.
Эксперимент 1
В данном эксперименте мы будем использовать пульт дистанционного управления телевизором для включения и выключени двух светодиодов.
Необходимые комплектующие
- 1 x пульт дистанционного управления телевизором;
- 1 x ИК приемник;
- 1 x Arduino Mega 2560;
- 2 x светодиод;
- 2 x резистор 330 Ом;
- 1 x макетная плата;
- перемычки.
Схема соединений
Соедините компоненты, как показано на рисунке ниже. Инфракрасный приемник подключен к выводу 3. Светодиоды подключены к выводам 4 и 5 через токоограничивающие резисторы 330 Ом.
Код для эксперимента 1
Для данного эксперимента мы воспользуемся библиотекой IRemote.h
для Arduino. Перед написанием кода мы определили, что ИК приемник выдает код 2049, если на ПДУ была нажата кнопка 1, и код 2050, если была нажата кнопка 2. Нажатие кнопки 1 включит светодиоды. Нажатие кнопки 2 выключит их.
#include "IRremote.h"
int rec = 3; // вывод, к которому подключен выход TSOP4838
int led_1 = 4;
int led_2 = 5;
#define code1 2049 // код, принятый от кнопки 1
#define code2 2050 // код, принятый от кнопки 2
IRrecv ir_rec(rec);
decode_results result;
void setup()
{
Serial.begin(9600);
ir_rec.enableIRIn();
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
}
void loop()
{
if (ir_rec.decode(&result))
{
unsigned int val = result.value;
switch(val)
{
case code1:
digitalWrite(led_1,HIGH);
digitalWrite(led_2,HIGH);
break;
case code2:
digitalWrite(led_2,LOW);
digitalWrite(led_1,LOW);
break;
}
Serial.println(val);
ir_rec.resume(); // принять следующее значение
}
}
Эксперимент 2
В этом эксперименте мы будем включать и выключать светодиоды по отдельности с помощью ТВ ПДУ.
Необходимые комплектующие
- 1 x пульт дистанционного управления телевизором;
- 1 x ИК приемник;
- 1 x Arduino Mega 2560;
- 2 x светодиод;
- 2 x резистор 330 Ом;
- 1 x макетная плата;
- перемычки.
Схема соединений
Схема соединений точно такая же, как и в эксперименте 1.
Код для эксперимента 2
В этом эксперименте вместе с кнопками 1 и 2 мы будем использовать кнопку включения/выключения на пульте дистанционного управления. Вывод ИК датчика при нажатии кнопки включения соответствует коду 2060. Нажатие кнопки 1 включает светодиод 1, нажатие кнопки 2 включает светодиод 2, нажатие кнопки включения/выключения выключает оба светодиода.
#include "IRremote.h"
int rec = 3; // вывод, к которому подключен выход TSOP4838
int led_1 = 4;
int led_2 = 5;
#define code1 2049 // код, принятый от кнопки 1
#define code2 2050 // код, принятый от кнопки 2
#define code3 2060 // код, принятый от кнопки включения/выключения
IRrecv ir_rec(rec);
decode_results result;
void setup()
{
Serial.begin(9600);
ir_rec.enableIRIn();
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
}
void loop() {
if (ir_rec.decode(&result))
{
unsigned int val = result.value;
switch(val)
{
case code1:
digitalWrite(led_1,HIGH);// включаем светодиод 1, если нажата кнопка 1
digitalWrite(led_2,LOW);
break;
case code2:
digitalWrite(led_2,HIGH);// включаем светодиод 2, если нажата кнопка 2
digitalWrite(led_1,LOW);
break;
case code3:
digitalWrite(led_2,LOW);// выключаем оба светодиода, если нажата кнопка вкл/выкл
digitalWrite(led_1,LOW);
break;
}
Serial.println(val);
ir_rec.resume(); // принять следующее значение
}
}
Видео
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!