Удаленный просмотр: общение с Arduino через инфракрасный свет
Инфракрасный (ИК) датчик освещенности позволяет использовать Arduino для приема и декодирования сигналов с пульта дистанционного управления телевизором.
Большинство пультов дистанционного управления телевизором используют инфракрасный свет для отправки закодированных сообщений на телевизор. Длина волны этого ИК-излучения обычно составляет от 930 до 950 нм, что делает его невидимым для человека. Когда вы нажимаете одну из кнопок на пульте дистанционного управления телевизором, управление будет модулировать ИК-сигнал с уникальным сигналом с широтно-импульсной модуляцией (PWM). Этот сигнал подбирается ИК-приемником на телевизоре, который демодулирует сигнал и определяет, какая кнопка была нажата. Мы можем сделать что-то подобное с Arduino, если мы оснастим его ИК-приемником.
ИК-приемник имеет три терминала; два предназначены для питания устройства, а оставшийся - для выхода датчика. Приемник демодулирует ИК-сигнал и выводит демодулированный сигнал ШИМ. Выходной терминал подключается к выходу 3 Arduino. Затем Arduino определяет, какая кнопка была нажата, анализируя сигнал ШИМ.
Эксперимент 1
В этом эксперименте мы будем использовать пульт дистанционного управления телевизором для включения и выключения двух светодиодов.
Требуется оборудование
- Пульт дистанционного управления 1x TV
- 1 x ИК-приемник
- 1 x Arduino Mega2560
- 2 x LED
- 2 x 330 Ом резистор
- 1 макет
- провода перемычки
Схема подключения
Подключите компоненты, как показано на рисунке ниже. Инфракрасный приемник подключается к контакту 3. Светодиоды подключаются к контактам 4 и 5 - 330 Ом.

Код для эксперимента 1
Для этого эксперимента мы будем использовать библиотеку IRremote.h Arduino. Перед написанием этого кода мы определили, что выход ИК-приемника будет равен 2049, если была нажата кнопка пульта дистанционного управления 1, и 2050, если была нажата кнопка 2. Нажатие кнопки 1 включает светодиоды. Нажатие кнопки 2 отключает их.
#include "IRremote.h" int rec = 3; // the pin where you connect the output pin of TSOP4838 int led_1 = 4; int led_2 = 5; #define code1 2049 // code received from button 1 #define code2 2050 // code received from button 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(); // Receive the next value } }
Скачать код
Эксперимент 2
В этом эксперименте мы будем включать и выключать различные светодиоды с помощью пульта дистанционного управления телевизором.
Требуется оборудование
- 1 x пульт дистанционного управления телевизором
- 1 x ИК-приемник
- 1 x Arduino Mega2560
- 2 x LED
- 2 x 330 Ом резистор
- 1 макет
- провода перемычки
Схема подключения
Схема подключения точно такая же, как в эксперименте №1
Код для эксперимента №2
В этом эксперименте мы будем использовать кнопку питания пульта дистанционного управления в дополнение к кнопкам 1 и 2. Выход ИК-датчика при нажатии кнопки пульта дистанционного управления 2060. Нажатие кнопки 1 включает светодиод 1, нажатие кнопки 2 включается Светодиод 2, нажатие кнопки питания отключает их.
#include "IRremote.h" int rec = 3; // the pin where you connect the output pin of TSOP4838 int led_1 = 4; int led_2 = 5; #define code1 2049 // code received from button 1 #define code2 2050 // code received from button 2 #define code3 2060 // code received from power button 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);// TURNS LED_1 ON WHEN BUTTON 1 IS PRESSED digitalWrite(led_2, LOW); break; case code2: digitalWrite(led_2, HIGH);// TURNS LED_2 ON WHEN BUTTON 2 IS PRESSED digitalWrite(led_1, LOW); break; case code3: digitalWrite(led_2, LOW);// TURNS BOTH LEDS OFF WHEN POWER BUTTON IS PRESSED digitalWrite(led_1, LOW); break; } Serial.println(val); ir_rec.resume(); // Receive the next value } }
Скачать код
Видео
Попробуйте этот проект сами! Получить спецификацию.