KeeBee. Изготовление с нуля собственной USB-клавиатуры
Несколько месяцев назад завершился мой проект по изготовлению USB-клавиатуры. Среди прочего, я выполнил дизайн электронных схем, спроектировал печатную плат, запрограммировал прошивку, сделал макет в CAD и произвёл сборку устройства. В результате получилась удобная клавиатура, которую я использую ежедневно и ласково называю KeeBee:
Клавиатура KeeBee в окончательном виде
Несколько целей проекта:
- Самостоятельное создание схемы.
- Написание прошивки клавиатуры.
- Узнать, как работает протокол USB.
Исследование и макет CAD
Мне очень нравятся минималистичные клавиатуры в стиле OLKB Planck и Preonic, которые за счёт ортолинейного расположения клавиш получаются очень компактными. Ещё я сразу знал, что хочу использовать переключатели Cherry MX Brown. Имея виду эти два компонента дизайна, я начал играть с ключевыми макетами в OpenSCAD. Это отличный инструмент с открытым исходным кодом, который работает скорее как язык программирования, чем WYSIWYG-интерфейс для мышки.
Взяв размеры элементов из документации Cherry MX, я сделал макет верхней пластины, затем добавил переключатели и клавиши, чтобы получить представление о том, как будет выглядеть окончательный результат. Верхняя пластина находится над печатной платой клавиатуры и служит хорошим стабилизатором для переключателей.
Дизайн верхней пластины:
После добавления клавиш:
Прототипирование платы и проектирование прошивки
В качестве основного микроконтроллера я выбрал STM32F042K6T6. Это около трёх долларов за чип, если брать от одной штуки. У него достаточно контактов для матрицы сканирования 69 клавиш (всего 32 контакта). Он работает на процессоре ARM Cortex M0 и содержит специальную USB-периферию для отправки USB-сигнала, не загружая этой задачей основной процессор. Я купил dev-плату Nucleo для прототипирования с этим чипом, прежде чем интегрировать его в дизайн своей печатной платы. Nucleo очень удобно легла на макетную плату и запиталась по USB.
Я разместил на макетной плате маленькую цепь на четыре клавиши, чтобы протестировать диодный контур, который я изучал. Игнорируя USB-сторону уравнения, на первом шаге требовалось заставить переключатели Cherry надёжно включать и выключать четыре соответствующих светодиода при нажатии кнопок.
Матрица сканирования — это такая техника, которую нужно использовать, когда у вас больше переключателей, чем контактов на микроконтроллере.
Когда матрица удовлетворительно заработала, пришло время поработать над USB.
Встроенный цикл прошивки по сути такой:
- Просканировать все клавиши в матрице.
- Сопоставить расположение кнопок с соответствующими символами в выбранной раскладке (QWERTY, Dvorak и т. д.).
- Взять результат сопоставления, сгенерировать пакеты USB HID Report и отправить на периферийное устройство USB.
- Включить светодиод на клавиатуре, если клавиша нажата, выключить — если нет.
static void scan_and_update() < scan_matrix.Scan(key_scans, row_count, column_count); keyboard.SendReport( key_pipeline.MapKeyScans(key_scans, key_count)); update_key_press_status(); >int main() < Init(); status_led.SetOk(true); while (true) < scan_and_update(); >>
Компонент keyboard.SendReport фактически передаёт пакеты USB-хосту. Я упорно пытался заставить USB правильно работать. В этом протоколе много нетривиальных слоёв, которые требуют точного тайминга и правильной идентификации устройства. В итоге пришлось запустить Wireshark, чтобы прослушать все USB-пакеты, поступающие на мой ноутбук Linux и выяснить, где что потерялось. Поиск в интернете практически ничего не дал, на большинство вопросов отвечают примерно так: «Вероятно, ваше USB-устройство сломалось, нужно купить новое». Если вы на самом деле пытаетесь сконструировать USB-устройство, такие ответы не очень полезны. Мне оставалось только погрузиться в объёмные спецификации USB с большим количеством незнакомой терминологии.
Повозившись некоторое время, я всё-таки заставил клавиатуру с четырьмя клавишами корректно идентифицировать себя как USB HID (Human Interface Device) и все нажатия правильно передавались на ноутбук:
Регистрация в качестве USB-вендора и получение официального device id дорого стоит. Если у вас просто любительский проект, то придётся захватить идентификатор какого-нибудь похожего устройства. Я подумал, что “Gear Head” звучит круто, тем более они выпускают клавиатуры, поэтому выбрал их.
Схема и печатная плата
Получив более-менее работающую прошивку и рабочий прототип, пришло время составить схему и дизайн печатной платы в KiCAD и сделать реальную печатную плату. Когда я добился, что схема для 4 кнопок работает, осталась относительно простая задача соединить всё вместе:
После разработки схему и установки площадок для компонентов нужно произвести макет реальной печатной платы:
KiCAD умеет красиво рендерить будущую плату в 3D:
Есть много отличных учебников по KiCAD. Я начал с отличной видеосерии Getting to Blinkey 4.0 от Криса Гэммела, где он подробно разъясняет все этапы создания схемы светодиодного юлинкера в KiCAD от начала до конца.
Заказ печатной платы и компонентов
Доведя схему и дизайн печатной платы до удовлетворительного уровня, я начал размещать кучу заказов:
- Все компоненты из списка материалов: переключатели, светодиоды, диоды, микроконтроллеры и т. д. Я обычно заказываю такие штуки на DigiKey.
- Сама печатная плата. Довольно много сервисов готовы недорого изготовить вам прототип. У меня отличный опыт работы с OshPark и JLCPCB. Для этого проекта я выбрал JLCPCB из-за цены на такой размер, а ещё потому что они разрешили выбрать синее покрытие.
- Все остальные детали: крышки и прочее. Для этого проекта мой шурин помог лазером вырезать верхнюю и нижнюю клавиатурные пластины из 1/4” акриловых листов. Для остальных частей можно использовать онлайновые сервисы лазерной резки и 3D-печати, если нет доступа к оборудованию.
JLCPCB очень доступный сервис. Этот дизайн с доставкой DHL из Китая обошёлся менее чем в $30, а весь процесс от загрузки файлов до прихода посылки занял чуть больше недели.
Шурин взял DXF-файлы из OpenSCAD и забросил их в лазерный резак:
Окончательная сборка
Получив все детали, я начал сборку. Первый шаг — сборка компонентов печатной платы: паяльник для больших электронных компонентов и паяльная станция для поверхностного монтажа маленьких компонентов, таких как микроконтроллер STM32.
Общее время сборки платы составило около трёх часов — большую часть заняла пайка 70 диодов и переключателей.
Я добавил хедер для JTAG-отладки, через который подключил JLINK Edu mini для прошивки микроконтроллера с помощью OpenOCD.
Затем пришло время окончательного тестирования и финальной сборки:
Сын решил, что это отличный поезд для его животных:
Итоги
От первоначальной идеи до окончательной сборки проект занял около трёх месяцев. Было исключительно полезно в качестве хобби сделать то, что я до сих пор ежедневно использую на работе.
Все файлы проекта опубликованы на GitHub, в том числе исходники прошивки, схемы печатных плат, список материалов и модели CAD.
Спасибо за чтение и приятных хаков!
- Производство и разработка электроники
- Компьютерное железо
- Периферия
- DIY или Сделай сам
- Электроника для начинающих
Переделать клаву от ноута во внешнюю USB-клаву через arduino
В общем сабж.
Есть клава от «Fujitsu Siemens Amilo чего-то там», хочу сделать из неё внешнюю USB клаву. форфан / для экспы / интересно / .
Я в электронике вообще нуб, от слова совсем, даже паять не умею.
Всё что я делал на ардуинах — проверял чтоб работало то что я купил (китайский клон, nano 3.0, если правильно помню), а точнее заливал код на мигание диодом 0.1 сек, а не 1 сек (как в заводской прошивке).
Внимание вопрос — что мне нужно будет делать вообще?
Накопать доку по этой клаве? А если не будет — сделать переходник для шлейфа и анализировать какой сигнал приходит при нажатии разных кнопок?
Или разобраться как клава «крепилась» в ноуте, т.е. куда идут дорожки, может контроллер выпаять и сдалать вывод от него?
Или просто гуглить подобные решения, разбираться что и как там кто-то делал и пробовать применить?
q11q11 ★★★★★
05.01.16 00:46:12 MSK
Arduino.ru
Добрый день. Хочу подключить клавиатуру ноутбука по usb. Есть Mega 2560. Клавиатура 25 pin. Идея такова:
1) Узнаю карту клавиатуры (какие пины какая кнопка замыкает): подключаю все 25 пинов к цифровым выходам, зажимаю одну кнопку на клавиатуре, на один из пинов подаю высокий сигнал, остальные слушаю, ищу высокий сигнал и так по всем 25 пинам, в итоге получаю для каждой клавиши набор замыкающихся пинов при нажатии.
2) Обратная задача, строю контроллер: Беру карту клавиатуры из п.1 и вставляю в микроконтроллер (Atmega?), прикручиваю usb, заставляю при нажатии отправлять команды как это делает клавиатура
Самое важное — абсолютный 0 в программировании.
Может я вообще заблуждаюсь, и у меня ничего не получится? Прошу помощи.
- Войдите на сайт для отправки комментариев
Как подключить клавиатуру к ноутбуку 3 способами
Вопрос, можно ли подключить внешнюю клавиатуру к ноутбуку, задают только пользователи, не стремящиеся вникать в нюансы работы компьютерной техники. Однако даже в самом простом деле есть нюансы, которые полезно знать.
Подключение проводной клавиатуры к ноутбуку
Владельцы лэптопов в качестве альтернативного устройства ввода, как правило, используют Usb-клавиатуры. Такой гаджет, скорее всего, удастся без проблем подключить к ноуту. Исключение — лэптопы, у которых только Thunderbolt и Type-C. В основном это некоторые разновидности макбуков. Если некуда вставить штекер Usb-клавиатуры, придется пробовать какое-нибудь беспроводное решение или использовать переходник.
При наличии подходящего порта Usb для подключения проводной клавиатуры к ноутбуку достаточно соединить их. При обилии разъемов Usb выберите более медленный — второй версии. При подключении клавы к Usb 3 вы ничего не выиграете, но затрудните использование быстрого порта, когда это действительно актуально, например, при записи гигабайтных файлов на флешку.
Если есть свободные порты Usb 2 справа и слева, возможно, стоит выбрать левый от себя. В таком положении шнур не будет мешать, свисать со стола.
Windows, скорее всего, без проблем распознает подключенную клавиатуру. Если этого не произошло, установите драйвера.
Также стоит упомянуть наиболее экзотичный вариант — подключение к лэптопу клавы с разъемом PS/2. Этот устаревший интерфейс производители ноутов давно уже игнорируют, поэтому подключение такой клавиатуры возможно только через переходник.
Как подключить беспроводную клавиатуру к ноутбуку
Отсутствие лишних кабелей на столе вдохновляет многих пользователей на покупку беспроводной клавиатуры. Людей не смущает необходимость периодически менять батарейки и следить за их состоянием.
Существует два интерфейса для подключения к ноутбуку беспроводной периферии:
- Первый в большинстве случаев предусматривает передачу сигнала на частоте 27 МГц. Дальность действия — до 20 метров. Радиосигнал огибает любые препятствия.
- Блютуз работает на частотах, близких к 2,4 ГГц. Дальность действия — до 10 метров. Сигнал сложнее перехватить злоумышленникам, но передается он не так быстро, как хотелось бы. Блютузовские клавиатуры не подходят для игр.
В первом случае клавиатура обязательно комплектуется адаптером, потеря которого может стать проблемой, поскольку заменить приемник сигнала бывает сложно. С блютуз-устройствами в этом плане проще. Далее рассмотрим, как подключить продвинутую беспроводную клавиатуру к ноутбуку.
Через Bluetooth
Ноутбуки хороши тем, что в них почти всегда есть блютуз. Это дает возможность использовать беспроводные клавиатуры, которые дружат с этим интерфейсом. Порядок подключения:
- Проверьте питание клавиатуры. Батарейки должны быть в порядке.
- Передвиньте ползунок включения, расположенный рядом с блоком светодиодов, в активное положение. Если клава уже включена, выключите ее и включите заново. Это поспособствует ее обнаружению.
- Нажмите комбинацию клавиш для сопряжения, указанную в документации к клавиатуре, например, Fn + W. Светодиод, подписанный значком блютуза, должен дать знак, что клава готова к сопряжению.
- Проклацайте «Пуск» — «Параметры» — «Устройства» — Bluetooth. Передвиньте ползунок блютуза в активное положение. Нажмите на плюсик, отвечающий за добавление блютузовского или другого устройства. Выберите блютуз. Ноут найдет внешнюю клавиатуру. Вам останется только клацнуть по ней в интерфейсе Windows для завершения сопряжения.
Если ноутбук не поддерживает блютуз, можно использовать отдельный адаптер или клаву со свистком в комплекте. Адаптер подсоединяют к порту Usb, после чего Винда распознает устройство, что дает возможность впоследствии подключить клавиатуру.
С Usb-адаптером
Большинство пользователей ноутбуков не ограничиваются юзаньем тачпада: подключают к лэптопу мышь, упрощая тем самым управление интерфейсом Винды. Те, кто не любит кабели на столе, используют беспроводные манипуляторы. Для подключения такой мыши вставляют в Usb-разъем адаптер, который входит в комплектацию устройства.
С беспроводными Usb-клавиатурами аналогичная история. В отличие от устройств ввода, работающих через блютуз, ничего на компе настраивать не надо. Исключение — ситуации, при которых Винда не может установить драйвера самостоятельно. Но такое случается редко. В большинстве случаев, чтобы подключить юсбишную клавиатуру к ноутбуку без проводов достаточно:
- вставить адаптер в ноут;
- перевести клавиатуру в рабочее состояние, передвинув переключатель в положение ON;
- подождать пару секунд, пока Винда установит драйвера.
Возможные проблемы
Неполадки проводного подключения:
Проблема
Неполадки беспроводного подключения:
Проблема
Если вышеперечисленные рекомендации не помогли привести клавиатуру в чувство, попробуйте подключить ее к другому ноуту. Гаджет, который не хочет дружить ни с какими лэптопами, заслуживает отправки в ремонт. Если гарантийный срок не истек, можно вернуть клаву в магазин. Пусть там разбираются.
В заключение — парочка моментов, которые помогут избежать проблем, связанных с использованием внешней клавиатуры. Во-первых, не желательно покупать дешевые гаджеты сомнительных брендов. Даже если это проводная клава — ждите неприятностей. Подключить — подключится, а вот дальше готовьтесь к сюрпризам: от стирания краски символов до проблем с отдельными клавишами или устройством в целом. Во-вторых, если купили беспроводную клаву, перед подсоединением не поленитесь почитать инструкцию. Возможно, есть какие-то нюансы, связанные с подключением.