Удаленный просмотр: связь с ардуино через инфракрасный свет

Удаленный просмотр: связь с ардуино через инфракрасный свет
Удаленный просмотр: связь с ардуино через инфракрасный свет
Anonim

Удаленный просмотр: общение с 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 Ом.

Image
Image

Код для эксперимента 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 } }

Скачать код

Видео

Попробуйте этот проект сами! Получить спецификацию.