Инфракрасный пульт для управления ардуино. Управление arduino пультом ИК

10.05.2019

Есть много статей в интернете о том, как сделать свой пульт к телевизору на Arduino, но мне понадобился универсальный пульт для управления телевизором и медиа-плеером. Главное преимущество моего универсального пульта в том, что кнопки в приложении для андроид телефона двух-целевые, а впрочем, смотрите на видео.



Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка "AV " в режиме управления телевизором меняется на кнопку "" (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа - режим управления плеером.

Ну а сейчас я расскажу немного о создании такого пульта. Для устройства использовал пульт от телевизора ERGO и пульт от медиаплеера DUNE HD TV101W.

Для получения данных от пультов я использовал инфракрасный датчик TSOP1138 (аналог TSOP4838) на рабочей частоте 38 кГц и подключил его к плате Arduino по схеме:

Этот скетч на потребуется для определения кодировки передачи данных и считывания кода кнопок пультов.

В скетче в строке int RECV_PIN = 11; указываем наш пин под номером 4

После заливки скетча открываем «монитор порта» и, нажимая на кнопки пульта, смотрим на полученные данные.

На картинке пример сканирования кнопки включения от пульта телевизора и пульта плеера. Теперь формируем таблицу для кодов кнопок.

У меня получилось как на фото выше. Под надписью TV коды кнопок пульта от телевизора; под надписью Player - коды от пульта медиаплеера.

Теперь отключаем наш приемник инфракрасных сигналов от платы Arduino и подключаем к ней Bluetooth модуль HC-05 и инфракрасный светодиод по схеме на фото.

После этого переходим непосредственно к скетчу.

Скетч

#include IRsend irsend; int y = 1; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int x = Serial.read(); if (x == 49) { y = 1; } if (x == 50) { y = 2; } if (y == 1) { // коды кнопок для пульта от телевизора if (x == 97) { irsend.sendNEC(0x807F08F7, 32); delay(40); } if (x == 98) { irsend.sendNEC(0x807FA857, 32); delay(40); } if (x == 99) { irsend.sendNEC(0x807F708F, 32); delay(40); } if (x == 100) { irsend.sendNEC(0x807FF00F, 32); delay(40); } if (x == 101) { irsend.sendNEC(0x807F30CF, 32); delay(40); } if (x == 102) { irsend.sendNEC(0x807FB04F, 32); delay(40); } if (x == 103) { irsend.sendNEC(0x807F9867, 32); delay(40); } if (x == 104) { irsend.sendNEC(0x807F58A7, 32); delay(40); } if (x == 105) { irsend.sendNEC(0x807FD827, 32); delay(40); } if (x == 106) { irsend.sendNEC(0x807F38C7, 32); delay(40); } if (x == 107) { irsend.sendNEC(0x807F48B7, 32); delay(40); } if (x == 108) { irsend.sendNEC(0x807FB847, 32); delay(40); } if (x == 109) { irsend.sendNEC(0x807F6897, 32); delay(40); } } if (y == 2) { //коды кнопок пульта от медиаплеера if (x == 97) { irsend.sendNEC(0xFDC23D, 32); delay(40); } if (x == 98) { irsend.sendNEC(0xFDE01F, 32); delay(40); } if (x == 99) { irsend.sendNEC(0xFD18E7, 32); delay(40); } if (x == 100) { irsend.sendNEC(0xFDE817, 32); delay(40); } if (x == 101) { irsend.sendNEC(0xFDA857, 32); delay(40); } if (x == 102) { irsend.sendNEC(0xFD6897, 32); delay(40); } if (x == 103) { irsend.sendNEC(0xFDA857, 32); delay(40); } if (x == 104) { irsend.sendNEC(0xFD6897, 32); delay(40); } if (x == 105) { irsend.sendNEC(0xFDE817, 32); delay(40); } if (x == 106) { irsend.sendNEC(0xFD18E7, 32); delay(40); } if (x == 107) { irsend.sendNEC(0xFD9867, 32); delay(40); } if (x == 108) { irsend.sendNEC(0xFD28D7, 32); delay(40); } if (x == 109) { irsend.sendNEC(0xFD20DF, 32); delay(40); } } } }


В скетче вам потребуется отредактировать коды кнопок, а именно в строках:

If (x == 97) { irsend.sendNEC(0x807F08F7, 32); delay(40);
Значение 807F08F7 поменять на:

If (y == 1) { //коды кнопок для пульта от телевизора if (x == 97) { irsend.sendNEC(0x12345678, 32); delay(40); }
Где 12345678 - это код вашей кнопки.

После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.

Включаем блютуз в телефоне, ищем наше устройство, создаем пару, потом запускаем приложение Pult на телефоне.

При запуске у нас появится экран с красным значком bluetooth в правом нижнем углу, что сигнализирует о том, что мы не подключены к нашему устройству.

После этого жмем на этот значок. У нас должно появится окно со списком всех доступных bluetooth устройств, где мы выбираем наше устройство для подключения.

Теперь мы снова вернулись на главный экран и уже можем управлять телевизором:

Для перехода в режим управления нам потребуется нажать кнопку с надписью «Player» . Как я говорил раньше, у нас кнопка с надписью «AV» поменяется на кнопку "":

Для отключения от нашего устройства просто зажмите кнопку «Power» на несколько секунд.

Ну и несколько фотографий моего готового устройства.

Получилось, вроде, неплохо. Жду комментарии к статье.

Создавая устройства для работы с IR-пультами очень необходим инструмент, при помощи которого можно было бы записывать и анализировать IR-сигналы. Таким инструментом, в идеале, мог бы стать цифровой осциллограф или логический анализатор, но эти приборы далеко не у всех есть, а специально покупать — дорого. Как же быть? Есть очень простое решение – звуковая карта компьютера! Сигнал будем записывать с ее помощью.

Кроме звуковой карты (которая, я надеюсь, есть в Вашем компьютере) нам понадобиться приемник IR-сигналов. Правильней бы собрать полноценную схему приемника с TSOP, но поступим максимально просто — в качестве IR-приемника возьмем самый обычный IR светодиод (тот самый который стоит в Вашем пульте). Можно, конечно, взять и IR фотодиод, но IR светодиод достать проще. IR светодиод нужно подключить напрямую к микрофонному входу звуковой карты. Для этого понадобиться 3.5мм штекер и кусок экранированного провода (шнурок с разъемом я отрезал от старого неработающего микрофона).

Подключается светодиод следующим образом:

В результате, получим вот такое устройство:

Вставляем штекер в микрофонный вход (он розового цвета). В настройках звуковой карты выбираем микрофон как входное устройство, регулятор усиления выкручиваем на максимум и ставим галочку дополнительного усиления. Для проверки, направляем пульт на светодиод-приемник (необходимо максимально приблизить к пульту), нажимаем клавишу – в динамиках должны слышаться щелчки.

Если у Вас, по какой либо причине, нет микрофонного входа (например, в ноутбуке) — подключайте приемник к линейному входу звуковой карты – все будет работать так же, только амплитуда записанного сигнала станет намного меньшей.


Теперь нам нужна программа для записи звука.
Для этих целей подойдет любая программа, которая у Вас есть. Если у Вас нет любимой программы для работы со звуком, предлагаю небольшую и бесплатную программку — Wavosaur (http://www.wavosaur.com/) Программа работает без установки и имеет небольшой размер — как я люблю:).

Программа для работы со звуком.

После запуска программы включаем индикатор уровня (линейка в правой части окна) и проверяем реакцию на сигналы пульта. По умолчанию должно все заработать – линейка будет зашкаливать от принимаемых сигналов (если реакции нет — лезем в настройки Audio configuration/Audio in ). Далее нажимаем пиктограмму записи, подносим пульт максимально близко к приемному светодиоду, нажимаем клавишу пульта и удерживаем пару секунд. Отключаем запись – Готово! В окне мы увидим развертку принятого IR сигнала. Что интересно, сигнал будет уже детектированным – мы не увидим несущей частоты, а только полезный сигнал. Так получается из-за того, что входные емкости микрофонного входа не успевают перезаряжаться.

Полученный сигнал можно масштабировать по времени, амплитуде и, что очень удобно, выделяя определенный промежуток, сразу можно увидеть его длительность. Принятый сигнал можно сохранить (лучше в wav-формате – не будет искажений) или экспортировать в MP3, текст, бинарный файл (полезная штука!).

Для примера , сигнал моего пульта от телевизора (формат NEC):

По картинке видны все временные интервалы, можно даже вычислить адрес пульта и код команды кнопки – все наглядно и понятно.

P.S.
Большая просьба! Если Вы соберете такой приемник, сохраните посылки Ваших пультов и пришлите мне на мыло (в закладке «о проекте») – это очень поможет в улучшении алгоритма универсального приемника. В названии файла указывайте от чего пульт и фирму изготовителя (например: tv-sony.wav ).


Еще о работе с IR пультами!
Мною был предложен самый простой вариант «пощупать» сигнал от IR-пульта, но есть множество решений которые могут делать намного больше! Принимать IR-сигнал, анализировать, сохранять, воспроизводить, программировать свои пульты, управлять компьютером … Этот раздел и будет содержать ссылки на такие решения.

1. DvzRcEditor
Первой у нас пойдет программка DvzRcEditor, которую скинул mobi. Программу сделал некий Dvz 2010 (к сожалению нет его координат, может знает кто?).


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


Пульт имеет 7 клавиш которым можно задать любые команды из проанализированных, причем программа может сама записать сигналы для этих кнопок в микроконтроллер (при условии, что Вы первый раз прошьете туда бутлоадер).

Все просто и наглядно — мне понравилось!


2. SlyControl.
http://slydiman.narod.ru/scr/index.htm
Это даже не программа — это целый интернет ресурс посвященный IR пультам. Содержит много полезной информации, аппаратные и программные решения на все случаи. Вот, что авторы пишут о SlyControl:
— это универсальная программа для управления всем, чем угодно с помощью компьютера.

Для чего это можно использовать:
— управление любыми программами с любого пульта дистанционного управления (ДУ), с клавиатуры мультимедиа клавишами или джойстиком
— эмуляция клавиатуры и мыши с любого пульта ДУ
— планировщик (не просто запустить программу по времени, но и выполнить с ней какие-то действия)
— выключение компьютера по таймеру или по событию
— можно и свет в квартире включать с ДУ, нужно только плагин соответствующий добавить 😉

А еще на ресурсе есть программа RCExplorer 2.1 — база данных по ИК пультам (база содержит более 200 записей).


Программа позволяет:
— Принимать сигнал с пультов используя звуковую карту, COM порт, IgorPlug-USB или IgorPlug2
— Детально анализировать сигнал — (модуляция, временные характеристики, особенности кодирования, коды повтора и пр., поддерживаются все известные мне на данный момент протоколы, программа может работать и с неизвестными протоколами.
— Графически отображать сигнал в реальном времени и по данным из базы
— Производить поиск аналогичного пульта по базе данных
— Воспроизводить команду пульта по данным из базы через COM порт

В общем, обязательно посетите ресурс — будет интересно.

(Visited 20 417 times, 9 visits today)

Рассмотрим на этом занятии подключение ИК приемника к Ардуино. Расскажем какую библиотеку следует использовать для IR приемника, продемонстрируем скетч для тестирования работы инфракрасного приемника от пульта дистанционного управления и разберем команды в языке C++ для получения сигнала. Сразу отметим, что IR датчик Ардуино подходит не к каждому пульту, частота сигнала может отличаться.

Устройство ИК приемника. Принцип работы

Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники. Но, несмотря на это, постепенно Bluetooth модуль набирает все большую популярность.

Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i -область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.

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

Как подключить ИК приемник к Ардуино

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • IR приемник;
  • пульт ДУ;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».

Схема подключения ИК приемника к аналоговому порту Ардуино

Подключите IR приемник по схеме, представленной выше, и подключите светодиоды к 12 и 13 пину. Перед загрузкой программы, вам потребуется установить библиотеку IRremote.h, если она не была еще установлена. Данная библиотека не относится к стандартным библиотекам среды программирования Arduino IDE. Скачать библиотеку IRremote.h и готовый скетч можно одним архивом с Google Диск по ссылке .

Скетч для ИК приемника Arduino:

#include // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; void setup () // процедура setup { irrecv.enableIRIn (); // запускаем прием инфракрасного сигнала pinMode (13, OUTPUT ); // пин 13 будет выходом (англ. «output») pinMode (12, OUTPUT ); // пин 12 будет выходом (англ. «output») pinMode (A0, INPUT ); // пин A0 будет входом (англ. «intput») Serial .begin (9600); // подключаем монитор порта } void loop () // процедура loop { if (irrecv.decode (&results)) // если данные пришли выполняем команды { Serial .println (results.value); // отправляем полученные данные на порт // включаем и выключаем светодиоды, в зависимости от полученного сигнала if (results.value == 16754775) { digitalWrite (13, HIGH ); } if (results.value == 16769055) { digitalWrite (13, LOW ); } if (results.value == 16718055) { digitalWrite (12, HIGH ); } if (results.value == 16724175) { digitalWrite (12, LOW ); } irrecv.resume (); // принимаем следующий сигнал на ИК приемнике } }

Пояснения к коду:

  1. Библиотека IRremote.h содержит набор команд и позволяет упростить скетч;
  2. Оператор decode_results присваивает получаемым сигналам от пульта дистанционного управления имя переменной results .

ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях if () .

Также часто читают:

Есть много статей в интернете о том, как сделать свой пульт к телевизору на Arduino, но мне понадобился универсальный пульт для управления телевизором и медиа-плеером. Главное преимущество моего универсального пульта в том, что кнопки в приложении для андроид телефона двух-целевые, а впрочем, смотрите на видео.



Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка "AV " в режиме управления телевизором меняется на кнопку "" (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа - режим управления плеером.

Ну а сейчас я расскажу немного о создании такого пульта. Для устройства использовал пульт от телевизора ERGO и пульт от медиаплеера DUNE HD TV101W.

Для получения данных от пультов я использовал инфракрасный датчик TSOP1138 (аналог TSOP4838) на рабочей частоте 38 кГц и подключил его к плате Arduino по схеме:

Этот скетч на потребуется для определения кодировки передачи данных и считывания кода кнопок пультов.

В скетче в строке int RECV_PIN = 11; указываем наш пин под номером 4

После заливки скетча открываем «монитор порта» и, нажимая на кнопки пульта, смотрим на полученные данные.

На картинке пример сканирования кнопки включения от пульта телевизора и пульта плеера. Теперь формируем таблицу для кодов кнопок.

У меня получилось как на фото выше. Под надписью TV коды кнопок пульта от телевизора; под надписью Player - коды от пульта медиаплеера.

Теперь отключаем наш приемник инфракрасных сигналов от платы Arduino и подключаем к ней Bluetooth модуль HC-05 и инфракрасный светодиод по схеме на фото.

После этого переходим непосредственно к скетчу.

Скетч

#include IRsend irsend; int y = 1; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int x = Serial.read(); if (x == 49) { y = 1; } if (x == 50) { y = 2; } if (y == 1) { // коды кнопок для пульта от телевизора if (x == 97) { irsend.sendNEC(0x807F08F7, 32); delay(40); } if (x == 98) { irsend.sendNEC(0x807FA857, 32); delay(40); } if (x == 99) { irsend.sendNEC(0x807F708F, 32); delay(40); } if (x == 100) { irsend.sendNEC(0x807FF00F, 32); delay(40); } if (x == 101) { irsend.sendNEC(0x807F30CF, 32); delay(40); } if (x == 102) { irsend.sendNEC(0x807FB04F, 32); delay(40); } if (x == 103) { irsend.sendNEC(0x807F9867, 32); delay(40); } if (x == 104) { irsend.sendNEC(0x807F58A7, 32); delay(40); } if (x == 105) { irsend.sendNEC(0x807FD827, 32); delay(40); } if (x == 106) { irsend.sendNEC(0x807F38C7, 32); delay(40); } if (x == 107) { irsend.sendNEC(0x807F48B7, 32); delay(40); } if (x == 108) { irsend.sendNEC(0x807FB847, 32); delay(40); } if (x == 109) { irsend.sendNEC(0x807F6897, 32); delay(40); } } if (y == 2) { //коды кнопок пульта от медиаплеера if (x == 97) { irsend.sendNEC(0xFDC23D, 32); delay(40); } if (x == 98) { irsend.sendNEC(0xFDE01F, 32); delay(40); } if (x == 99) { irsend.sendNEC(0xFD18E7, 32); delay(40); } if (x == 100) { irsend.sendNEC(0xFDE817, 32); delay(40); } if (x == 101) { irsend.sendNEC(0xFDA857, 32); delay(40); } if (x == 102) { irsend.sendNEC(0xFD6897, 32); delay(40); } if (x == 103) { irsend.sendNEC(0xFDA857, 32); delay(40); } if (x == 104) { irsend.sendNEC(0xFD6897, 32); delay(40); } if (x == 105) { irsend.sendNEC(0xFDE817, 32); delay(40); } if (x == 106) { irsend.sendNEC(0xFD18E7, 32); delay(40); } if (x == 107) { irsend.sendNEC(0xFD9867, 32); delay(40); } if (x == 108) { irsend.sendNEC(0xFD28D7, 32); delay(40); } if (x == 109) { irsend.sendNEC(0xFD20DF, 32); delay(40); } } } }


В скетче вам потребуется отредактировать коды кнопок, а именно в строках:

If (x == 97) { irsend.sendNEC(0x807F08F7, 32); delay(40);
Значение 807F08F7 поменять на:

If (y == 1) { //коды кнопок для пульта от телевизора if (x == 97) { irsend.sendNEC(0x12345678, 32); delay(40); }
Где 12345678 - это код вашей кнопки.

После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.

Включаем блютуз в телефоне, ищем наше устройство, создаем пару, потом запускаем приложение Pult на телефоне.

При запуске у нас появится экран с красным значком bluetooth в правом нижнем углу, что сигнализирует о том, что мы не подключены к нашему устройству.

После этого жмем на этот значок. У нас должно появится окно со списком всех доступных bluetooth устройств, где мы выбираем наше устройство для подключения.

Теперь мы снова вернулись на главный экран и уже можем управлять телевизором:

Для перехода в режим управления нам потребуется нажать кнопку с надписью «Player» . Как я говорил раньше, у нас кнопка с надписью «AV» поменяется на кнопку "":

Для отключения от нашего устройства просто зажмите кнопку «Power» на несколько секунд.

Ну и несколько фотографий моего готового устройства.

Получилось, вроде, неплохо. Жду комментарии к статье.