092-Универсальный обучаемый пульт.

Автор: | 05.12.2012


Давно хотел себе заиметь небольшой пульт для управления различной бытовой техникой. И вот, наконец, дошли руки, и хватило свободного времени для создания своего универсального пульта! Постарался сделать его поменьше, поудобней, покрасивей… в общем смотрите что получилось!


1 Принцип работы.

Универсальные пульты, имеющиеся я в продаже, в большинстве своем, работают по принципу предустановленных IR-команд. То есть в памяти пульта записана большая база протоколов различных пультов и для выбора нужного вбивается его код (книжечка с кодами прилагается к пульту).  Плюсом такого подхода есть то, что для настройки всех клавиш пульта нужно набрать один код. Недостаток очевиден – пульт сможет работать только с той бытовой техникой, от которой у нее есть команды, записанные в память (для случая, если в книжечке не нашлось нужной модели бытовой техники, производитель универсального пульта рекомендует пробовать ближайшие подходящие по модели или вообще все подряд).

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

Конечно, есть ограничения, и некоторые пульты не могут быть изучены по объективным причинам:
— обучаемый пульт воспринимает IR-посылки TSOPом работающем на частоте 36 или 38 кГц (подавляющее большинство пультов работает именно в этом диапазоне) — это не дает возможности воспринять посылку от пульта который работает на несущей сильно отличающейся от несущей TSOP (например, 30 или 56 кГц);
— протоколы пультов с обратной связью (например, как у кондиционеров), по понятным причинам, не могут быть воспроизведены;
— нестандартные протоколы, которые имеют специфическое построение IR-команды (например, команда разбита на несколько посылок).


2 Конструкция пульта.

Обучаемый пульт представляет из себя небольшую коробочку с сенсорным клавишами. Питается вся конструкция от трехвольтовой батарейки 2032 . На корпусе имеется 9 сенсорных клавиши, 6 из них служат для управления техникой (клавиши пульта) и оставшиеся 3 – для выбора набора команд (соответственно, можно записать и воспроизвести до 3х наборов команд по 6 команд). Еще есть тактовая кнопка для переходов между режимами работы. Конструктивно пульт состоит из двух плат:
— первая – плата управления – это универсальная плата, собранная нами ранее;
— вторая – плата сенсоров (ее описание Вы найдете ниже по тексту).
Обе платы соединяются между собой при помощи разъемов, образуя цельную компактную конструкцию.


2 Схема пульта (шилда универсального пульта).

Remote-Scheme.spl7 - Схема универсального пульта

На рисунке показана схема универсальной платы вместе с шилдом обучаемого пульта.  На базовой плате могут быть установлены разные микроконтроллеры из серии ATmega48/88/168. Компоненты схемы не критичны по номиналам и допускают небольшое варьирование. Наверное, придется подобрать гасящий резистор для IR-светодиода. Чем меньше значение этого резистора — тем мощнее сигнал пульта, но быстрей будет садится батарейка.

Изначально пульт планировалось питать от трех батареек размера ААА, которые располагались бы в батарейном отсеке, прикрепленному снизу пульта, но полевые испытания показали, что небольшой батарейки 2032 на 3 вольта, вполне достаточно для удовлетворительной работы. Конечно, несколько уменьшается мощность IR-сигнала, но остается в приделах комфортной работы. В связи с этим была немного изменена печатка платы сенсоров, куда было добавлено место для крепления батарейки 2032.

Но нужно учитывать, что не все TSOPы способны работать при напряжении питания 3в. Если Ваш TSOP не заработал от 3х вольт, или Вам нужен мощный IR-сигнал, способный работать на больших расстояниях, отражаясь от стен и потолка, то прикрепите батарейный отсек на три батарейки типа ААА к низу пульта (закрытый батарейный отсек даже не испортит внешнего вида) и Вы получите мощный пульт и продолжительную работу.


3 Печатная плата

Как собрать плату управления – ранее я уже писал — читаем. Изготовление печатной платы шилда обучаемого пульта может представлять некоторую сложность по причине относительно тонких дорожек и больших полигонов сенсорных площадок. После протравки и лужения платы обязательно нужно просмотреть/прозвонить все дорожки на предмет обрывов и замыканий между собой.
Здесь оставляю разводку базовой платы и платы шилда пульта вместе с боковыми стенками в одном месте (для удобства изготовления всех плат за один раз).

Remote-PCB.lay - Рисунок печатной платы пульта


4 Сборка конструкции

После того как Вы убедились в целостности дорожек шилда – запаеваем компоненты. Особо там паять нечего, но есть некоторые нюансы:
— индикаторные SMD светодиоды (их два в параллель) нужно паять боком, для того, чтобы их свечение было видно сквозь плату.

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

Кстати, светодиоды не обязательно должны быть SMD. Можно просверлить в удобном месте платы отверстие и установить туда обычный светодиод, проводами дотянув к нему питание.

— Еще один проблемный для монтажа элемент – пьезоизлучатель. Габариты пьезоизлучателя не позволяют его установить в каком либо определенном месте (он просто не помещается), поэтому к его установке придется подойти творчески. Я, например, обрезал ножницами  стандартную пьезопластинку  до удобных размеров и припаял пластинку в нижней части пульта.

Если с пьезоизлучателем ничего не получается, вместо него можно установить светодиод, не забыв последовательно с ним поставить гасящий резистор (300 – 1000 Ом).

— Плата сенсоров имеет три боковые стенки, припаиваемые перпендикулярно (четвертая торцевая стенка паяется к универсальной плате). При соединении универсальной платы и платы сенсоров боковые стенки не должны затирать или клинить друг между другом. Для этого необходима подгонка плат между собой  — придется поработать напильником :).


5 Прошивка микроконтроллера

Прошивается базовая плата через стандартный разъем для программирования ISP-6 (он средний с боку базовой платы).
ULRemote.hex - Прошивка универсального пульта ATmega88
fusebits88.png - Фьюзы универсального пульта ATmega88
Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.


6 Декорирование пульта. Изготовление и крепление сенсорной панели.

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

Я выбрал способ, описанный в статье по созданию сенсорной панели. Распечатал при помощи цветного лазерного принтера на самоклеющейся бумаге рисунки передней и задней панели пульта, приклеил рисунки на пульт и покрыл сверху защитным слоем (приклеил сверху широкий скотч).

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

Вот вам несколько общих вариантов дизайна клавиш.

092-Дизайн3+.doc - Рисунки сенсорных панелей для пульта (DOC)


6 Работа обучаемого пульта

Пульт готов, теперь расскажу как с ним работать.

Для начала ознакомления с работой пульта — элементы управления:


— аппаратная (контактная) клавиша Set служит для различных целей, но главные — переход между режимами работы, усыпление пульта и вывод его из сна;
— индикаторные Led (на картинке он немного не на своем месте, но все течет, все меняется …) служит для индикации различных режимов работы + подсветка сенсоров;
— сенсорные клавиши смены программ и изменения уровня имеют автоповтор (функции: громкость, переключение каналов, яркость, тембр, …);
— сенсорные клавиши Power и Mute не имеют автоповтора (нужны для единичных действий: включить-выключить, открыть-закрыть, …);
— сенсоры выбора группы команд делают активным один из трех возможных наборов (по 6 штук) команд-сенсоров (например: 1-телевизор, 2-усилитель, 3-свет) ;
— еще есть пьезоизлучатель Buzzer (внутри корпуса), он озвучивает нажатия клавиш и выполняет ряд других действий.

Вот теперь сам алгоритм работы:
— При первом включении пульта (подаче питания), он начнет процедуру автоматической настройке сенсоров. Перед настройкой, с небольшими паузами, прозвучат два длинных и один короткий сигнал. Сразу после короткого сигнала сенсоры автоматически настроятся.  В момент автоматической настройке сенсорные площадки должны быть свободными. — Далее пульт переходит в режим воспроизведения команд из первой группы команд. Прозвучит длинный пииик и сразу за ним короткий (первый набор команд). Загорится Led. Если теперь нажимать сенсоры выбора группы команд то будет звучать длинный пииик и, сразу за ним, в зависимости от номера группы, количество коротких. Переключатели групп команд во всех режимах работают одинаково.
— При нажатии в режиме воспроизведения сенсоров команд, будет издаваться короткий звуковой сигнал (пик) и выдаваться IR-команда.
— Если пульт не трогать некоторое время он сам перейдет в режим сна. В режим сна можно ввести пульт принудительно нажав кратковременно Set. Кратковременное нажатие на Set в режиме сна просыпает пульт и он просигналит номер активной группы команд (чтобы лишний раз не тыкать пальцем 😉 ).
— Если в режиме воспроизведения длительно зажать Set, то пульт перейдет в режим обучения, издав два коротких сигнала, и Led начнет постоянно мигать. При нажатии на любой сенсор — светодиод погаснет, прозвучит длительный сигнал и пульт будет ждать IR-посылку от оригинального пульта. Если посылка получена, прозвучит длинный сигнал, пульт запомнит команду и вернется в режим обучения. Если посылки долго нет — прозвучит короткий сигнал и пульт перейдет в режим обучения самостоятельно. Еще, ожидание IR-посылки можно отменить кратковременным нажатием Set. В режиме ожидания IR-посылки оригинального пульта можно выбирать другие сенсоры или группы. Действия сенсоров-селекторов аналогично режиму воспроизведения. 
— Возвратится назад в режим воспроизведения можно длительно зажав Set (последуют два коротких сигнала) или, спустя некоторого времени бездействия, пульт сам перейдет в режим воспроизведения.


7 Решение проблем. Отладка конструкции.

Сенсоры устройства являются самым тонким и чувствительным элементом конструкции. Они нуждаются в аккуратном изготовлении (не смытый флюс или грязь на плате способны значительно ухудшить или даже сделать невозможным работу сенсоров) и точной настройке. В программе были приняты меры делающие работу сенсоров более надежной:
— при старте, программа проверяет линии сенсоров на отсутствие К.З. В случае, когда на сенсорах будет находиться напряжение питания (худший вариант, который может привести к «выгоранию» портов микроконтроллера) программа остановит свое выполнения и выдаст сигнал ошибки;
— при старте программа автоматически настраивает чувствительность для каждого сенсора отдельно;
— при удачной инициализации портов сенсоров и первой настройке чувствительности срабатывания сенсоров программа запишет уровни чувствительностей для всех сенсорных площадок в EEPROM с первого адреса (нулевой адрес – общая чувствительность) в порядке:

EEPROM:
&01 Up
&02 Down
&03 Plus
&04 Minus
&05 Power
&06 Mute
&07 Sel1
&08 Sel2
&09 Sel3
Прочитав при помощи программатора таблицу чувствительности из EEPROM можно косвенно оценить качество работы сенсоров и диагностировать проблемы с их работой.

А именно:
— Нормальная чувствительность лежит в пределах значений: 20-50. Эти значения не являются абсолютными, так как на чувствительность сенсоров влияет очень много факторов:
— Значения близкие к 0 говорят о том, что сенсорная площадка имеет утечки на «+питания» (КЗ не может быть, так как программа в этом случае просто не начнет работать (будет непрерывно выдаваться сигнал ошибки). Причиной утечек может быть плохо очищенная плата, «сопли» между дорожками, не той величины (меньше 1 Мом) подтягивающие резисторы сенсоров, плохо протравленные промежутки между дорожками на плате.
— Значения близкие к 255 говорят об утечках на «землю» (вплоть до КЗ), или обрыве в цепи сенсорная площадка – ножка микроконтроллера, или обрыве подтягивающего сенсор резистора (тот, который 1 Мом). Причинами утечек на «землю» могут быть: плохо отчищенная плата; «сопли» между дорожками; плохо протравленные промежутки между дорожками на плате.
— Величины чувствительностей сенсоров должны быть примерно одинаковыми. Слишком большой разброс значений хотя и не является однозначным показателем неправильной их работы (сенсоры обрабатываются и подстраиваются индивидуально), но указывает на то, что существуют какие-то проблемы.

Для случая ненадежной работы сенсоров, по нулевому адресу EEPROM, при помощи программатора, можно вручную задать общую чувствительность всех сенсоров. При этом нулевое значение соответствует максимальной чувствительности, 19 – минимальная, значения больше 19 будут устанавливать чувствительность по умолчанию – 5.

EEPROM:
&00 Sensitivity

При прошивке пульта, EEPROM очищается и все ячейки (в том числе и нулевая) получают значения 255, что автоматически устанавливает номинальную чувствительность.


8 Шилд для Arduino

Так как пульт собран на микроконтроллере используемым в платах типа Arduino, Freeduino и им подобных, логично сделать шилд универсального пульта и для них. На данный момент такого шилда я еще не разводил (не дошли руки), но если у Вас это получится сделать быстрей (и опробовать на работоспособность) – присылайте материалы и я с удовольствием выложу их в этой части статьи. Вот, в помощь, основа платы шилда Arduino в Sprint Layout:
Arduino-pin.lay - Заготовка шилда Arduino (Sprint Layout)


Дополнительные материалы:

Топик форума, где велась разработка пульта — можно почитать дополнительные материалы.
Топик обсуждения пульта на форуме.
Remote-Scheme.spl7 - Схема универсального пульта
Remote-PCB.lay - Рисунок печатной платы пульта
ULRemote.hex - Прошивка универсального пульта ATmega88
fusebits88.png - Фьюзы универсального пульта ATmega88
092-Дизайн3+.doc - Рисунки сенсорных панелей для пульта (DOC)
GCn Remote 2.zip - Исходник прошивки универсального пульта

(Visited 3 758 times, 7 visits today)

There are 98 comments

Комментарии подгрузятся после небольшой паузы.