Monday, September 2, 2013

В поисках идеальной клавиатуры - 1

Зачем?

Несколько месяцев назад мне в руки попалась хорошая эргономичная мышь. В руке лежала как влитая, и была удобна настолько, что убирать руку с нее не хотелось.
Однако программисты работают пальцами по клавиатуре (и еще немного головой - в нее они пьют пиво).
Перенося руку с мыши на клаву и обратно, я стал задавать себе вопросы:
  • wat$^&*ck
  • и how^#%& it
И в конце концов сформировал несколько требований к своему будущему устройству ввода:
  • оно должно совмещать мышь и клавиатуру,
  • все действия должны выполняться не глядя на устройство и на собственные руки,
  • пальцы должны лежать естественно в максимально удобной позиции,
  • движения должны быть минимальными и удобными.

Первая версия напоминала мышку с пятью кнопками. Точнее две мыши - по одной под каждую руку.
Выглядела она так:

Принцип работы.

На столе лежат два мышеобразных корпуса, соединенных проводом.
Каждый палец лежит на своей кнопке.

Каждую кнопку можно нажимать как кнопку фотоаппарата - на два уровня:

  • при слабом нажатии вводится алфавитно-цировой символ,
  • если продолжать нажатие сбольшей силой, произойдет еще один щелчок, так вводятся служебные кнопки, F-кнопки, стрелки и т.д).
Корпус устройства можно двигать по столу, но не как мышь, а скорее как стик игровой приставки - при уменьшении толкающего усилия корпус возвращается на место.
В "среднем" нейтральном положении десять кнопок дают символы среднего ряда обычной клавиатуры "ASDFG HJKL;".
Если отклонить корпус вверх, его кнопки дадут верхний ряд - "QWERT" слева, и "YUIOP" справа.
Аналогично, при отклонении корпусов вниз получаем "ZXCVB" и "NM,./".
Сдвигая корпуса друг к другу, получаем цифры: "12345" и "67890".
Оттодвигая корпус в противоположных направлениях, получаем Win, Alt, Ctrl, Shift, Space слева и зеркально отображенные Space, Shift, Ctrl, Alt, Win справа.

Сильное нажатие кнопки под указательным пальцем включает режим мыши, в котором перемещение корпуса соответствет перемещению мыши.
Сильное нажатие кнопки под большим пальцем включает режим стрелок, когда перемещение мыши работает как нажатие стрелки в указанном направлении.

Контроллер и электроника

Мозгом устройства стал 8-битный AVR.
Я использовал готовую плату с контроллером, mini-USB и программатором Teensy-2.0.
Все, что оставалось - припаять горсть кнопок, датчик движения и написать прошивку.

Кнопки должны были стабатывать на два уровня нажатия. Поискав на mouser.com, ebay и alibaba, я не нашел переключаетелей с приемлимыми параметрами, поэтому под каждой кнопкой у меня стояли два одинарных переключателя с небольшим зазором.
В инетернете можно легко найти можество переключателей, если поискать "6x6 Tactile Switch".
Кстати еще один секрет:
Жесткость срабатывания выключаетеля можно легко регулировать.
 
достаточно отрезать заклепки (1), снять железную крышку (2), вытащить стальную мембрану (3) и ножницами отрезать от нее пару узких полосок по краям. Чем больше будет срезано, тем мягче будет нажиматься кнопка. 
В качестве датчика движения я использовал стик от PSP, который был прикручен к копусу снизу и упирался в стол своим рычажком, который был для лчшего контакта обклеен резиной.

Прошивка для контроллера не преставляет собой ничего интересного, единственная часть, которая может оказаться кому-то полезной - код для поддержки одноврменно USB-Mouse + USB-Keyboard + HUD-устройства для вывода отладочной информации usb_keyboard_mouse_debug.zip.
Это слегка модифицированный код примера сайта pjrc.com.

CAD, 3D-printing

Это был мой первый опыт CAD и 3D печати.
Корпус был нарисован в небезызвестной программе от Alibre, экспортирован в STL и заказан в printing service i-materialize. Причем левая половина напечатана полиамидным порошком  а правая - фотополимерным материалом -  high-detail-resin.

Этот проект многому меня научил:
  • 3D печать - это несложно, недорого и весьма качественно.
  • CAD от Алибра  (по крайней мере бесплатная ознакомительная версия) - противоестественное постоянно вылетающее поделие, котрое может навсегда отбить охоту что-то моделировать. Или я не умею его готовить. Нужно искать альтернативы.
  • Экcпортированный STL нужно проверять в какой-нибудь сторонней программе, я использовал NetFabb studio.
  • Большинство пресс-бюро имеют онлайн форму, в которую можно загрузить ваш STL-файл, выбрать материал и узнать цену. Там же можно узнать о потенциальных проблемах вашего STL в выбранном материале.

Подробнее о материалах:

Полиамид

Прекрасный материал для прототипирования.
  • Не очень точен в мелких деталях, все что меньше 0.3 мм - пропадет.
  • Крепкий. Стенки 2.3 мм будут жесткими. Не боится ударов.
  • Эластичный в тонких элементах. Стенки 1 - 1.5 мм будут гибкими.
  • Изделие получается на 0.1 мм больше во все стороны.
  • Неплохо сверлится и точится.
  • Длинный элемент может отломиться, если в сечении он меньше 2х2 мм.
  • На ощупь - как мелкозернистый пенопласт.
  • Материал пористый. При окраске будет впитывать краску. Пропускает воздух. Можно пропитать клеем.
  • При нагреве - плавится.
  • Мелкие отверстия, полости, проточки нужно будет прочистить от порошка иголкой или маленькой отверткой.
  • Хорошо клеится клеем J-B PlasticWeld.

Фотополимер 

Хорош для статуэток, но совершенно не приспособлен для прототипирования:
  • Передает даже мелкие детали.
  • Хрупкий, при попытке согнуть - раскалывается,
  • Детали получаются на треть миллиметра больше во все стороны.
  • Попытка отбработки приводит к трещинам и откалыванию частей.
  • Верхняя сторона гладкая глянцевая. Нижняя - матовая.

Итоги эксплуатации.

Устройство неудобное:

  • Нажатия клавиш должны делаться сверху вниз, чтобы им противостояла реакция опоры стола. В моем устройстве кнопки приходится нажимать "к себе", когда палец движется к ладони. При этом, ладонь играет роль опоры и мышь смещается по столу.
  • Каким бы легким ни был корпус мыши, его смещение - медленная операция. "Дотянуться" до верхнего ряда клавиш - несложно, но постоянно переклчюаться между верхним и нижним рядами, цифрами и шифтами - никогда не получится быстро.
  • Стик PSP - очень неточное устройство. 12-битный ADC встроенный в AVR шумел на младших 5 битах, оставляя диапазон -64..63. Предельные уровни отклонения стика давали диапазон -40..30. Это достаточно для упрваления в играх, но не позволяет управлять мышиным курсором.
Время портачено не зря, я проект дал мне массу новых идей, я разобрался с 3D-печатью. AVR (без Arduino) оказался простым удобным устройством.


По итогам работы я решил сделать новое устройство. О нем - в следующий раз.

No comments:

Post a Comment