Речь в данной статье пойдет про проектирование оборудования, которое упрощает работу за компьютером. Предыстория моего небольшого проекта связана, совершенно неожиданно, со спектрумами, apple 2 и прочей ретрокомпьютерной техникой. Есть увлечение такое — ковыряться во всяком старье. Плюс делать это в прямом эфире на YouTube. Коллективный разум помогает чинить. После одного из стримов обратился подписчик с весьма необычной просьбой. Зовут его Александр и у него ДЦП. Соответственно, ему трудно работать на компьютере. А желание работать имеется, что не может не радовать.
Проблему работы с клавиатурой он решил самостоятельно ещё достаточно давно и в данный момент пытается развивать свой небольшой проект. Если в двух словах, то это накладка на клавиатуру, которая не позволяет нажимать одновременно несколько клавиш. Решение простое, но весьма эффективное.
Вернемся к просьбе. Она была весьма странной. Нужно попробовать переделать сломанный пульт от моторизированного кресла так, чтобы он управлял курсором.
![Внешний вид пульта до доработки (хотя и после он выглядит так же) Внешний вид пульта до доработки (хотя и после он выглядит так же)](https://habrastorage.org/getpro/habr/upload_files/cd9/a4c/60a/cd9a4c60ae2f614cd63bdba1b42a62cf.png)
Пока шла посылка, бегло изучил рынок. Цены на подобные устройства слегка очень сильно большие. И это при внешней примитивности решений.
![SimplyWorks Joystick SimplyWorks Joystick](https://habrastorage.org/getpro/habr/upload_files/0c9/dc1/f96/0c9dc1f9618ec913452d961aa95fbfa3.jpg)
Я их видел всего два: палка (25к рублей) и трекбол (13к рублей). Трекбол вообще стандартная штука. Разница только в форме корпуса, где вместо дизайна сделали упор на прочность. Вариант с палкой, при первом просмотре, показался мне тоже крайне примитивным, но, как выяснилось позднее, там были применены некоторые решения, упрощающие взаимодействие. А именно, кнопки были утоплены и имели форму конуса. В таком случае человек пальцем попадает в относительно большую область и "скатывается" к самой кнопке по этому конусу. Я пробовал обращаться в центр социальной поддержки с целью пощупать подобные устройства, но, увы, получил отказ. Их просто нет в наших краях. Тут появились первые мысли о разработке собственного варианта мыши.
Но пока про доработку. Пульт от моторизированного кресла очень похож на пульт от небольшого погрузчика. Десяток кнопок, лампочек и джойстик. Палка оказалась аналоговой, что позволяет узнать угол отклонения от центрального положения. Достаточно полезная функция, но дорогая. Ради совместимости с корпусом родную плату пришлось оставить, но все кнопки "оторвать" от схемы.
![То, что скрыто от глаз То, что скрыто от глаз](https://habrastorage.org/getpro/habr/upload_files/4d8/df2/533/4d8df25339e5c1f397203a3f6ac69b35.jpg)
Всякие Arduino костыли с последовательным портом и софтом для преобразования команд в движение - не вариант. Надо делать правильно, USB HID. Это позволит использовать устройство без предварительных настроек в операционной системе с использованием стандартного драйвера. В том числе и на планшете с Android. Да даже в UEFI оно заведется. Справедливости ради, на Arduino такой вариант вполне можно сделать, но с аппаратными доработками (три резистора, два стабилитрона). Никто не мешает ногодрыгом общаться по USB, что вполне успешно делают те же usbasp (программатор AVR) и digispark (отладочная плата). Но есть более интересный вариант: микроконтроллер STM32F103C8T6. И на отладочной плате уже есть все, что нужно. Это были ещё те времена, когда их было легко достать и за недорого... За целых 15 минут (из которых 10 я качал и устанавливал среду для разработки) был накликан проект, который уже корректно определялся компьютером. Но пока ничего полезного не делал.
![Процесс отладки на макетке Процесс отладки на макетке](https://habrastorage.org/getpro/habr/upload_files/565/f5a/150/565f5a150f65d039361fe3b5b0be7ab3.jpg)
В данной статье рассказывать технические подробности с примерами кода я не буду. Как-нибудь в другой раз. Так что пропускаем процесс отладки кода. Скажу только то, что в первую очередь я отладил работу загрузчика (через USB), чтобы при обнаружении ошибки владельцем устройства была возможность удаленно её исправить. Ну и вход в загрузчик осуществлялся не аккордом из кнопок при подключении к USB провода, а просто долгим (10 секунд) нажатием на одну из кнопок.
Теперь поведаю о том, как в голове сформировалась картинка развития проекта. Нужно дешевое, прочное и, в идеале, ремонтопригодное изделие из доступных компонентов. Подходящие компоненты были найдены очень быстро. Тут нам помогают производители комплектующих к аркадным автоматам. Все ведь видели автоматы с игрушками в магазинах? Так эти аппараты выдерживают удары (один или два...) обиженных игроков, когда клешня опять все уронила. Эти джойстики и кнопки идеальное ведь решение! Подходят по всем критериям. Остается только заказать пару комплектов деталек и, пока оно едет, придумать корпус.
Джойстики от аркадных автоматов - это 4 микропереключателя, которые нажимаются при отклонении палки. Имеем максимум 8 направлений. Я предложил "заказчику" опробовать подобное дискретное управление на своем устройстве (сделал переключение режимов). Если в аналоговом режиме скорость движения курсора зависела от угла отклонения от центрального положения, то в дискретном уже от времени. Отзыв был положительный. Не знаю в плюсы это записывать или же в минусы, но стик издает характерные щелчки при срабатывании. Для пользователя это, скорее всего, плюс, а вот для окружающих… Не такой уж он и громкий, на самом деле.
Корпус, на самом деле, та ещё проблема. И я не говорю про дизайн. Из чего его делать то? Были мысли о фанере для прототипов и гибке металла для "серийного" образца. Но это уже похоже на "Создавать себе трудности и героически с ними бороться". Просто у меня был страх перед 3D печатью больших объектов. В начале пути DIY-щика побился головой о стену с принтером ANET A8. Сейчас то уже все отлажено, особенности знаем. Да и принтер посерьезнее появился. В общем начал проектировать корпус в tinkercad. По образцу пульта от моторизированного кресла: вертикально расположенный стик и кнопки на наклонной поверхности.
![Процесс печати Процесс печати](https://habrastorage.org/getpro/habr/upload_files/523/7c2/46e/5237c246e078c365bd729143d2ac3d19.jpg)
Расположение кнопок в пульте от кресла мне не понравилось от слова совсем. Если на основном своем месте работы они использовались относительно редко, то в мыши должны нажиматься постоянно.
Какая у мыши основная функция, кроме перемещения курсора? Клик левой кнопкой. Значит делаем её больше остальных. А сколько кнопок вообще нужно? Левая, правая, колесико. К слову, в заводских устройствах по три кнопки. Но ведь есть ещё прокрутка колесиком. Представьте сколько времени нужно, чтобы отвести курсор до полосы прокрутки, нажать на перемещение и вернуть курсор обратно? Много. Значит делаем ещё две дополнительных кнопки. Это не сильно увеличит итоговую стоимость устройства, но комфорт прибавить вполне может.
![](https://habrastorage.org/getpro/habr/upload_files/3ea/698/c01/3ea698c017fed7f0d5dd28c3a61eaa42.png)
Корпус разделен на две части. Основная причина, разумеется. монтаж компонентов и обслуживание. Должен быть удобный доступ к начинке. Но разделение выбрано именно таким образом, чтобы при минимуме времени и ресурсов можно было экспериментировать с расположением кнопок. Вполне вероятно, что мое представление об удобстве будет отличаться от тех, для кого ведется разработка.
Итоговый вид прототипа получился следующим.
![](https://habrastorage.org/getpro/habr/upload_files/c03/b8a/208/c03b8a208fdc2989d6ff13afc73a4c49.jpg)
Пока нет ни схемы, ни печатной платы. Все держится на МГТФ. Да и код показывать пока стыдно, но линк на репозиторий все же оставлю.
Тут минутка внезапной почти рекламной интеграции. На конференции «Свободное программное обеспечение в высшей школе», которая в июне 2021 проходила в городе Переславле-Залесском (ИПС им. А.К. Айламазяна РАН), нашел заинтересованных людей, к которым на тестирование отправился один из экземпляров устройства. Посещать конференции - крайне полезно. Новые знакомства и вообще непонятно в каком направлении пойдет обсуждение в перерывах между докладами. Запись моего доклада на данной конференции (и не только моего, и не только этой конференции) можно посмотреть на http://0x1.tv/.
Разумеется, надо озвучить примерную стоимость устройства.
Аркадный стик — 600 руб.
Комплект кнопок — 200 руб.
Отладочная плата с STM32F103C8T6 — не хочу даже смотреть актуальную цену. 2021, хватит...
Провода, разъемы — 200 рублей.
20 часов печати принтера
Теперь о планах. Прототип работает, но все настройки в данный момент прописаны жестко. И это надо исправлять. А настроек, на самом деле, не так уж и мало. От смены функций клавиш до тонкой подстройки скоростей курсора (ограничение максимальной скорости, сброс скорости при смене направления, ускорение...). Все это нужно нужно прописывать приложением на компьютере и хранить в самом устройстве. Соответственно, мышь должна дорасти до комозитного USB устройства, состоящего из минимум двух: мыши и Custom HID для управления. Возможно, стоит добавить ещё режим джойстика. По форме оно вполне подходит, а иногда развлекаться хотят все.
Разумеется, в комментариях приветствуется идеи и конструктивная критика.
Комментарии (35)
little-brother
03.09.2021 03:05+1Arduino c USB портами могут вполне себе прикидываться HID-устройствами. Самый маленький вариант - это использовать attiny85, но в вашем случае ног не хватит (в 2019 брал чуть ли не в два раза дешевле).
walhi Автор
03.09.2021 03:07Да, но возможностей у stm32 в разы больше, так как процессор свободен. Я на tiny25 usb клавиатуру вполне поднимал. Правда без загрузчика и однокнопочную. Vim pedal собирал прикола ради.
Hisoka
03.09.2021 04:04Там софтовый v-usb же.
С железным usb - leonardo и micro. там atmega32u4. Hid с pluggable usb делается очень просто.
Для любителей подолбаться - развести самому и распаять эти atmega или at90usb.
С at90usb - я как раз для своего переходника с контроллеров Денди/Сега на usb, прикрутил к Arduino IDE, чтоб PluggableUSB использовать. Ну и дешевле было чем сейчас стоят даже клоны ардуин с hw usb.
Другие варианты с usb - Raspberry Pi Pico. Esp32-s2/s3.
Hisoka
03.09.2021 04:54Ну вот не знаю. Я бы скорее стал совмещать два типа джойстика - аналоговый и d-pad в максимальных точках отклонения. Кнопки мыши - либо сделать ручку с кнопками под кончики пальцев, либо вывести под вторую руку.
Как вариант ещё кнопка ускорения/замедления передвижения курсора
walhi Автор
03.09.2021 10:57Аналоговый джой дорогой. От 1000 рублей и не совсем понятно, сколько он выдержит. Условия эксплуатации подразумевают постоянные удары рукой.
dmitryvv
03.09.2021 06:09Очень супер классный проект - респект за помощь тем, кому она действительно нужна! Я не в курсе рынка подобных устройств в странах СНГ, в Северной Америке достаточно популярен ресурс https://www.makersmakingchange.com/ где умельцы выкладывают опенсорсные решения для спектра задач - много интересных решений, можете потом поделиться и своими наработками. Не встречали подобные ресурсы в рунете?
Ардуины на ATMega32u4 или на базе SAMD21 нативо поддерживают USB HID и мышь и клавиатуру, можно весь код в 200-300 строчек уложить. Простота - это неплохо, плюс шансы на то, что кто-то захочет поковырять настройки/код возрастает.
В качестве идеи: а кнопки и джойстик обязательно должны в одном корпусе быть? Можно их разделить на три устройства - джойстик, кнопки, и контрольная коробочка с (например) 3.5 мм портами типа TRS (для кнопок) и TRRS (для джойстика). Microsoft XAC контроллер устроен по такому принципу.
walhi Автор
03.09.2021 12:00Нет, я не встречал пока подобных ресурсов. Когда все хотелки реализую - обязательно опубликую на ресурсе, который Вы посоветовали.
Насчет выбора чипа. STM32 был под рукой и был небольшой опыт работы с USB в нем. Так что другие варианты и не рассматривались.
Насчет отдельных кнопок. Пока была мысль только педаль выносную сделать.
serafims
03.09.2021 08:59Щупал такие устройства, поставляли в одну школу, в принципе, могу попробовать найти автору фотографии этого устройства, а также спец кнопок больших таких, а также большой клавиатуры адаптированной. В целом цена, конечно, высоковата, да. Но сделаны промышленные решения неплохо. Кнопки умеют быстро программироваться в разные режимы имитации клавиатуры. Несколько кнопок могут работать с одним донглом-приемником.
Джойстики тоже беспроводные подтягиваются, но по мне так беспроводное - лишнее.
Ваш прототип надо уменьшать по высоте, либо делать некую мини-столешницу со встроенным джойстиком.
serafims
03.09.2021 09:00Спорить сейчас о железной начинке смысла не имеет, в мелкой серии разницы в цене практически незаметно, но надо думать вперед, в плане расширения функционала и снижения издержек.
walhi Автор
03.09.2021 12:03Мне в какой-то момент показалось, что неплохим вариантом будет взять аркадный джойстик и заменить ему мозги. Оно как раз подходит в некоторой степени под "мини-столешницу". Но там расположение кнопок под игру.
Harwest
03.09.2021 15:37+1Автор, а почему не интегрировать ЛКМ ПКМ (и скролл) в набалдашник ручки? Это существенно уменьшит количество движений рукой и позволит (например) выделять текст одним движением с зажатой кнопкой.
walhi Автор
03.09.2021 15:43+1Это будет работать только при наличии достаточно развитой мелкой моторики. Так что в данной задаче смысла от подобной интеграции будет мало.
Harwest
03.09.2021 16:01+1Кмк моторика будет не мелкая: гораздо проще нажать кнопку фалангой пальца не снимая ладонь с набалдашника, чем отрывать от него руку, выпрямлять палец, тянуться им вперед и попадать в кнопки на передней скошенной панели.
Люди с травмами локтевого, плечевого пояса, с артритом пальцев скажут спасибо.
Ручки можно делать сменными, с пистолетным хватом и горизонтальным.
walhi Автор
03.09.2021 16:26Нужно изучить этот вопрос... Теоретически этот джойстик можно просверлить (токарь знакомый есть) и пропустить в нем провода. Наконечник там на резьбе сидит и можно попробовать распечатать на принтере шарик с кнопкой. Подумаю над этим. Спасибо.
А вообще, жду отчет от бета-тестеров. В четверг буду с ними общаться.
Harwest
03.09.2021 16:34Рассмотрите вариант формовки ручки на каркасе из проволоки сразу со кабельным шлейфом и кнопками из термопластичного полимера. Продается в виде гранул, плавится в горячей воде +90, возможна окраска в массиве порошковыми пигментами.
Шлейф можно сделать из МГТФ и пропустить в ручку джойстика по трубке стика.
gekkkon
05.09.2021 23:39Это поликапролактон, торговое название "полиморфус". Только он плавится начиная с 65 градусов, не с 90. И ещё у него эстетический минус -- если он некрашеный, то скоро пропитывается жирорастворимыми красителями. Но для примерочного моделирования он прекрасен, лепится прямо руками и переформовывается много раз.
gekkkon
06.09.2021 09:53как вариант -- вынести кнопки на "перчатку". джойстик шевелить любым удобным хватом, а кнопки нажимать любым удобным сгибанием пальцев. шевелительное и нажимательное движения будут независимы друг от друга, и руку перекладывать будет не нужно. и сверлить ничего не нужно;)
но тут апять вопрос, насколько спастична рабочая кисть, и чем пользователь может шевелить в каких пределах
walhi Автор
06.09.2021 12:34Были мысли про перчатку, но для других целей. Датчики, которые считывали бы степень сжима пальца стоят не так уж и мало. А акселерометры и прочие игрушки требут сложной обработки. Такие решения есть для управления машинками и квадрокомптерами, кстати. В виде браслета с датчиком на указательном пальце.
gekkkon
06.09.2021 00:38Аналоговый джойстик -- вот: https://www.chipdip.ru/product0/8387105062 . Цены в чипидип безумные, так что это чиста для ориентира, что бывает такая двухосевая фигня. На али они рублей от 50. Как эту штуку приделать к прочной джойстиковой палке, решать по месту;). Есть сайт джойстиковых самодельщиков, http://www.joysticks.ru/joysticks/handmade/ , они там gnuт и механику, и софт;).
Тема с кнопками на набалдашнике джойстика может хорошо пойти, но не для всех -- "каждая несчастная семья несчастлива по своему", при одинаковом "диагнозе" ДЦП у разных людей "карты подвижности" будут индивидуальные. Если можно делать кнопки с регулируемым усилием прожатия, это было бы очень правильно -- это может помочь отсечь "дребезг" юзера, настроить кнопки под индивидуальные возможности каждого пальца (где-то была тема про тензометрические кнопки, которые возвращают не вкл-выкл, а соответствующий силе давления сигнал, но делают ли их серийно, мне неизвестно). Если пальцы не очень управляются с кнопками -- могут помочь педали (но могут и не помочь, см. про индивидуальные "карты подвижности"). Но даже небольшая скорость ввода лучше, чем никакая.
Да, возможно, нужно придумывать такой джойстик в комплексе с поддержкой предплечья. ДЦПшным пользователям может быть трудно долго удерживать руку в тех положениях, в которых нам-здоровым всё пофиг.
Московский центр "Пространство общения" что-то тИхонько мутит по темам ассистивного оборудования. У них когда-то был проект вокруг самодельных кнопок "бигмак" (модная в Штатах штуковина размером с пол-апельсина, с разной начинкой -- от обычной проводной кнопки для управления игрушкой до говорящей хреновины, воспроизводящей ранее записанный текст. кмк примерно про это выше писал serafims ), но технологический уровень был кмк невысок. В этом учебном году пока тишина. Вот они: https://prostranstvo-center.ru/assistivnye-tehnologii/ В России цены на ассистивное оборудование неприятные, про устройства собственного производства мне известно немного.
Утром посмотрю, что ещё могу собрать по этой теме.
walhi Автор
06.09.2021 01:10Увы, такие мелкие джойстики не прокатят. Они действительно дешевые и встречаются на каждом шагу. К слову, их штук 6 ещё в запасе лежит после ремонтов геймпадов и световых пультов. С точки зрения мозгов - разница небольшая. Можно сделать поддержку и того, и другого. Наверное, плату буду разводить с учетом этого.
gekkkon
06.09.2021 09:37Про живучесть этих джойстиков непонятно, а это важный параметр для ассистивной техники -- когда вы делаете одну штуку для соседа, всё ОК (если что отвалится -- вечерком перепаяли и снова щасте), а если такие штуки уезжают от вас в разные стороны и там начинают ломаться, то вам-разработчику могут начать слать лучи поноса и нестояка;). По хорошему к джойстику приколачивать либо вечный оптический считыватель (жопку от мышки;), либо городить двухосевую штуку на проволочных переменниках, которые живут дольше. И ещё смотреть на лёгкость механической индивидуальной настройки-подгонки -- живучесть болезненно неудобного устройства не будет исчерпана никогда.
gekkkon
06.09.2021 00:52Посмотрел проект Блаженова. Металлическая накладка это, наверное, хорошо, но вообще-то тут задачка не для вырубной машины, а для 2д-фрезера по листу пластика либо тонкого МДФ. Это может оказаться дешевле и доступнее по стране. Грустно об этом писать, но вне России клавиатуры в комплекте с фабричными накладками доступны уж лет двадцать, и недавно стоили сильно меньше сотни баксов. Кстати, есть ещё и специальные клавиатуры с кнопками в полтора раза больше обычных -- полезны при относительно небольших проблемах с моторикой.
walhi Автор
06.09.2021 01:11По отзыву Блаженова деревянный вариант служит относительно недолго. Поэтому и сталюга.
belonesox
07.09.2021 12:52На конференции «Свободное программное обеспечение в высшей школе», которая в июне 2021 проходила в городе Переславле-Залесском (ИПС им. А.К. Айламазяна РАН), нашел заинтересованных людей, к которым на тестирование отправился один из экземпляров устройства. … Запись моего доклада на данной конференции (и не только моего, и не только этой конференции) можно посмотреть на http://0x1.tv/.
Все же оставлю прямые ссылки и на
«доклад про мышь™» → http://0x1.tv/20210418I
эти конференции 2021 года в Переславле → http://0x1.tv/Category:OSSDEVCONF-2021 и http://0x1.tv/Category:OSEDUCONF-2021
order227
....и тут же сплошные сопли в железе как у типичного ардуинщика :))
walhi Автор
Это же прототип. На уровне идеи все красиво. Двойные стандарты, сэр.
order227
На уровне идеи помощь инвалидам это прекрасно, а на уровне реализации ну как-то... Я понимаю людей, которые делают "хорошо" и потом пафосно корят ардуинщиков. Вы же камень в их огород кинули, а "как надо делать" в статье не показали.
Странное заявление... я лишь описал прочитанное и увиденное в данной статье.
walhi Автор
Разумеется, будет нормальная плата. А про ардуинщиков имело иной смысл. Я не проводочки осуждаю, а цепочку мк-uart-soft-курсор. Ибо иначе оно без переделки платы невозможно (перекидывание usb на основной мк и потеря возможности прошивки привычным методом).
Myclass
Не соглашусь с вами но с вашим оппонетом. Можно на коленке но сделать надёжное устройство, и да - и на ардуине. А можно вроде подойти профессионально но всё равно сделать несовершенство. Но направо и налево вешать первым делом ярлыки- больше о вас рассказывает, чем о тех, на кого ярлыки вешается. Но это так - на заметку.
теперь о простом подходе. Ваш подход хороший. И идея, сделать все от и до - самому - тоже имеет свои плюсы.
Например, если бы я взялся за такое задание, то может быть взял за основу настоящую простую USB мышь плату и вывел все кнопки, и сенсоры позиционирования наружу. Те. заниматься софтом в принципе и не пришлось бы, тк. плата рабочая и может с компом соединяется. Особенно проще было бы, если мышь была бы чуточку старенькая или очень дорогая, но современная, но тогда цена возрастает, тк. там очень часто не инфраротовое определение позиции а именно физическое с помощью шарика и через кнопки...или четыре по осям, или 8 с доп. по диагоналям тоже.
walhi Автор
Если я правильно понял, то Вы предлагаете сделать нечто похожее на трекбол из готового устройства?
gekkkon
...или, может, джойстик;). если крутить шар мимо оптодатчика мыши, то мышь будет считать, что едет по коврику. шар может быть трекболом или базой для палки джойстика. кто-то скажет, что выдирать из мыши душу это неспортивно, только работать это начнёт гораздо скорее;). ну и радиомыши тоже бывают.
walhi Автор
а кто говорит, что оно сейчас не работает? Сама мышь работает. Сейчас у меня корректно обнаруживается композитное USB устройство из мыши и Custom HID. Но работает только первое. Насчет радио-мышей в качестве плюса могу сказать только то, что оно по умолчанию есть достаточно мало. И не придется возиться с экономией батарейки. Но часть хотелок реализовать красиво не выйдет. Ту же прокрутку придется реализовывать через микроконтроллер, что уже автоматом перечеркивает "не придется возиться с экономией батарейки".