Вот и я задумался. Идея пришла буквально за пару секунд, когда меня попросили посидеть в роли помощника, а мне было лень переключать слайды скучной презентации без картинок.
Я решил объединить ИК-пульт (взял от проектора) + ИК-приёмник из закромов + микроконтроллер AVR + плату от побитой жизнью USB-клавиатуры ПК. Так родилась в моей голове мысль об «инфракрасной клавиатуре» всего на пару клавиш: чтобы нажатие кнопок на ИК-пульте вызывало отрабатывание нажатий кнопок «PgUp» и «PgDn» клавиатуры ПК.
Хм, звучит неплохо. К делу!
Содержание статьи / Table Of Contents
↑ Путь от идеи к началу проектирования
Так как для переключения слайдов достаточно двух кнопок, я решил использовать кнопки «Вправо» и «Влево» от пульта, как команды «Следующий слайд» и «Предыдущий слайд» соответственно.
Ещё задействовал центральную кнопку как «Следующий слайд», для удобства – ведь она самая крупная и чаще всего используется.
Осталось узнать, по какому протоколу работает пульт, чтобы использовать в программе МК. В Интернете, к сожалению, для этого пульта такие тонкости не описаны. Осциллографа у меня нет. Собирать дешифратор команд лень.
И тут пришла ещё одна бредовая идея! Использовать аудиокарту компьютера плюс любой редактор аудиофайлов как осциллограф. Всё просто, входные ёмкости карты пропускают частоту в диапазоне примерно от 30 Гц до 16 кГц, т.е. скорости должно хватить для захвата сигнала от ИК-приёмника, который я добыл для этого проекта из горелого ресивера.
ИК-приёмник для пультов ДУ
Подал питание на ИК-приёмник, а его выход подключил на микрофонный вход аудиокарты через регулятор громкости (он же делитель на резисторах). Поставил на запись микрофонный канал, начал нажимать на кнопки пульта и мне повезло, частота ИК излучателя пульта (а она может быть от 36 до 40 кГц) от проектора совпала с ИК-приёмником и я увидел на экране колебания!
Наигравшись, я увеличил масштаб и отчётливо увидел бинарный код, который шлёт пульт ДУ. Отправляет он два одинаковых пакета подряд, таким образом, разработчики Epson повысили надёжность передачи команды и принятие её проектором. Если зажать кнопку на пульте, то пакеты сыпятся подряд и это пища для раздумий при написании программы обработчика таких команд, об этом позже.
Используя инструмент программы «Выделение» я узнал ширину импульсов в миллисекундах и пришёл к выводу, что пульт работает по протоколу, похожему на протокол NEC. У пакета имеется стартовый бит в 9 мс, пауза в 4,5 мс, далее идёт адрес из 2-х байт и команда, ещё из 2-х байт, логическая единица передаётся в течении 2,25 мс, а логический ноль 1,12 мс.
В общем, благодаря самодельному «осциллографу», я узнал адрес пульта и коды нужных мне кнопок. Как видно на фото с пультом, на фоне валяется пульт от ресивера «Openbox», который я также внёс в программу, для тестов. Пусть будет, всё равно у него оказался такой же протокол NEC.
↑ Схемы ИК-клавиатуры для презентаций
Хотел я использовать «мелочь пузатую» - микроконтроллер ATTiny13, но на практике стало понятно, что его встроенная RC-цепочка сильно «гуляет» по частоте при изменении температуры окружающей среды, и питания, и ещё неизвестно от чего, так то всё работает не стабильно. Это не допустимо для таймера захвата импульсов от ИК-приёмника, который должен работать строго и точно. Пришлось взять микроконтроллер «пожирнее», Tiny26. Он и с кварцем работает, и памяти в 2 раза больше, да и в случае надобности увеличения количества кнопок, выводов у него тоже хватит. Так появилась принципиальная схема. Дроссели играют роль больше перемычек, нежели фильтров.Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Настала пора мучить USB-клавиатуру ПК. Я разобрал её, вытащил плату и рассмотрел всё под яркой настольной лампой. В ней есть плёнка с кнопками, плата и USB-провода. Взяв плёнку клавиатуры, и проследил по ней путь от кнопок PAGE UP и DOWN до контактов платы.
Взял за хвост плату клавиатуры и увидел, что дорожки на плёнке привели меня к контактам C13+R7 для PAGE DOWN и C13+R6 для PAGE UP. Подключил платку клавиатуры к компьютеру, замкнул пинцетом найденные контакты. Сработало, значит, не ошибся!
Решил уменьшить габариты платы и убрать ненужные контакты, сделал разметку, проверил, что нужные дорожки сохранены, и давай её пилить.
Пока пилил, задел контакт ёмкости сверху слева, но ничего, позже припаял её через тонкий проводок. Надфилем допилил плату и вмонтировал на основную печатную плату, которую вытравил с помощью технологии ЛУТ (тут впервые я решил не лудить дорожки, так плата выглядит красивее на мой взгляд). Корпус взял от завалявшегося брелока для поиска ключей. Это который - посвистишь, и он в ответ начинает пикать.
↑ Программная часть
На момент сборки схемы в магазине не оказалось кварца на 4МГц, пришлось брать на 4.096МГц, зато частота кратна 8, что немного облегчило мне процедуру расчёта скорости работы таймера захвата, который работает ровно на 16 кГц. В принципе, разность частоты составляет всего 2,4%, что теоретически позволяет использовать кварц на 4 МГц (в Proteus всё прекрасно работает на обоих кварцах).В любом случае, проверить это на практике я уже не смогу, а подогнать таймслоты всегда можно используя исходник.
Для этого в начале программы есть макросы соотношения микросекунд на 1 единицу (62.5 us / 1):
//временные пороги импульсов от ИК датчика
#define START_IR_MAX 224 // 14.0ms (62.5us / 1)
#define START_IR_MIN 208 // 13.0ms
#define BIT_IR_MAX 40 // 2.875ms
#define BIT_IR_MIN 30 // 1.625ms
Также ниже прилагаю файлы демонстрационного стенда на Протеусе, там для наглядности работы эмулирован пульт ДУ и ИК приёмник.
Немало времени я потратил на обработку команд от пульта, которые сыпятся пачками, если держать любую кнопку, и в итоге решил поставить задержку на 240 мс между отправкой компьютеру команд на переключение слайдов. Задержку можно сменить в начале программы:
//интервал между импульсами отправки команды компьютеру
#define KEY_SPEED 120 //интервал в мс * 2 (120*2=240мс)
Программа занимает всего 28% флеш памяти. Все строки исходного кода прокомментированы.
Фьюзы настроены лишь на тактирование от внешнего кварца, остальные фьюзы заводские.
К сожалению, какие именно фьюзы надо выставлять, касаемо тактирования от кварца, привести я не могу, т.к. использую для прошивки программу AVR Studio 4, а в ней есть готовые варианты источников тактирования.
Но думаю это не так критично.
↑ Наладка устройства
Наладка заключается лишь в перекомпилировании исходника под свой пульт, который у каждого разный, для этого в конце программы есть условный оператор «if», который и отвечает за фильтрацию команд. Печатная плата начинает работать сразу после подключения к компьютеру.//проверка адреса команды от ПДУ
if((temp[0]==193 && temp[1]==170) || //ПДУ от проектора
(temp[0]==64 && temp[1]==64)) //ПДУ от openbox hd-1
{
//была нажата кнопка PAGE_UP или UP на ПДУ
if((temp[2]==208 && temp[3]==47) ||
(temp[2]==97 && temp[3]==158) ||
(temp[2]==13 && temp[3]==242)) //97/158//13/242
{...}
На момент тестирования устройства, я долго недоумевал, почему при точном расчёте времени таймера захвата, ИК-приёмник срабатывал через раз. Как я не бился, всё никак. Оказалось, у меня настольная лампа оборудована лампочкой дневного света, и она, заррраза, мерцает! Тем самым, свет от неё попадая на ИК-приёмник, создавал в нём помехи, ведь технология передачи сигнала от пульта до ИК-приёмника использует несущую модуляцию в диапазоне 36-40 кГц. Не хилый такой подводный камень!
↑ Файлы
🎁Прошивка для заливки (hex) 865 b ⇣ 21🎁Программа в CodeVision AVR 3.12 (исходники) 75.68 Kb ⇣ 23
🎁Демо проект для опытов в Proteus v8.4 SP0 46.36 Kb ⇣ 22
🎁«Осциллограмма» в mp3-файле (открывать в любом аудиоредакторе) 469.09 Kb ⇣ 20
🎁Печатная плата в SprintLayout v6.0 22.43 Kb ⇣ 28
↑ Заключение
Как ещё можно использовать ресурсы применённого микроконтроллер? Можно было добавить функцию обучения, дабы принимать команды от почти любого пульта и помнить его адрес + коды команд. Но, разнообразие пультов огромно и протоколы у многих собственные. На такую функцию у меня ушло бы много времени, а меня поторапливали, и я отдал устройство в работу. Да и пультов у меня дома всего пара: нечем и не на чем всё это дело проверять.Но мой проект изначально был нацелен на одну конкретную задачу, которую он целиком выполняет: теперь лектор сам листает презентацию в нужный ему момент. Нажатие кнопок на пульте вызывает отрабатывание нажатий кнопок «PgUp» и «PgDn» клавиатуры ПК.
А ещё проект несёт учебный характер, код закомментирован, а кнопки клавиатуры ПК вы можете выбрать сами.
На этом всё. Благодарю за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.