Универсальный обучаемый пульт
Автор: GoldenAndy Когда пультов больше чем рук или как не стать Шивой Многоруким
(картинка из интернета) Что умеет пульт. Обучаемый пульт - это пульт, который может запомнить ИК-посылку от другого пульта и потом пытаться ее воспроизвести. Но поскольку форматов команд пультов в мире многое множество - задача становится нетривиальной. Особенно для микроконтроллера ATMEGA8. Но я надеюсь, что я эту проблему решил хотя бы частично. Краткие зарактеристики: Пульт распознает несколько распространенных форматов и пытается их эмулировать согласно спецификациям. Неизвестные форматы так же анализируются и пытаются воспроизводиться. Распознаваемые форматы с эмуляцией согласно спецификаций:
Типовые форматы, эмулируются с несущей 38 кГц :
Нераспознаваемые форматы эмулируются с несущей 38 кГц.
Изначально пульт был сделан в 12-кнопочном варианте, в корпус автомобильного пультика на руль. Но потом схема "повзрослела" до 30 кнопок. К повторению предлагается вариант в 21-кнопочный китайский пульт "IR remote control HX1838 for Arduino" либо макси-версия - 30-кнопочный пульт с тактовыми кнопками - плата размерами 115*40 мм. История разработки. Так сложилось, что автомобиль мне достался в "бомж"-комплектации. Основные причины выбора - картинка с камеры заднего вида и поддержка флешки и SD.
В комплекте к этому "комбайну" шел пультик. Такая себе вафелька об 40 кнопках.
Пульт ни разу не эргономичный. На ощупь пользоваться практически невозможно. Что автоматически приводит к невозможности использования пульта в движении. И был куплен на Али универсальный обучаемый пульт с креплением на руль. Вот такой. Цена вопроса - порядка $4.
10 кнопок (кнопки управления громкостью на обратной стороне) + кнопка обучения. Прекрасно обучился и был очень удобен. Где то год. Потом стал глючить, а после и вовсе перестал работать. Свежая батарейка не помогала. Пульт вроде обучался, при посылке команды что то отправлял (было видно на камере телефона), но никакое устройство не реагировало на эту посылку. И вот дошли руки вдохнуть в пульт новую жизнь. На первом этапе разработки было изготовление новой платы в автомобильный пультик и написание базового функционала для работы пульта в авто. Причем в сжатые сроки, что бы успеть получить работающий пульт до поездки в отпуск. Пульт получился, поездка удалась, было накатано порядка 3800 км. Пульт успешно отъездил всю поездку и показал себя с лучшей стороны.
Второй этап разработки - научить пульт обучаться различным командам различных форматов пультов и использовать полученные знания.
Универсальный обучаемый пульт. Анализ протоколов. Протоколы ИК-управления бывают разные. Но большинство протоколов сводится к тому, что пульт отправляет данные, шифруя их длительностями импульсов ИК-излучения и/или пауз между импульсами. Так же информационной посылке может предшествовать стартовый импульс индивидуальной длительности. Кроме того, в подавляющем большинстве современных протоколов импульс подразумевает не постоянное свечение инфракрасного светодиода, а модуляцию несущей частоты этими импульсом. И для различных протоколов эта частота тоже отличается. В данной конструкции в качестве базовой несущей частоты для неизвестных протоколов используется 38 кГц. Однако для известных форматов частота несущей устанавливается соответственно формату. Форматов достаточно много разных. Вот, например, RC5.
Или формат с фиксированной паузой между импульсами (Sony).
Формат с фиксированным импульсом и разными паузами (NEC, туда же JVC, Samsung и т.д.)...
Формат с кодированием информации длинами пауз (Sharp). Видно, что в посылке есть три длительности - пауза 1, пауза 2 и импульс.
Еще вариант кодирования. Некий безымянный пульт от вентилятора. Информация кодируется длиной импульса при фиксированном периоде следования импульсов.
На вышеприведенных графиках (кстати реальных, снятых логическим анализатором) видно, что различные длительности импульсов, пауз, стартового импульса и стартовой паузы достаточно сильно отличаются друг от друга по длительности. Как минимум в 2 раза. Зачастую эти все длительности еще и кратны самой короткой. При этом, если это неизвестный формат, то можно для такого формата сохранить массив упорядоченных длительностей и индексы длительностей импульсов и пауз для всей посылки. Из вышеприведенных графиков видно, что количество упорядоченных длительностей - от двух до четырех. Четыре - это хорошо. Ибо кодируется двумя битами. В пульте запланировано 30 кнопок. EEPROM в ATMEGA8 - 512 байт. Из них занято служебной информацией 10 байт. Если оставшуюся информацию поделить на 30 кнопок - получится 16 байт данных на кнопку. Эти 16 байт делятся так: Тип сохраненной посылки - 1 байт. Остается 8 байт для записи данных. Или 64 бита. Для распознанных форматов это позволяет сохранить 64 бита данных. Простая математика показывает, что для нераспознанных форматов, когда сохраняются длительности и посылок, и пауз, при 2-битном кодировании мы можем сохранить максимум 32 индекса длительностей. В реалиях это будет максимум 31 индекс - 16 импульсов и 15 пауз. При 1-битном кодировании (когда длительностей всего две) - можем сохранить до 63 индексов длительностей. (32 импульса, 31 пауза). В принципе, я считаю, что для большинства техники типа телевизоров, медиаплееров, кабельных/спутниковых декодеров и т.д. - этого достаточно. Схема. Клик на схему откроет ее покрупнее. А кому мало - вот схема в PDF. Кнопки подключены к контроллеру матрицей 2 х 15. Примененный контроллер из самого энергосберегающего режима может выйти только подачей низкого уровня на вход INT0 или INT1. Кнопка SW1 - особая. Длительное её нажатие (более 2.5 сек) вводит пульт в режим обучения. Если планируется урезанная версия пульта на меньшее число кнопок - можно убирать любые кнопки, кроме SW1 (иначе не получится перевести пульт в режим обучения). Ко входу прерывания INT1 подключен фотоприемник. Для уменьшения потребляемого тока питание фотоприемника включается только при обучении пульта. Питание контроллера дополнительно развязано диодом и конденсаторами C2, C3, что бы помехи по питанию при передаче команды не так сильно влияли на работу контроллера. В качестве развязывающего диода применен SS14 - достаточно мощный (40 В, 1 А) диод Шоттки. Как ни странно, на малых токах у него падение напряжения меньше, нежели у изначально запланированного мелкого BAT46. Печатная плата. Разработано 2 варианта печатной платы. Вариант номер один. Вариант номер два. Хинт: Если у китайцев брать набор - пульт плюс приемник - то фотоприемник отдельно можно не искать. Если повезет, то на платке приемника еще и красненький светодиод типоразмера 0805 есть.
Особенности платы. Переходные в идеале нужно запаять совсем-совсем тонким проводом (волоском из мгтф, например) с минимальным числом припоя. Через переходные ходят только сигналы опроса клавиатуры, силовых цепей там нет. Контактные площадки залудить минимальным количеством припоя и потом, возможно, пройтись по ним потоком воздуха из паяльного фена, что бы все наплывы/бугорки убрались. Информационные светодиоды типоразмера 0805 запаиваются с обратной стороны платы, вверх ногами, кристаллом в отверстие. Так, что бы линза диода не выступала над лицевой частью платы. Тогда они будут просвечивать через наклейку, но не будут ее приподнимать. Фотоприемник. Китайский приемник слишком толстый, почти 5.5 мм. А пространство между платой и нижней поверхностью корпуса - 4 мм. Соответственно, что бы не искать дорогие плоские приемники (а такие у Vishay есть), в нижней плоскости корпуса сверлится отверстие под линзу приемника. Можно просверлить 2 мм сверлом, а потом изнутри выбрать фаску более толстым. Так же с приемника можно ободрать его металлический экран. Тоже выиграется минимум 0.5 мм. Фьюзы и прошивка. Фьюзы :
Кому ближе циферки - то вот: Для прошивки необходимо подпаять к соответствующим контактным площадкам проводки от программатора - Землю (GND), MO(MOSI), MI(MISO), SCK, Reset. На версии платы под мелкий китайский пультик я вывел еще отдельно пятачок + питания, что б было легче подать питание от программатора. В принципе, прошивка отлажена и проверена. Но если вдруг обнаружатся какие то ошибки или будут сделаны дополнения - я буду выкладывать обновленную прошивку тут и у себя в блоге. Краткая инструкция по обучению пульта и его использованию. Подача питания на пульт. Режим пульта. При этом на время отправки команды загорается зеленый контрольный светодиод или, если напряжение батарейки ниже 2.7 вольта - красный. Все кнопки, кроме первой, при удержании отправляют повтор команды, пока нажата кнопка. При нажатии кнопки SW1 "Set" пульт отправит команду и один повтор, далее будет отсчитываться время для перехода в режим обучения. Режим обучения. В течение 6 секунд необходимо направить внешний пульт на фотоприемник и нажать необходимую кнопку. Удаление сохраненных команд.
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
|
||||