Речь в данной статье пойдет про проектирование оборудования, которое упрощает работу за компьютером. Предыстория моего небольшого проекта связана, совершенно неожиданно, со спектрумами, apple 2 и прочей ретрокомпьютерной техникой. Есть увлечение такое — ковыряться во всяком старье. Плюс делать это в прямом эфире на YouTube. Коллективный разум помогает чинить. После одного из стримов обратился подписчик с весьма необычной просьбой. Зовут его Александр и у него ДЦП. Соответственно, ему трудно работать на компьютере. А желание работать имеется, что не может не радовать.

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

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

Внешний вид пульта до доработки (хотя и после он выглядит так же)
Внешний вид пульта до доработки (хотя и после он выглядит так же)

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

SimplyWorks Joystick
SimplyWorks Joystick

Я их видел всего два: палка (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 проходила в городе Переславле-Залесском (ИПС им. А.К. Айламазяна РАН), нашел заинтересованных людей, к которым на тестирование отправился один из экземпляров устройства. Посещать конференции - крайне полезно. Новые знакомства и вообще непонятно в каком направлении пойдет обсуждение в перерывах между докладами. Запись моего доклада на данной конференции (и не только моего, и не только этой конференции) можно посмотреть на http://0x1.tv/.

Разумеется, надо озвучить примерную стоимость устройства.

  • Аркадный стик — 600 руб.

  • Комплект кнопок — 200 руб.

  • Отладочная плата с STM32F103C8T6 — не хочу даже смотреть актуальную цену. 2021, хватит...

  • Провода, разъемы — 200 рублей.

  • 20 часов печати принтера

Теперь о планах. Прототип работает, но все настройки в данный момент прописаны жестко. И это надо исправлять. А настроек, на самом деле, не так уж и мало. От смены функций клавиш до тонкой подстройки скоростей курсора (ограничение максимальной скорости, сброс скорости при смене направления, ускорение...). Все это нужно нужно прописывать приложением на компьютере и хранить в самом устройстве. Соответственно, мышь должна дорасти до комозитного USB устройства, состоящего из минимум двух: мыши и Custom HID для управления. Возможно, стоит добавить ещё режим джойстика. По форме оно вполне подходит, а иногда развлекаться хотят все.

Разумеется, в комментариях приветствуется идеи и конструктивная критика.

Комментарии (35)


  1. order227
    03.09.2021 01:01
    -2

    Всякие Arduino костыли

    Надо делать правильно

    ....и тут же сплошные сопли в железе как у типичного ардуинщика :))


    1. walhi Автор
      03.09.2021 01:04
      +6

      Это же прототип. На уровне идеи все красиво. Двойные стандарты, сэр.


      1. order227
        03.09.2021 01:26

        На уровне идеи все красиво

        На уровне идеи помощь инвалидам это прекрасно, а на уровне реализации ну как-то... Я понимаю людей, которые делают "хорошо" и потом пафосно корят ардуинщиков. Вы же камень в их огород кинули, а "как надо делать" в статье не показали.

        Двойные стандарты, сэр

        Странное заявление... я лишь описал прочитанное и увиденное в данной статье.


        1. walhi Автор
          03.09.2021 01:35

          Разумеется, будет нормальная плата. А про ардуинщиков имело иной смысл. Я не проводочки осуждаю, а цепочку мк-uart-soft-курсор. Ибо иначе оно без переделки платы невозможно (перекидывание usb на основной мк и потеря возможности прошивки привычным методом).


          1. Myclass
            03.09.2021 05:28
            +1

            Не соглашусь с вами но с вашим оппонетом. Можно на коленке но сделать надёжное устройство, и да - и на ардуине. А можно вроде подойти профессионально но всё равно сделать несовершенство. Но направо и налево вешать первым делом ярлыки- больше о вас рассказывает, чем о тех, на кого ярлыки вешается. Но это так - на заметку.

            теперь о простом подходе. Ваш подход хороший. И идея, сделать все от и до - самому - тоже имеет свои плюсы.

            Например, если бы я взялся за такое задание, то может быть взял за основу настоящую простую USB мышь плату и вывел все кнопки, и сенсоры позиционирования наружу. Те. заниматься софтом в принципе и не пришлось бы, тк. плата рабочая и может с компом соединяется. Особенно проще было бы, если мышь была бы чуточку старенькая или очень дорогая, но современная, но тогда цена возрастает, тк. там очень часто не инфраротовое определение позиции а именно физическое с помощью шарика и через кнопки...или четыре по осям, или 8 с доп. по диагоналям тоже.


            1. walhi Автор
              03.09.2021 10:54

              Если я правильно понял, то Вы предлагаете сделать нечто похожее на трекбол из готового устройства?


              1. gekkkon
                06.09.2021 01:06

                ...или, может, джойстик;). если крутить шар мимо оптодатчика мыши, то мышь будет считать, что едет по коврику. шар может быть трекболом или базой для палки джойстика. кто-то скажет, что выдирать из мыши душу это неспортивно, только работать это начнёт гораздо скорее;). ну и радиомыши тоже бывают.


                1. walhi Автор
                  06.09.2021 01:15

                  а кто говорит, что оно сейчас не работает? Сама мышь работает. Сейчас у меня корректно обнаруживается композитное USB устройство из мыши и Custom HID. Но работает только первое. Насчет радио-мышей в качестве плюса могу сказать только то, что оно по умолчанию есть достаточно мало. И не придется возиться с экономией батарейки. Но часть хотелок реализовать красиво не выйдет. Ту же прокрутку придется реализовывать через микроконтроллер, что уже автоматом перечеркивает "не придется возиться с экономией батарейки".


  1. little-brother
    03.09.2021 03:05
    +1

    Arduino c USB портами могут вполне себе прикидываться HID-устройствами. Самый маленький вариант - это использовать attiny85, но в вашем случае ног не хватит (в 2019 брал чуть ли не в два раза дешевле).


    1. walhi Автор
      03.09.2021 03:07

      Да, но возможностей у stm32 в разы больше, так как процессор свободен. Я на tiny25 usb клавиатуру вполне поднимал. Правда без загрузчика и однокнопочную. Vim pedal собирал прикола ради.


    1. 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.


      1. walhi Автор
        03.09.2021 10:56

        Насчет esp32 можно задуматься, на самом деле. Точнее уже думал, чтобы сделать устройство беспроводным. Было бы интересно. А тут как раз синезубый протокол железо умеет.


        1. Hisoka
          03.09.2021 11:36

          Если синезуб+усб, то только s3 модель. В s2 синезуба нет


  1. Hisoka
    03.09.2021 04:54

    Ну вот не знаю. Я бы скорее стал совмещать два типа джойстика - аналоговый и d-pad в максимальных точках отклонения. Кнопки мыши - либо сделать ручку с кнопками под кончики пальцев, либо вывести под вторую руку.

    Как вариант ещё кнопка ускорения/замедления передвижения курсора


    1. walhi Автор
      03.09.2021 10:57

      Аналоговый джой дорогой. От 1000 рублей и не совсем понятно, сколько он выдержит. Условия эксплуатации подразумевают постоянные удары рукой.


  1. dmitryvv
    03.09.2021 06:09

    Очень супер классный проект - респект за помощь тем, кому она действительно нужна! Я не в курсе рынка подобных устройств в странах СНГ, в Северной Америке достаточно популярен ресурс https://www.makersmakingchange.com/ где умельцы выкладывают опенсорсные решения для спектра задач - много интересных решений, можете потом поделиться и своими наработками. Не встречали подобные ресурсы в рунете?

    Ардуины на ATMega32u4 или на базе SAMD21 нативо поддерживают USB HID и мышь и клавиатуру, можно весь код в 200-300 строчек уложить. Простота - это неплохо, плюс шансы на то, что кто-то захочет поковырять настройки/код возрастает.

    В качестве идеи: а кнопки и джойстик обязательно должны в одном корпусе быть? Можно их разделить на три устройства - джойстик, кнопки, и контрольная коробочка с (например) 3.5 мм портами типа TRS (для кнопок) и TRRS (для джойстика). Microsoft XAC контроллер устроен по такому принципу.


    1. walhi Автор
      03.09.2021 12:00

      Нет, я не встречал пока подобных ресурсов. Когда все хотелки реализую - обязательно опубликую на ресурсе, который Вы посоветовали.

      Насчет выбора чипа. STM32 был под рукой и был небольшой опыт работы с USB в нем. Так что другие варианты и не рассматривались.

      Насчет отдельных кнопок. Пока была мысль только педаль выносную сделать.


  1. serafims
    03.09.2021 08:59

    Щупал такие устройства, поставляли в одну школу, в принципе, могу попробовать найти автору фотографии этого устройства, а также спец кнопок больших таких, а также большой клавиатуры адаптированной. В целом цена, конечно, высоковата, да. Но сделаны промышленные решения неплохо. Кнопки умеют быстро программироваться в разные режимы имитации клавиатуры. Несколько кнопок могут работать с одним донглом-приемником.

    Джойстики тоже беспроводные подтягиваются, но по мне так беспроводное - лишнее.

    Ваш прототип надо уменьшать по высоте, либо делать некую мини-столешницу со встроенным джойстиком.


    1. serafims
      03.09.2021 09:00

      Спорить сейчас о железной начинке смысла не имеет, в мелкой серии разницы в цене практически незаметно, но надо думать вперед, в плане расширения функционала и снижения издержек.


    1. walhi Автор
      03.09.2021 12:03

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


  1. kilokanat
    03.09.2021 10:16

    -.. нет более высокой цели.

    -Заправлять машины?

    -Служить людям!


  1. Harwest
    03.09.2021 15:37
    +1

    Автор, а почему не интегрировать ЛКМ ПКМ (и скролл) в набалдашник ручки? Это существенно уменьшит количество движений рукой и позволит (например) выделять текст одним движением с зажатой кнопкой.


    1. walhi Автор
      03.09.2021 15:43
      +1

      Это будет работать только при наличии достаточно развитой мелкой моторики. Так что в данной задаче смысла от подобной интеграции будет мало.


      1. Harwest
        03.09.2021 16:01
        +1

        Кмк моторика будет не мелкая: гораздо проще нажать кнопку фалангой пальца не снимая ладонь с набалдашника, чем отрывать от него руку, выпрямлять палец, тянуться им вперед и попадать в кнопки на передней скошенной панели.

        Люди с травмами локтевого, плечевого пояса, с артритом пальцев скажут спасибо.

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


        1. walhi Автор
          03.09.2021 16:26

          Нужно изучить этот вопрос... Теоретически этот джойстик можно просверлить (токарь знакомый есть) и пропустить в нем провода. Наконечник там на резьбе сидит и можно попробовать распечатать на принтере шарик с кнопкой. Подумаю над этим. Спасибо.

          А вообще, жду отчет от бета-тестеров. В четверг буду с ними общаться.


          1. Harwest
            03.09.2021 16:34

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

            Шлейф можно сделать из МГТФ и пропустить в ручку джойстика по трубке стика.


            1. gekkkon
              05.09.2021 23:39

              Это поликапролактон, торговое название "полиморфус". Только он плавится начиная с 65 градусов, не с 90. И ещё у него эстетический минус -- если он некрашеный, то скоро пропитывается жирорастворимыми красителями. Но для примерочного моделирования он прекрасен, лепится прямо руками и переформовывается много раз.


          1. gekkkon
            06.09.2021 09:53

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

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


            1. walhi Автор
              06.09.2021 12:34

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


  1. 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/ В России цены на ассистивное оборудование неприятные, про устройства собственного производства мне известно немного.

    Утром посмотрю, что ещё могу собрать по этой теме.


    1. walhi Автор
      06.09.2021 01:10

      Увы, такие мелкие джойстики не прокатят. Они действительно дешевые и встречаются на каждом шагу. К слову, их штук 6 ещё в запасе лежит после ремонтов геймпадов и световых пультов. С точки зрения мозгов - разница небольшая. Можно сделать поддержку и того, и другого. Наверное, плату буду разводить с учетом этого.


      1. gekkkon
        06.09.2021 09:37

        Про живучесть этих джойстиков непонятно, а это важный параметр для ассистивной техники -- когда вы делаете одну штуку для соседа, всё ОК (если что отвалится -- вечерком перепаяли и снова щасте), а если такие штуки уезжают от вас в разные стороны и там начинают ломаться, то вам-разработчику могут начать слать лучи поноса и нестояка;). По хорошему к джойстику приколачивать либо вечный оптический считыватель (жопку от мышки;), либо городить двухосевую штуку на проволочных переменниках, которые живут дольше. И ещё смотреть на лёгкость механической индивидуальной настройки-подгонки -- живучесть болезненно неудобного устройства не будет исчерпана никогда.


  1. gekkkon
    06.09.2021 00:52

    Посмотрел проект Блаженова. Металлическая накладка это, наверное, хорошо, но вообще-то тут задачка не для вырубной машины, а для 2д-фрезера по листу пластика либо тонкого МДФ. Это может оказаться дешевле и доступнее по стране. Грустно об этом писать, но вне России клавиатуры в комплекте с фабричными накладками доступны уж лет двадцать, и недавно стоили сильно меньше сотни баксов. Кстати, есть ещё и специальные клавиатуры с кнопками в полтора раза больше обычных -- полезны при относительно небольших проблемах с моторикой.


    1. walhi Автор
      06.09.2021 01:11

      По отзыву Блаженова деревянный вариант служит относительно недолго. Поэтому и сталюга.


  1. belonesox
    07.09.2021 12:52

    На конференции «Свободное программное обеспечение в высшей школе», которая в июне 2021 проходила в городе Переславле-Залесском (ИПС им. А.К. Айламазяна РАН), нашел заинтересованных людей, к которым на тестирование отправился один из экземпляров устройства. … Запись моего доклада на данной конференции (и не только моего, и не только этой конференции) можно посмотреть на http://0x1.tv/.

    Все же оставлю прямые ссылки и на