Самодельный приемник инфракрасного сигнала на базе Arduino
Принцип работы инфракрасного пульта дистанционного управления
Пульт для телевизора имеет инфракрасный излучатель, который посылает направленный сигнал, улавливаемый приемником телевизора. Как известно, инфракрасное излучение – часть спектра солнечного света, так почему же ваш приемник реагирует на пульт для телевизора, и полностью игнорирует даже жаркое летнее солнышко?
Секрет в том, что сигнал, который испускает пульт для телевизора, кодирован. То есть, на самом деле такой инфракрасный сигнал – это определенная последовательность, которая может быть однозначно понята телевизором, а иначе – как бы он понимал, что нужно делать в ответ на нажатие определенных кнопок: переключать канал, делать звук тише или менять яркость экрана?
Производители пульт для телевизора каждой модели снабжают своим собственным набором сигналов. Это позволяет людям держать в доме несколько телевизоров в разных комнатах и при этом не иметь проблем с переключением каналов и громкостью конкретного телевизора.
Передатчик инфракрасного сигнала. Задача контроллера пульта - опрос кнопок клавиатуры, кодирование информации, модулирование опорной частоты и выдача сигнала на излучатель.

Приемник инфракрасного сигнала имеет в своем составе собственно приемник инфракрасного излучения и микроконтроллер. Микроконтроллер раскодирует принимаемый сигнал и выполняет требуемые действия.
Для демонстрации передачи и приема информации по инфракрасному каналу в рамках данной работы, нами изготовлена самодельный приемник инфракрасного сигнала на базе Arduino. Опишем его.
Оборудование: плата Arduino UNO, инфракрасный приемник, четыре светодиода с резисторами, инфракрасный пульт дистанционного управления

Порядок выполнение работы:
1. Разработать схему для демонстрации принципа взаимодействия инфракрасного пульта дистанционного управления и приемника сигнала

2. Собрать схему

3. Разработать программу для микроконтроллера по расшифровке сигнала от инфракрасного пульта дистанционного управления
Исходный текс программы для расшифровки сигнала:
#include "IRremote.h"
IRrecv irrecv(6);
decode_results results;
void setup() {
// put your setup code here, to run once:
pinMode(6,INPUT); // вход ИК-приёмника
pinMode(2,OUTPUT); // выход первого светодиода
pinMode(3,OUTPUT); // выход второго светодиода
pinMode(4,OUTPUT); // выход третьего светодиода
pinMode(5,OUTPUT); // выход четвёртого светодиода
Serial.begin (9600);
irrecv.enableIRIn(); // запускаем прием
}
void loop() {
// put your main code here, to run repeatedly:
if ( irrecv.decode( &results )) { // если данные пришли
Serial.println( results.value, HEX ); // печатаем данные
// проверяем, нажата ли кнопка 1
if(results.value == 0xFF30CF) {
digitalWrite(2,!digitalRead(2)); // инвертируем состояние первого светодиода
}
// проверяем, нажата ли кнопка 2
if(results.value == 0xFF18E7) {
digitalWrite(3,!digitalRead(3)); // инвертируем состояние второго светодиода
}
// проверяем, нажата ли кнопка 3
if(results.value == 0xFF7A85) {
digitalWrite(4,!digitalRead(4)); // инвертируем состояние третьего светодиода
}
// проверяем, нажата ли кнопка 4
if(results.value == 0xFF10EF) {
digitalWrite(5,!digitalRead(5)); // инвертируем состояние червёртого светодиода
}
// проверяем, нажата ли кнопка CH-
if(results.value == 0xFFA25D) {
// гасим все светодиоды
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,0);
}
// проверяем, нажата ли кнопка CH+
if(results.value == 0xFFE21D) {
// зажигаем все светодиоды
digitalWrite(2,1);
digitalWrite(3,1);
digitalWrite(4,1);
digitalWrite(5,1);
}
// проверяем, нажата ли кнопка CH
if(results.value == 0xFF629D) {
// инвертируем все светодиоды
digitalWrite(2,!digitalRead(2));
digitalWrite(3,!digitalRead(3));
digitalWrite(4,!digitalRead(4));
digitalWrite(5,!digitalRead(5));
}
irrecv.resume(); // принимаем следующую команду
}
}
Таблица 1: Коды команд инфракрасного пульта дистанционного управления
|
Кнопки на пульте |
Коды команд |
Кнопки на пульте |
Коды команд |
|
1 |
FF30CF |
100+ |
FF9867 |
|
2 |
FF18E7 |
200+ |
FFB04F |
|
3 |
FF7A85 |
ch- |
FFA25D |
|
4 |
FF10EF |
ch |
FF629D |
|
5 |
FF38CF |
ch+ |
FFE21D |
|
6 |
FF5AA5 |
<< |
FF22DD |
|
7 |
FF42BD |
>> |
FF02FD |
|
8 |
FF4AB5 |
- |
FFE01F |
|
9 |
FF52AD |
+ |
FFA857 |
|
0 |
FF6897 |
EQ |
FF206FF |
|
>// |
FFC23D |
|
|


Объяснение: Демонстрация передачи информации инфракрасным способом осуществляется с помощью изготовленного нами приемника инфракрасного сигнала на базе Arduino. Так как сигнал, который испускает пульт кодирован (это определенная последовательность цифр и букв), то микроконтроллер, входящий в состав приемника осуществляет его раскодирование (таблица 1).
Для наглядной демонстрации взаимодействия пульта и приемника сигнала мы использовали светодиоды. Визуализация нажатия кнопок пульта дистанционного управления осуществляется свечением данных светодиодов. Пульт позволяет независимо включать и отключать каждый из них. Также возможно включение и отключение всех светодиодов и инвертирования их состояния.
Аналогичная работа микроконтроллера реализуется и в приемнике инфракрасного сигнала в обычном телевизоре. При нажатии кнопок пульта дистанционного управления, в приемнике сигнала телевизора декодируются сигнал и телевизор выполняет соответствующую команду пользователя.