Рубрики
Схемы на Arduino

Декодер инфракрасных сигналов (IR Remote Decoder) на Arduino

Технология инфракрасной связи (IR – Infrared) является очень простой, дешевой и широко распространенной в настоящее время технологией связи. Инфракрасный свет по своей сущности очень похож на видимый свет за исключением того, что длина волны у него немного больше, чем у видимого света. Это свойство делает инфракрасный свет невидимым для человеческого глаза и крайне удобным для осуществления беспроводной связи.

Существует множество примеров, в котором вам для управления устройствами с помощью инфракрасной связи необходимо сначала декодировать их инфракрасные сигналы. В данной статье мы рассмотрим создание на основе платы Arduino и инфракрасного приемника TSOP1838 инфракрасного декодера (IR Remote Decoder). Шестнадцатеричный код (hex code) каждой кнопки мы будем записывать в лист Microsoft Excel.

Ранее на нашем сайте мы уже рассматривали декодирование инфракрасных сигналов в следующих проектах:

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress) или Arduino Nano (купить на AliExpress).
  2. Инфракрасный приемник (IR Receiver) TSOP1838 (купить на AliExpress).
  3. Соединительные провода.
  4. Макетная плата.

Как работает инфракрасная связь

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

Когда на привычном нам пульте ДУ (дистанционного управления) вы нажимаете какую либо кнопку, инфракрасный светодиод (IR LED) испускает инфракрасный свет. Этот свет улавливается инфракрасным приемником, который обычно представляет собой фотодиод или фототранзистор. Но инфракрасный свет также формируется Солнцем, лампами накаливания и вообще любыми предметами, которые производят тепло. Это обстоятельство может помешать осуществлению инфракрасной связи. Чтобы этого не происходило, сигнал передатчика модулируется несущей частотой от 36 до 46 кГц. При приеме сигнала инфракрасный приемник производит демодуляцию сигнала и преобразует его в двоичный код перед подачей его на микроконтроллер.

В нашем проекте мы будем использовать пульт ДУ от телевизора для передачи инфракрасных сигналов и инфракрасный приемник TSOP1838 для их приема.

Схема проекта

Схема декодера инфракрасных сигналов на основе платы Arduino представлена на следующем рисунке.

Соединения в схеме очень просты поскольку инфракрасный приемник (IR Receiver) имеет всего 3 контакта. Его контакты Vs и GND подключаются к контактам 3.3V и GND платы Arduino, а его контакт данных (Data pin) подключается к контакту 2 платы Arduino.

Внешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом нам необходимо скачать библиотеку инфракрасной связи для Arduino по следующей ссылке и добавить ее в Arduino IDE выбрав в ней пункт меню Sketch > Include library > Add.Zip library. Выберите в открывшемся диалоговом окне файл со скачанной библиотекой и нажмите ‘Open’.

После этого необходимо подключить заголовочный файл библиотеки в программу.

Затем в программе необходимо указать контакт платы Arduino, к которому подключен контакт данных (Data pin) инфракрасного приемника. В нашем случае он подключен к контакту D2 платы Arduino.

После этого необходимо создать объект для работы с инфракрасным приемником.

Далее объявим объект класса decode_results – он будет использоваться инфракрасным приемником для передачи декодированной информации.

Внутри функции setup() инициализируем последовательную связь и инфракрасный приемник при помощи вызова функции irrecv.enableIRIn().

В функции loop() мы с помощью функции irrecv.decode будем непрерывно проверять наличие нового сигнала и если новый сигнал был принят, то его код мы будем сохранять в переменной result.value.

Для передачи данных из Arduino в лист Excel мы будем использовать плагин PLX-DAQ (ранее мы его уже использовали в проекте логгера данных температуры и влажности на основе Arduino). С помощью функции Write_streamer() мы будем передавать данные последовательно в специальном формате (фактически, это формат файлов .csv, которые можно считать с помощью Excel), которые нам будут затем необходимы для вывода информации в лист Excel.

После того как аппаратная и программная части проекта будут готовы, можно будет загружать программу в плату Arduino. После загрузки кода в плату направьте пульт ДУ на спроектированный нами декодер и начинайте нажимать на нем кнопки. Шестнадцатеричный код (hex code) каждой кнопки будет печататься в окне монитора последовательной связи (serial monitor).

Сохранение декодированных данных в лист Excel

Для передачи данных на лист Excel мы будем использовать плагин PLX-DAQ, который позволяет непосредственно передавать данные с Arduino в лист Excel на вашем компьютере. По приведенной ссылке скачайте данный плагин, извлеките его из архива и установите его на свой компьютер. После своей установки плагин создаст на вашем компьютере папку PLX-DAQ.

После этого откройте файл ‘PLX-DAQ spreadsheet’ из этой папки. Если в вашем Excel отключены макросы, то вы увидите предупреждающее сообщение как на следующем рисунке.

Включите макросы и после этого вы на своем экране должны увидеть следующее:

После этого выберите скорость “9600” и COM порт, к которому подключена плата Arduino к вашему компьютеру. Затем нажмите на Connect чтобы начать прием данных от Arduino – в результате вы на экране увидите примерно следующую картину:

Этот будет означать что наш проект декодера инфракрасных сигналов на основе платы Arduino успешно работает.

Исходный код программы (скетча)

Видео, демонстрирующее работу декодера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *