Управляем компьютером при помощи пульта и Arduino
Вступление
После некоторых раздумий, решил, что второму посту про поделки на Ардуино все-таки быть.
Для тех, кому не интересны офигительные истории и процесс разработки, а просто хочется посмотреть на работу устройства, просто перемотайте на заголовок «Скучная часть окончена» или «Демонстрация». Все остальные могут читать далее.
Предвидя некоторые комментарии, скажу, что цель поста просто повеселиться, с технической точки зрения, и получить немного нового опыта. На премию «изобретение века» не претендую и это не do it yourself. Хотите – делайте, не хотите – не делайте. Просто пост о моем опыте возни с железками и кодом.
Вдохновился я на это изделие при повторном просмотре закрывателя окон от Alex Gyver (https://alexgyver.ru/gyvertripper/ тут и его видео и его исходники, очень круто сделано, я вдохновлялся именно этой поделкой), но в отличии от этого проекта, я решил сделать управление под свои нужды и без радио модулей.
Все, как и в предыдущем посте, поделено на две основные части – железная и программная (Hardware, Software).
Железки (Hardware)
Еще в конце прошлого года я получил набор модулей для Arduino, среди которых были как интересные модули, которых я ранее не видел, так и те, что кладут в стартовом наборе. Одним из таких модулей был ИК (IR) приемник. На картинке ниже его хорошо видно.
Многие тут скажут, что в стартовый набор часто кладут такой трехногий приемник без платы, он отлично работает и ничего особого в отдельно распаянном модуле нет. От части вы правы, но есть пара интересных вещей... У модуля есть две очень приятные особенности.
1) На плате модуля распаян светодиод с резистором, и когда на включенный модуль приходит сигнал с порта, светодиод сигнализирует. Что позволяет быстро понять, пришел сигнал или нет.
2) Расческа в виде пинов. Лучше чем голый модуль, потому что удобнее вставлять в макетку и вытаскивать из нее, а еще если проект состоит только из светодиода, то можно обойтись проводами папа-мама (ну или другой вариацией, если контакты для макетирования выведены не клипсами, а тоже расческами, как это обычно бывает на моделях Nano)
Понятно, что у модуля есть и жирный минус в виде его громоздкости, но я занимаюсь этим только в виде хобби и поэтому для меня модули, с возможностью «тихо сзади подошел, быстро вставил и пошел» - самое то.
Имея этот модуль, Ардуино плату, пульт из стартового набора и ноут, я решил, что можно поуправлять компом при помощи пульта.
Пульт взял из стартового набора:
Выглядит не очень, но выполняет свою функцию отлично.
Вот собрали мы нашу схему. Она изображена ниже. Взял из интернета, потому что уже готовая схема вполне наглядна и придумывать что-то свое нет смысла. Еще ниже приложу фото того, как оно выглядит у меня в сборке (отказался от макетки, потому что эта конструкция нужна мне переносной).
Чем мне нравится весь мир инженерии, так это тем, что одну задачу можно решить большим количеством способов. Причем, иногда, чем проще задача, тем больше способов решения. Наша текущая задача – не исключение.
Есть два основных способа управления, которые приходят на ум
1) Использовать плату Ардуино как HID устройство. Получать сигнал и обрабатывать его на стороне микроконтроллера, проводя дальнейшие действия с компьютером как клавиатура.
2) Обрабатывать все пришедшие сигналы на стороне компьютера. Тогда пространство для манипуляций расширяется и можно гораздо легче автоматизировать запуск дополнительных скриптов.
Ну и конечно же можно совместить оба способа, никто не запрещает, но это уже план на будущее, на исполнение которого пока что нет особых желаний и времени.
Первый способ отлично продемонстрирован и успешно работает в вышеупомянутой самоделке от Alex Gyver, который, в свою очередь, воспроизвел данную поделку по методу реверс инжиниринга одного проекта зарубежного электронщика. Поэтому, для себя я выбрал второй вариант.
Уверен, что на рынке достаточно готовых и не дорогих решений, поэтому напомню, что делалось это не чтобы сэкономить и получить готовое устройство, а чтобы самому повозиться и сделать что-то свое.
Программки (Software)
Поскольку я выбрал второй вариант, код для самого микроконтроллера будет очень простым. Я просто использую готовую библиотеку и с ее помощью буду расшифровывать сигнал с приемника и отправлять в Serial. Простота этого кода предусматривает использование абсолютно любого другого пульта и никак не привязывается к командам одного пульта.
Дело осталось за обработкой команд на стороне компа. Я решил использовать язык Python, потому что часто его использую в других проектах и в работе. При помощи не хитрой библиотеки я настроил проверку com порта и обрабатывал полученные коды. На каждый код я запрограммировал определенные действия и нажатия хоткеев в системе Windows.
Отступление
На этом можно было бы закончить пост, продемонстрировать работу и заниматься личной жизнью. Если это было бы 2 или 3 месяца назад, когда мне и пришел набор с этим модулем. Но недавно я опубликовал свой пост про упрощение модуля матрицы из стартового набора и увидел, что некоторым людям такие посты интересны, после чего понял, что мне самому интересно писать о подобных вещах, поэтому пару дней назад я решил доработать программу, чтобы ее было не так стыдно показывать людям.
Было принято решение доработать программу и сделать графический интерфейс для тех, кто не сильно хочет заморачиваться и вникать в код программы под саму Windows. Для создания графической части программы я использовал QtDesigner и библиотеку PySide2. За несколько часов разработал интерфейс и начал реализовывать управление. Суммарно на все переработки и доработки я потратил часов 10. Было очень интересно создать такую вещь, которой можно было бы пользоваться, просто запуская исполняемый EXE’шник. Протестировав и собрав приложение, я решил выпустить официальный релиз на GitHub. Весь код для Ардуино и исходники приложения лежат в моем репозитории, они открыты и вы можете дорабатывать проект напильником по своему вкусу. Ссылка на репозиторий - https://github.com/donexdoc/Remote-IR.
Скучная часть окончена
Инструкция по использованию доступна на странице репозитория.
Основная функция программы – перехватывать код из сообщения и сохранять себе в память, назначать на полученные коды разные команды. Список команд пока не очень большой:
1) "media_prev" - предыдущий медиа файл,
2) "media_next" - следующий медиа файл,
3) "media_play_pause" - запустить/поставить на паузу медиа файл,
4) "vol_down" - уменьшить громкость,
5) "vol_up" - увеличить громкость,
6) "lock_screen" - заблокировать экран,
7) "fast_clean" - свернуть/развернуть все окна (win + d),
8) "empty" - заглушка, ничего не выполняет.
Демонстрация
Звук из видео удалил, потому что все равно тестировал в наушниках и на фоне шумели домашние. Но на виджете винды видно, что ползунок громкости меняется.
Как можно улучшить
Как уже повелось с первого поста, я опишу, как я мог бы улучшить это все.
1) Использовать проект в гибридном режиме (как виртуальную клавиатуру и как сигнальный механизм), это позволит расширить функциональность проекта до многофункциональной клавиатуры с возможностью запуска скриптов (аля стримпад).
2) Добавить больше функций для выполнения.
3) Добавить возможность запуска своего скрипта/программы.
4) Добавить возможность написания своих инструкций (переместить мышь по x и y координатам, нажать на кнопку «H» и т.д.)
5) Переместить все железки в меньший размер и использовать какую-нибудь Digispark плату с тинькой, чтобы это не занимало много места и было удобно использовать в повседневе дома.
И, опять же, это только то, что сейчас приходит на ум чисто навскидку. Поэтому улучшать можно до бесконечности.
Как показала практика, штука оказалась не такой уж и бесполезной как я предполагал. Я использую ее, когда вечером с семьей смотрим фильм, подключая к телевизору на кухне, за ужином. Удобно регулировать громкость и ставить на паузу.
На этом все. Надеюсь, что не мне одному хотелось поуправлять компом при помощи пульта, и этот пост окажется для кого-то полезным. Пока не знаю, стоит ли еще что-то делать, идей пока особо грандиозных нет. Но если было интересно, дайте знать в комментариях, а может у вас есть какая-то идея – предложите. У меня скромный набор железок, но кое-что собрать можно).
Рукодельники
60.4K пост60.3K подписчиков
Правила сообщества
В сообществе запрещена торговля, обсуждение цен, ссылки на страницы с продажами, контакты автора в комментариях. Обязательна информация о материалах и инструментах в текстовом виде.
0. Соблюдайте основные правила Пикабу.
1. Будьте вежливы, старайтесь писать грамотно.
2. В публикациях используйте четкие и красивые фотографии.
3. Автор поста с тегом [моё] может оставить ссылку на свой профиль, группу или канал на других источниках, при условии, что ссылки (активные и не активные) не ведут на прямые продажи. Допускается не больше четырёх ссылок и только в конце поста (п. 8.5 основных правил).
Запрещены:
-ссылки рекламного характера/спам;
-ссылки, ведущие на магазины с указанием стоимости товара/услуги;
-ссылки, ведущие на призывы, покупки, продажи, подписки, репосты, голосование и тому подобное.
(нарушение основных правил сайта, п.8.1 и п. 8.2).
При переходе по ссылке запрещено наличие активных (кликабельных) ссылок, ведущих на вышеперечисленное в п.3, содержание таких ключевых слов как «товар», «услуга», «купить», «продам», «в наличии», «под заказ» и т.п.
3.1 Размещение контактов автора (самим автором или другими пользователями) в комментариях запрещено и подлежит удалению (п. 9.1 и 9.3 основных правил).
4. Обязательным для авторов является наличие технических характеристик изделия в публикациях (материалы, техники, авторские приемы, размеры, времязатраты и прочее) в текстовом виде.
Также помечайте свою работу тегом «Рукоделие с процессом» или «Рукоделие без процесса».
5. Пост-видео, пост-фото без текстового описания переносится в общую ленту. Даже если в видео показан подробный процесс изготовления, делайте краткое описание для тех, у кого нет возможности/желания смотреть видео.
Администрация оставляет за собой право решать, насколько описание соответствует п. 5.
6. Посты с нарушениями без предупреждения переносятся в общую ленту.
За неоднократные нарушения автор получает бан.
Автор может размещать новую публикацию в сообществе, не допуская полученных ранее замечаний.