Ардуино как пульт от телевизора. Подводные камни, методы решения.
- Войдите на сайт для отправки комментариев
Нет ответов
Ср, 01/02/2017 — 14:11
Каждый кто когда либо встречался с программированием ардуино в качаестве пульта для телевизора должен был уткнуться в непреодолимую стену препятствий. Например я в неё уже тыкаюсь вторую неделю и никак не могу перепрыгнуть, а другие, кто тоже тыкался бросили эту затею и не пытаются. Думаю тут можно выкладывать разные хитрости.
Расскажу о текущей проблеме.
Видеодвойка DAEWO с затёртой маркировкой.
Пульт от триколора
Пульт от DAEWO с тремя работающими кнопками.
Все пульты работают на 455 Кгц если верить их кварцам.
Наша задача. Считать код с любой кнопки
Запомнить её и послать на телевизор.
Родной пульт от телевизора работает.
Триколоровский хоть и не работает с этим телевизором, но при нажатии на любую кнопку, на телевизоре радостно мигает светодиод, «говоря» что он видит сигналы, но не понимает их значение.
Подменяем пульт дистанционного управления при помощи Arduino
Приступаем к практике.
Решил сильно не в даваться в сторонние разработки, а придумать свой протокол.
В итоге, после долгих мучений, понял что всё это долго. И решил ограничится записью и трансляцией сигнала «как есть».
Подключили приёмник. Считали значения
byte z1[]=; Далее, решил отправить сигнал на светодиод. Подключил светодиод. В крутил код отправки. void digit_blink() < //ситает массив и передаёт его на выход. i=0; while(i
Уверенность такого метода (как думалось) заключена в том, что не нужно мучится с частотой отправки, так как запись данных происходит с частотой ардуино, следовательно, последовательность отправки будет на той же частоте. И телевизору будет абсолютно всё равно. Он поймёт сигнал, как будто это его родной пульт.
Опробовал. Телевизор никак не замигал.
Решил воспользоваться готовым решением.
Скачал библиотеку Irremote. И залил файл Irecord.
Нажал кнопку, записал RAW значения кнопки пульта. Отпустил кнопку. Пошёл процесс отправки. Телевизор не мигает.
Подумал. А что если телевизор требует эти килогерцы?
Посмотрел на код. Понял, что отправка была на 38 Кгц.
Пришёл к выводу что телевизор имеет какую-то свою частоту.
И сделал цикл с перебором частоты.
void loop() < int khz = 38; // 38kHz carrier frequency for the NEC protocol // unsigned int irSignal[] = ; //AnalysIR Batch Export (IRremote) — RAW int irSignal[] = ; // UNKNOWN DFE63E22 //irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. for (i = 0; i < 500; i = i + 1) < int khz = i; // 38kHz carrier frequency for the NEC protocol irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. Serial.print(i); Serial.println(); delay(100); >>
Прогнал все мыслимые частоты, не реагирует.
У меня светодиод был подключен на прямую к ардуино. Подумал. А что если светодиоду не хватает миллиамперов? И напряжения?
Подключил через оптопару. (тот-же транзистор, но без гальванической развязки). Почитал деятелей советующих повышенные питания. Дал питание 7 вольт 350 миллиампер. Светодиод замигал в камеру телефона так, как будто хотел прожечь матрицу насквозь.
Направил на телевизор — 0 эммоций.
Вопрос: И что теперь делать?
- Войдите на сайт для отправки комментариев
Источник: arduino.ru
Небольшой обзор большой библиотеки IRremote для управления по ИК каналу
На моем канале уже была статья про то как сделать ПДУ для бытовой техники на базе библиотеки IRremoteESP8266 . Сегодня краткий обзор библиотеки IRremote для среды Arduino IDE.
Ссылка на гитхаб https://github.com/Arduino-IRremote/Arduino-IRremote . Последняя версия библиотеки 3.5.2. Перед использованием, необходимо убедиться, что в среде Arduino IDE установлена именно она. (со старыми версиями библиотеки, примеры кода из данной статьи работать не будут)
Проверка/установка библиотеки IRremote в среде Arduino IDE
Библиотека поддерживает протоколы: Denon/Sharp, JVC, LG, NEC/Onkyo/ Apple, Panasonic/Kaseikyo, RC5, RC6, Samsung, Sony, (Pronto), BoseWave, Lego, Whynter
Может работать на Ардуино-платформах и отдельных «камнях»:
- Arduino Uno / Mega / Leonardo / Duemilanove / Diecimila / LilyPad / Mini / Fio / Nano etc.
- Teensy 1.0 / 1.0++ / 2.0 / 2++ / 3.0 / 3.1 /
- Sanguino
- ATmega8, 48, 88, 168, 328
- ATmega8535, 16, 32, 164, 324, 644, 1284,
- ATmega64, 128
- ATmega4809 (Nano every)
- ATtiny3217 (Tiny Core 32 Dev Board)
- ATtiny84, 85, 167 (Digispark + Digispark Pro)
- SAMD (Zero, MKR*, but not DUE, which is SAM architecture )
- ESP32 (ESP32 C3 since board package 2.0.2 from Espressif)
- ESP8266
- Sparkfun Pro Micro
- Nano Every, Uno WiFi Rev2, nRF5 BBC MicroBit, Nano33_BLE
- BluePill with STM32
- RP2040 based boards (Raspberry Pi Pico, Nano RP2040 Connect etc.)
Тест проводился на базе платформы ESP32. Схема подключения:
Тест библиотеки IRremote
Сигналы от пульта принимаются с помощью ИК приемника TSOP4838. (D15). Отправка сигналов с помощью ИК светодиода с длиной волны 940нм подключенного через ключ на транзисторе 2N2222 (D4). Библиотека IRremote имеет возможность отображать состояние момента передачи/приема ИК сигнала (не обязательно). В моих примерах:
- прием ИК сообщения — моргает зеленый светодиод (D13);
- отправка ИК сообщения- моргает красный светодиод (D12);
- синий светодиод — для примера кода включения/выключения с помощью любого ПДУ который есть дома (D14).
Прототип устройства для тестирования IRremote
Получение данных с пульта управления.
Для получения данных с ПДУ можно написать простенький скетч.
Получаем данные с пульта управления
Авторы библиотеки пошли в сторону упрощения использования библиотеки конечным пользователем, и запуск «прослушки» и анализа данных с датчика запускается командой:
IrReceiver.begin(15, true, 13);
Если теперь на датчик направить пульт и нажать кнопку, зелененький светодиод бодро моргает, сигнализируя о том, что пришли данные. Если бодро моргающий светодиод не нужен — можно просто написать: IrReceiver.begin(15);
Пример данных по двум кнопкам с моего пульта SAMSUNG (канал+ канал-)
Результат работы программы
Как видим, библиотека IRremote не только отдает сырые данные (отправленное сообщение Raw-Data= 0xEF100707 ), но и дает расшифровку протокола SAMSUNG. Все кнопки моего пульта имеют один адрес Address= 0x707 . Для каждой кнопки уникальна только команда Command= 0x10 , а сама библиотека дает возможность отправки команд именно в таком формате.
Чтобы не «чесать репу», как именно это все нужно оформлять в своем коде, разработчики библиотеки дают еще один скетч.
Скетч формирующий готовую команду для отправки ИК сообщения
На выходе получаются 2 готовых строки кода, которых можно просто «скопипастить» в свою программу.
Результат работы программы
- sendSamsung(0x707, 0x12); канал +
- sendSamsung(0x707, 0x10); канал —
Быстренько поклацав нужные кнопки любого пульта, можно составить необходимый список нужных команд.
Отправка команд бытовой технике.
Пример скетча будет совсем простой канал+1, ждем 5 секунд, канал-1, ждем 5 секунд.
Пример управления телевизором Samsung.
Вместо объекта IrReceiver у нас появляется объект IrSender
IrSender.sendSamsung(0x707, 0x12, 0);
Последняя цифра в этой строчке — число повторов отправки команды. У меня работает и с нулем.
Управление светодиодом с помощью любого пульта от бытовой техники.
В Последнем примере с помощью кнопки переключения каналов будем включать и выключать светодиод который подключен к 14 выводу. Вот тут, как раз удобнее воспользоваться данными Raw-Data, которые были получены в результате работы первого скетча.
- программа + Raw-Data=0xED120707 ВКЛ светодиод
- программа — Raw-Data=0xEF100707 ВЫКЛ светодиод
Сырые данные, можно добыть, обратившись к свойству объекта IrReceiver
IrReceiver.decodedIRData.decodedRawData;
Зажигаем и гасим светодиод.
Теперь клацая кнопку канал «+» светодиод будет зажигаться, канал «-» гаснуть.
Выкидываем все лишнее:
Код без отладки
Если у вас дома завалялся ПДУ валяющийся без дела, с помощью этой библиотеки Вы легко сможете прицепить его для управления самодельным устройством на базе любого микроконтроллера или ардуино-подобной платформе, список которых был приведен в начале данной статьи. Потребуется только купить или выковырять из старой радиоаппаратуры ИК приемник.
Судя по данным гитхаба у данной библиотеки 53 автора , что говорит о большом объёме проделанной работы по расшифровке ИК протоколов различных фирм производителей. Одиночке такое написать не под силу. Лично мне данная библиотека понравилась больше, чем IRremoteESP8266, и в следующий мой проект пойдет именно она.
Все примеры кода из статьи качайте по этой ссылке .
Если информация была полезной, не забываем ставить лайк и подписаться на канал.
Полный список статей доступен по этой ссылке:
Список всех статей канала ESP32 и Arduino
Источник: dzen.ru
Пульт управления на Arduino в мобильнике
Благодаря Arduino можно собрать универсальный пульт дистанционного управления (ПДУ). Очень удобно, когда с одного устройства можно управлять телевизором и медиаплеером. Самое замечательное, что все функции управления будут доступны на своем телефоне Android.
Комплектующие для сборки пульта на Arduino:
- Плата Arduino Pro mini с процессором ATmega328.
- Bluetooth модуль HC-05;
- Инфракрасный приемник TSOP1138, TSOP2238, TSOP4838 (последние две цифры определяют несущую частоту в кГц).
- Инфракрасный диод — передатчик от ненужного ПДУ.
Считывание IR кодов с ПДУ
Для считывания кодов команд с какого-нибудь пульта управления, работающего на самой распространенной частоте 36 кГц, нам потребуется подключить инфракрасный приемник TSOP всего лишь тремя проводами к плате Arduino.
Диапазон работы инфракрасных ПДУ находится в пределах 30–60 кГц. В нашем случае приемник TSOP выбран на частоту 38 кГц, так как отклонение в 10% допускается. Всего лишь понадобиться поднести ближе пульт к датчику в случае плохого приема сигнала.
Электрическая схема подключения TSOP1138, TSOP2238, TSOP4838 к Arduino Pro mini
Монтажная схема подключения TSOP1138, TSOP2238, TSOP4838 к Arduino Pro mini
После сборки схемы скачиваем библиотеку IRremote для Arduino на компьютер.
Устанавливаем и открываем в ней пример скетча IRrecvDump.
В примере скетча меняем номер пина получателя в строке int RECV_PIN = 11 на int RECV_PIN = 4.
Загружаем измененный пример в плату Arduino. Открываем в программе Arduino IDE Монитор порта, наводим имеющийся пульт управления на приемник TSOP и смотрим, считывает ли собранная схема IR коды от какой-то кнопки на пульте.
В приведенном примере, оба пульта от телевизора и медиаплеера передают данные в кодировке NEC.
Все считанные данные от пультов надо занести в таблицу.
Во втором столбце данные для телевизионного пульта TV, в третьем для пульта медиаплеера Player.
После успешного считывания IR кодов, разбираем собранную схему подключения TSOP к Arduino.
Сборка пульта управления на Arduino
Подсоединяем к плате Arduino инфракрасный диод и Bluetooth модуль HC-05.
Монтажная схема универсального пульта на Arduino
Собранный универсальный пульт управления на Arduino
Теперь надо по очереди переписать в скетче коды кнопок для своих пультов, в соответствии с составленной таблицей. Сначала переписываем для телевизора, начиная со строчки:
if (x == 97) < irsend.sendNEC(0x807F08F7, 32); delay(40);
а затем для медиаплеера:
if (x == 97) < irsend.sendNEC(0xFDC23D, 32); delay(40).
Если ваш пульт передает данные в кодировке SONY, RC5, RC6, PANASONIC, тогда меняем в скетче запись NEC на соответствующую.
Готовую программу загружаем в плату Arduino.
Для проверки передачи данных, открываем в программе Arduino IDE Монитор порта, отправляем в него «1» (задействовано управление телевизором). Отправляем «а» — должно вывестись значение 97.
Потом прописываем «2» (задействовано управление медиаплеером) и снова вводим «а» — ждем вывода 97.
Имитация передачи данных с телефона на Arduino
Установка приложения Pult на телефон Android
Скачиваем приложение Pult.apk и устанавливаем на любое устройство Android, телефон или планшет.
После нажатия на красный значок Bluetooth, выводится окно со списком доступных Bluetooth устройств
После удачного соединения с Bluetooth модулем HC-05, значок Bluetooth должен поменять свой цвет на синий.
Главный экран приложения Pult для режима телевизора TV
Главный экран приложения Pult для режима мультиплеера Player
Источник: volt-index.ru