...

пятница, 3 января 2020 г.

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

Я программист и, как вы догадываетесь, некоторое время провожу за набором кода. Это занятие обычно заключается в переносе мысли из пространства между дужками очков в пространство за монитором. Пока нейроинтерфейсы редки, легаси требования делают печать достаточно сложной, в ней участвуют мозг, глаза, руки, клавиатура, компьютер и монитор. Хотелось бы смотреть только на монитор, а не переводить взгляд на клавиатуру. При этом попадать по нужной клавише, быстрее печатать и меньше опечатываться, меньше двигать запястьем и пальцами.

Ответ — эргономическая клавиатура. Под катом процесс рождения двух. Уберите детей подальше от экранов, есть сцены технопорно


Программируя, печатаешь код и на скорость не жалуешься, это не узкое место. Больше времени уходит на подумать. Что раздражает, так это опечатки — когда их исправляешь, мысль теряется. И разглядывание кнопок вместо экрана не способствует её возвращению.

Вроде бы, умею печатать вслепую, но хочется подсмотреть, где на клавиши. И это отвлекает. Вроде бы, печатаю всеми десятью пальцами. Но сейчас Y и B нажал левой рукой, затем правой. А сейчас какой жать? И это тоже отвлекает. К тому же, наблюдательные заметили, что обычно печатают девятью пальцами: пробел большой и жмут на него одним большим пальцем. Даже если чередуют, то пользы/информации от такого большого пальца мало.

Не только я один пришёл к выводу, что у обычных клавиатур есть проблемы и стали их решать.


  • Ряды сдвинуты друг относительно друга на половину или четверть размера клавиши. Это наследие рычажных печатных машинок. Поэтому придумали ортоклавиатуры в строгую декартову клеточку.
  • Одинаковая высота столбцов, но разная длина пальцев. Тогда колонки для длинных пальцев сдвинули вверх.
  • Большой пробел неэффективно использует большие пальцы. Разбили его на отдельные кнопки и назвали это тамб кластер.
  • Цифровой блок мешает мышке. Убрать! И стало Tenkeyless.
  • Много кнопок на большой площади заставляют смещать кисть. В ответ обрезали кнопки, до которых не достать из домашней позиции (ASDF JKL;). И появились 60%, 40%, 20%, стенографические и двухкнопочные клавиатуры.
  • Мембранные клавиатуры дают слабую тактильную и звуковую обратную связь. Поэтому, не понятно, нужно ли дальше продавливать клавишу или можно переходить к следующей. Вернулись к старой ламповой механике, иногда с громким кликом.
  • Раскладка далека от оптимальной и до частых кнопок слабым пальцем далеко тянуться. Как архиватор сжимает файл так новые раскладки ужали перемещение пальцев в зависимости от статистики.
  • Руки растут из плеч, а не из груди и приходится гнуть кисти. Распилили половинки, чтобы повернуть или поставить на ширину плеч. Назвали это сплит.
  • На клавиши нанесена маркировка, которая провоцирует подглядывать. Тут всё просто — не маркировать!
  • Все люди разные и у каждого своя идеальная клавиатура. Стали делать свою эргономичную клавиатуру. И я стал делать.

Эпизод 1

Начал с таких дополнительных условий:


  • Без подсветки. Проще, да и меньше отвлекать будет.
  • Навесной монтаж, без печатной платы. Так исключён дополнительный технологический этап, который или долго осваивать, или долго ждать доставки.
  • Моносплит, то есть половинки разделены пространством, но в одном корпусе. Тогда если одна рука лежит на клавиатуре, то вторую можно положить не глядя. А в сплите не понятно как целиться во вторую половину. И под вопросом необходимость рук на ширине плеч в ущерб простоте.
  • Встроенная подставка под запястье. Показалось, это удобно.
  • Малый размер не более 30 см х 20 см, чтобы поместиться в мой настольный ЧПУ фрезерный станок.
  • 44 клавиши, просто для начала, а в меньшее не помещается русская раскладка.
  • Шаг между клавишами стандартный 19 мм, размер 18 мм и 1 мм щель.
  • Материал древесина. Выглядит оригинально, красиво трогать приятно и пыль да стружка древеская в доме лучше, чем иная другая.

Первым делом положил пальцы на лист бумаги и отметил кончики. Сделал то же самое на пластилине. Дорисовал карандашом кнопки и промерил расстояния. Перенёс рисунок в векторный редактор, там подровнял и распечатал. Повторил процедуру несколько раз другими способами, которые пришли в голову. Заказал свитчи и колпачки, и пока они шли, стал переносить в CAD. Попробовал несколько программ и понял, что они хороши, да не очень — нужно таскать всё мышкой. Как оказалось, скриптом легче. От CAD мне нужно только визуализировать скрипт, промерять расстояния и генерировать gcode (векторный 3D путь по которому будет летать конец фрезы ЧПУ станка). Очень понравилась идеология ImplicitCAD, но в части gcode он сыроват. Да и другие CAD сложно заставить генерировать gcode, который не будет долго летать по одному и тому же месту несколько раз.


Кратко расскажу, как gcode превращается в движения фрезы. Фреза вставляется в цангу фрезера, который размещён на портале, а он каретками перемещается по нашему родному трёхмерному декартовому пространству. Каретки движутся вращением винтов. Винты вращаются шаговыми двигателями. Шаговый двигатель поворачивается, притягиваясь своими полюсами к катушкам, по которым бежит ток в одном направлении и отталкиваясь от катушек с током в другом направлении. Ток большой, мелкая микросхема не справится с его управлением и этим занимается драйвер шагового двигателя, которая на вход каждый момент времени принимает 2 бита STEP (нужно ли сделать шаг) и DIR (влево или вправо) на слабом токе, а на выходе даёт большой ток нужного направления в обмотках двигателя. Для трёх двигателей получается нужно 6 бит 30 000 раз в секунду вынь да положь в жёстком реальном времени. Не успеешь, выйдет рассинхрон, и вместо задуманной траектории фреза пойдёт в лес, то есть в дерево не там где надо. Для настольного компьютера управление в жёстком реальном времени — это реальная проблема. Но не из-за недостатка процессорной мощи, а скорее от её избытка, утилизацией которой занимается операционная система, переключаясь 1000 раз в секунду между задачами. Когда переключится, точно не известно, как шедулер захочет. Поэтому генерацией STEP/DIR сигнала занимается микроконтроллер на Ардуинке под управлением прошивки grbl, а на вход получает тот самый gcode. Но тут другая проблема: gcode'а могут быть мегабайты, а памяти на Ардуине считанные килобайты. Приходится кормить её мелкими порциями по USB, как съест кусок, дать новый. Хорошо то, что кормить уже нужно не в жёстком реальном времени, а в мягком, и обычный ноутбук с bCNC прекрасно с этим справляется.


Немного о том, как заготовка превращается в изделие. К металлическому столу станка болтами прикручивается деревянный жертвенный стол, потому что его не жалко. К нему крепится заготовка. Материал вынимается сначала концевой фрезой большого диаметра, затем в углах и на чистовую фрезой малого диаметра. Но контурам пробегаю фаску угловой фрезой или закруглённой фасонной. Гладкие криволинейные поверхности делаются сферической фрезой. После каждой смены фрезы нужно выставлять начало координат по высоте. Начало каждого прохода очень ответственный момент. Нужно уменьшить скорость и внимательно наблюдать за фрезой. Если она начала что-то портить или повела себя необычным образом нужно срочно останавливать процесс, пока заготовка или фреза необратимо не пострадали. Например, фреза может уйти глубже, вырвать заготовку, не вращаться, дымиться, давать пыль вместо стружки, летать по другой траектории, быть не того диаметра или профиля. Затем заготовка переворачивается и таким же способом обрабатывается со второй стороны. Всего инструмент меняется с десяток раз. Самый ответственный момент в конце обработки, когда почти готовое изделие держится на тонких поддержках и его легко вырвать. Придётся начинать всё заново, так как обратно крепко и точно не приклеить и не доделать. Процесс фрезеровки очень напоминает отладку на проде, когда ошибки чинятся на лету и их цена велика.



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


Следующий этап пайка навесным монтажом. Я раньше думал что не умею паять. А оказалось это паяльник не умеет паять. Паяльная станция с регулировкой температуры творит чудеса и паяет сама. Нужно только держать жало в нужном месте мазать флюсом да подносить припой. Задача присоединить кнопки к микросхеме. Но кнопок 44, а управляемых пинов у Pro Micro только 18. В то же время у проводника два конца — куда ток входит и откуда выходит. Одни пусть будут рядами, а другие колонками, в сумме не больше 18. Этими концами можно управлять отдельно. Напряжение подаётся на весь ряд и считывается по очереди с каждой колонки. Нажатая кнопка его пропустит и мы его прочтём, не нажатая не пропустит. И число их комбинаций находится через умножение, то есть максимум наша Pro Micro может обслужить 99=81 кнопок. Нужно 44 кнопки. Можно 114, но мне больше подходит 6 колонок 8 рядов (4 слева и 4 справа). Схема нехитрая, опять привет Декарту, на этот раз в 2D. Хитрость появляется тогда, когда 3 кнопки нажмутся одновременно. Ток начнёт гулять от рядов к колонкам и обратно и покажется, что четвёртая кнопка, которая составляет квадрат с тремя нажатыми, тоже нажата. Чтобы ток шёл от рядов к колонкам, но не обратно, добавляются диоды. В качестве шины для ряда используется проводник самого диода, а для столбцов нужен изолированный провод, чтобы не было замыкания с рядами. Самая сложная часть это прикрепить ряды и колонки к Pro Micro, так как места мало.



На кнопки поставил купленные сферические колпачки, но они мне не понравились — острой гранью резали пальцы. Несколько дней рисовал и за день выпилил свои. Ножку сделал круглой 5.5 мм. Боялся, что она отломается, но держатся они крепко.


Настал черёд прошивки. Свою с нуля писать долго, поэтому взял QMK. Чтобы её сконфигурировать, нужно указать сколько в клавиатуре рядов и колонок, к каким пинам они подключены, как повёрнуты диоды (от рядов к колонкам или наоборот), как электрические ряды (8 штук) и колонки (6 штук) отображаются на ряды (4 штук) и колонки (14 штук) раскладки, а также саму раскладку. Процесс настройки раскладки может продолжаться вечно, я начал с QWERTY. Уместился в 3 слоя. Слои редко можно встретить в обычный клавиатурах. Чаще всего слоями Fn ряд совмещают с медиаклавишами на ноутбучных клавиатурах. Но когда клавиш только 44, без слоёв не обойтись. Кроме слоёв есть и другие способы присвоить разное значение одной и той же кнопке.

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

sudo systemctl disable ModemManager.service
sudo make gor:default:avrdude

Сборка остановится на ожидании перезагрузки микроконтроллера и в первый раз нужно замкнуть пин RST на землю. В дальнейшем удобно вынести кнопку перезагрузки в раскладку.


Всё первая версия моей клавиатуры готова. При использовании многое понравилось.


  • Разнесённость левой и правой половин.
  • Достаю до всех клавиш в домашней позиции
  • Гладкая приятная не скользящая текстура бука.
  • Циллиндрическая форма колпачков с закруглённым низом и поднятыми боками хорошо позиционирует палец.

Не обошлось без недостатков.


  • Подставка оказалась высокой и сильно добавила габаритов.
  • Угол поворота двух боковых столбцов для мизинца заставляет излишне его отгибать.
  • Большой угол поворота половин.
  • Визуально сложная раскладка.
  • Жёсткие чёрные Cherry свитчи — сложно долго удерживать слои большим пальцем.
  • Не заменить свитчи без пайки.
  • Мало клавиш, особенно не хватает навигации и цифр / спец. символов на основном слое.

Эпизод 2

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


Чтобы понять что мне нужно, отбракованные пластиковые колпачки прикрепил к пластилину и начал пробовать варианты размещений. Обнаружил, что мне удобнее держать пальцы не над его столбцом, а сбоку. Тогда по столбцу палец двигается по дуге почти не сгибаясь. Одновременно с этим, запястье лежит под углом и не нужно поворачивать левую и правую половину. Единственное, что остаётся, это сдвинуть столбцы по высоте. Также заметил, что 19мм шаг между клавишами оставляет между пальцами много места. А при повороте кисти пальцам становится ещё свободнее. Поэтому решим попробовать ужать шаг.


  • Совместимость с обычной раскладкой.
  • 70 кнопок, навигационные кнопки, цифровой ряд.
  • 16 мм шаг, меньше не позволяют свитчи. Щель между клавишами 0.5 мм.
  • Плоские колпачки с фаской 2 мм, которая нужна, чтобы соседние колпачки не мешали пальцу опуститься на 4 мм при нажатии.
  • Ножки у кнопок сделал прямоугольными в надежде на меньший люфт стема.
  • Визуально простой дизайн.
  • Минимальные габариты.
  • Материал полосатая лиственница.
  • Возможность замены свичей без пайки в разъёмах Kailh.
  • Очень мягкие свитчи Gateron Clear для большого пальца и навигации, чтобы комфортно долго держать.
  • Щёлкающие Gateron Blue и тихие Silent Brown на выбор для остальных клавиш.

Паять тонким проволочным припоем с нанесённым на него флюсом 70 кнопок оказалось даже легче, чем 44, нанося флюс вручную. А вот соединять ряды и столбцы к Pro Micro оказалось значительно сложнее из-за плотной компоновки.


Текущая раскладка QWERTY, до Colemak и прочих ещё не дорос.


Эксплуатация опять выявила некоторые недостатки.


  • Люфт клавиш иногда приводит к тому, что они цепляются друг за друга. Решается шлифовкой и увеличением толщины боковых граней, добавлением юбки.
  • Фаска с верхней поверхностью даёт угол 135 градусов. Неприятно на него натыкаться, нужно зашлифовать и скруглить.
  • Плоский верх колпачков не позиционирует палец. Цилиндр лучше.
  • Не шлифовал верх колпачков, оставил слегка рельефную текстуру, которая немного раздражает палец.
  • Большой палец натыкается на переднюю фаску и углы. Клавишу нужно сделать толще и закруглить передний край.
  • Большой палец слишком близко к основному ряду.
  • Сбоку видны свитчи.
  • Вытаскивая свитч для замены, нужно придерживать разъём. Можно ценой 2 мм добавить слой, аналогичный печатной плате, в отверстия которого будет вставляться разъём.
  • Тихие свитчи не понравились, похож на мембранную клавиатуру.
  • Текстурой бук понравился больше, чем лиственница.

Но достоинства перевешивают.


  • Смещения рядов позволяют не глядя позиционировать большие пальцы.
  • Дуговые движения по рядам очень удобны.
  • 16 мм шаг идеален. Пальцы не мешают друг другу и малым движением достают везде. Но нужно привыкать.
  • Визуальная простота.
  • Компактность.
  • Понравились щёлкающие свитчи. Мягкие свитчи легко долго держать.

Теперь клавиатурой можно пользоваться, чем и собираюсь заняться.

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий