Речь в данной статье пойдет про проектирование оборудования, которое упрощает работу за компьютером. Предыстория моего небольшого проекта связана, совершенно неожиданно, со спектрумами, apple 2 и прочей ретрокомпьютерной техникой. Есть увлечение такое — ковыряться во всяком старье. Плюс делать это в прямом эфире на YouTube. Коллективный разум помогает чинить. После одного из стримов обратился подписчик с весьма необычной просьбой. Зовут его Александр и у него ДЦП. Соответственно, ему трудно работать на компьютере. А желание работать имеется, что не может не радовать.
Проблему работы с клавиатурой он решил самостоятельно ещё достаточно давно и в данный момент пытается развивать свой небольшой проект. Если в двух словах, то это накладка на клавиатуру, которая не позволяет нажимать одновременно несколько клавиш. Решение простое, но весьма эффективное.
Вернемся к просьбе. Она была весьма странной. Нужно попробовать переделать сломанный пульт от моторизированного кресла так, чтобы он управлял курсором.
Пока шла посылка, бегло изучил рынок. Цены на подобные устройства слегка очень сильно большие. И это при внешней примитивности решений.
Я их видел всего два: палка (25к рублей) и трекбол (13к рублей). Трекбол вообще стандартная штука. Разница только в форме корпуса, где вместо дизайна сделали упор на прочность. Вариант с палкой, при первом просмотре, показался мне тоже крайне примитивным, но, как выяснилось позднее, там были применены некоторые решения, упрощающие взаимодействие. А именно, кнопки были утоплены и имели форму конуса. В таком случае человек пальцем попадает в относительно большую область и "скатывается" к самой кнопке по этому конусу. Я пробовал обращаться в центр социальной поддержки с целью пощупать подобные устройства, но, увы, получил отказ. Их просто нет в наших краях. Тут появились первые мысли о разработке собственного варианта мыши.
Но пока про доработку. Пульт от моторизированного кресла очень похож на пульт от небольшого погрузчика. Десяток кнопок, лампочек и джойстик. Палка оказалась аналоговой, что позволяет узнать угол отклонения от центрального положения. Достаточно полезная функция, но дорогая. Ради совместимости с корпусом родную плату пришлось оставить, но все кнопки "оторвать" от схемы.
Всякие Arduino костыли с последовательным портом и софтом для преобразования команд в движение - не вариант. Надо делать правильно, USB HID. Это позволит использовать устройство без предварительных настроек в операционной системе с использованием стандартного драйвера. В том числе и на планшете с Android. Да даже в UEFI оно заведется. Справедливости ради, на Arduino такой вариант вполне можно сделать, но с аппаратными доработками (три резистора, два стабилитрона). Никто не мешает ногодрыгом общаться по USB, что вполне успешно делают те же usbasp (программатор AVR) и digispark (отладочная плата). Но есть более интересный вариант: микроконтроллер STM32F103C8T6. И на отладочной плате уже есть все, что нужно. Это были ещё те времена, когда их было легко достать и за недорого... За целых 15 минут (из которых 10 я качал и устанавливал среду для разработки) был накликан проект, который уже корректно определялся компьютером. Но пока ничего полезного не делал.
В данной статье рассказывать технические подробности с примерами кода я не буду. Как-нибудь в другой раз. Так что пропускаем процесс отладки кода. Скажу только то, что в первую очередь я отладил работу загрузчика (через USB), чтобы при обнаружении ошибки владельцем устройства была возможность удаленно её исправить. Ну и вход в загрузчик осуществлялся не аккордом из кнопок при подключении к USB провода, а просто долгим (10 секунд) нажатием на одну из кнопок.
Теперь поведаю о том, как в голове сформировалась картинка развития проекта. Нужно дешевое, прочное и, в идеале, ремонтопригодное изделие из доступных компонентов. Подходящие компоненты были найдены очень быстро. Тут нам помогают производители комплектующих к аркадным автоматам. Все ведь видели автоматы с игрушками в магазинах? Так эти аппараты выдерживают удары (один или два...) обиженных игроков, когда клешня опять все уронила. Эти джойстики и кнопки идеальное ведь решение! Подходят по всем критериям. Остается только заказать пару комплектов деталек и, пока оно едет, придумать корпус.
Джойстики от аркадных автоматов - это 4 микропереключателя, которые нажимаются при отклонении палки. Имеем максимум 8 направлений. Я предложил "заказчику" опробовать подобное дискретное управление на своем устройстве (сделал переключение режимов). Если в аналоговом режиме скорость движения курсора зависела от угла отклонения от центрального положения, то в дискретном уже от времени. Отзыв был положительный. Не знаю в плюсы это записывать или же в минусы, но стик издает характерные щелчки при срабатывании. Для пользователя это, скорее всего, плюс, а вот для окружающих… Не такой уж он и громкий, на самом деле.
Корпус, на самом деле, та ещё проблема. И я не говорю про дизайн. Из чего его делать то? Были мысли о фанере для прототипов и гибке металла для "серийного" образца. Но это уже похоже на "Создавать себе трудности и героически с ними бороться". Просто у меня был страх перед 3D печатью больших объектов. В начале пути DIY-щика побился головой о стену с принтером ANET A8. Сейчас то уже все отлажено, особенности знаем. Да и принтер посерьезнее появился. В общем начал проектировать корпус в tinkercad. По образцу пульта от моторизированного кресла: вертикально расположенный стик и кнопки на наклонной поверхности.
Расположение кнопок в пульте от кресла мне не понравилось от слова совсем. Если на основном своем месте работы они использовались относительно редко, то в мыши должны нажиматься постоянно.
Какая у мыши основная функция, кроме перемещения курсора? Клик левой кнопкой. Значит делаем её больше остальных. А сколько кнопок вообще нужно? Левая, правая, колесико. К слову, в заводских устройствах по три кнопки. Но ведь есть ещё прокрутка колесиком. Представьте сколько времени нужно, чтобы отвести курсор до полосы прокрутки, нажать на перемещение и вернуть курсор обратно? Много. Значит делаем ещё две дополнительных кнопки. Это не сильно увеличит итоговую стоимость устройства, но комфорт прибавить вполне может.
Корпус разделен на две части. Основная причина, разумеется. монтаж компонентов и обслуживание. Должен быть удобный доступ к начинке. Но разделение выбрано именно таким образом, чтобы при минимуме времени и ресурсов можно было экспериментировать с расположением кнопок. Вполне вероятно, что мое представление об удобстве будет отличаться от тех, для кого ведется разработка.
Итоговый вид прототипа получился следующим.
Пока нет ни схемы, ни печатной платы. Все держится на МГТФ. Да и код показывать пока стыдно, но линк на репозиторий все же оставлю.
Тут минутка внезапной почти рекламной интеграции. На конференции «Свободное программное обеспечение в высшей школе», которая в июне 2021 проходила в городе Переславле-Залесском (ИПС им. А.К. Айламазяна РАН), нашел заинтересованных людей, к которым на тестирование отправился один из экземпляров устройства. Посещать конференции - крайне полезно. Новые знакомства и вообще непонятно в каком направлении пойдет обсуждение в перерывах между докладами.
Разумеется, надо озвучить примерную стоимость устройства.
-
Аркадный стик — 600 руб.
-
Комплект кнопок — 200 руб.
-
Отладочная плата с STM32F103C8T6 — не хочу даже смотреть актуальную цену. 2021, хватит...
-
Провода, разъемы — 200 рублей.
-
20 часов печати принтера
Теперь о планах. Прототип работает, но все настройки в данный момент прописаны жестко. И это надо исправлять. А настроек, на самом деле, не так уж и мало. От смены функций клавиш до тонкой подстройки скоростей курсора (ограничение максимальной скорости, сброс скорости при смене направления, ускорение...). Все это нужно нужно прописывать приложением на компьютере и хранить в самом устройстве. Соответственно, мышь должна дорасти до комозитного USB устройства, состоящего из минимум двух: мыши и Custom HID для управления. Возможно, стоит добавить ещё режим джойстика. По форме оно вполне подходит, а иногда развлекаться хотят все.
Разумеется, в комментариях приветствуется идеи и конструктивная критика.
Автор: Sergey V. Karpesh