Самодельный приемник инфракрасного сигнала на базе 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).

Для наглядной демонстрации взаимодействия пульта и приемника сигнала мы использовали светодиоды. Визуализация нажатия кнопок пульта дистанционного управления осуществляется свечением данных светодиодов. Пульт позволяет независимо включать и отключать каждый из них. Также возможно включение и отключение всех светодиодов и инвертирования их состояния.

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