Универсальный пульт на Arduino

Есть много статей в интернете о том, как сделать свой пульт к телевизору на Arduino, но мне понадобился универсальный пульт для управления телевизором и медиа-плеером. Главное преимущество моего универсального пульта в том, что кнопки в приложении для андроид телефона двух-целевые, а впрочем, смотрите на видео.[embedded content]Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка «AV» в режиме управления телевизором меняется на кнопку »◻» (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа — режим управления плеером.

imageimage

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

image

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

image

Для начала нам потребуется прочитать коды кнопок пультов. Я воспользовался библиотекой IRremote и тестовым скетчем IRrecvDump.

image

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

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

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

image

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

image

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

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

image

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

Скетч #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 (0×807F08F7, 32); delay (40); } if (x == 98) { irsend.sendNEC (0×807FA857, 32); delay (40); } if (x == 99) { irsend.sendNEC (0×807F708F, 32); delay (40); } if (x == 100) { irsend.sendNEC (0×807FF00F, 32); delay (40); } if (x == 101) { irsend.sendNEC (0×807F30CF, 32); delay (40); } if (x == 102) { irsend.sendNEC (0×807FB04F, 32); delay (40); } if (x == 103) { irsend.sendNEC (0×807F9867, 32); delay (40); } if (x == 104) { irsend.sendNEC (0×807F58A7, 32); delay (40); } if (x == 105) { irsend.sendNEC (0×807FD827, 32); delay (40); } if (x == 106) { irsend.sendNEC (0×807F38C7, 32); delay (40); } if (x == 107) { irsend.sendNEC (0×807F48B7, 32); delay (40); } if (x == 108) { irsend.sendNEC (0×807FB847, 32); delay (40); } if (x == 109) { irsend.sendNEC (0×807F6897, 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 (0×807F08F7, 32); delay (40); Значение 807F08F7 поменять на: if (y == 1) { //коды кнопок для пульта от телевизора if (x == 97) { irsend.sendNEC (0×12345678, 32); delay (40); } Где 12345678 — это код вашей кнопки.После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.

[ Скачать приложение для android устройств «Универсальный пульт управления» ]

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

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

image

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

image

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

image

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

image

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

Список используемых компонентов с ссылками на продавцов

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

image

image

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

© Habrahabr.ru