- CopyPaste клавиатура своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана
- Ремонт «вырванных» клавиш клавиатуры ноутбука
- KeeBee. Изготовление с нуля собственной USB-клавиатуры
- Исследование и макет CAD
- Прототипирование платы и проектирование прошивки
- Схема и печатная плата
- Заказ печатной платы и компонентов
- Окончательная сборка
- Итоги
CopyPaste клавиатура своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана
Многие люди, только начинающие изучать программирование, задают вопрос — нормально ли копипастить чужой код? Учитывая, что человек существо ленивое, а время программиста стоит денег — ответ, на мой взгляд, очевиден — да. Но людям, которые доводят этот принцип до абсурда, которые копируют не думая и не разбираясь, а еще тем, кто пишет диплом, реферат именно таким и посвящается эта клавиатура и статья. И да, эта клавиатура содержит ровно две кнопки — copy и paste.
Под катом будет рассказ о сборке и прошивке — даже дребезг логическим анализатором посмотрим
Итак, я принял решение собрать эту клавиатуру. Начать решил с компонентов — digispark(маленькая платка с attiny85 и обвязкой для usb, которую можно вставить прямо в компьютер) пусть отлавливает нажатия и эмулирует клавиатуру. Теперь кнопки — нормальных механических кнопок для клавиатуры у меня нет, а ждать не хочется, поэтому возьмем тактовые smd кнопки. Вот такие:
Определились с компонентами, теперь нарисуем лицевую панель, чтобы в дальнейшим распечатать на принтере. Размеры 45mm * 21mm, размеры накладок на кнопики 10mm* 10mm
Что-нибудь напишем вверху и внизу.
Получилось как-то так:
Следующая проблема — кнопки smd, значит их надо впаять на какую нибудь плату. Так как травить плату ради такого дела не имеет смысла — процарапаем текстолит буквой T:
Расстояние между центрами кнопок — 15mm. Припаяем их на импровизированную плату.
Паяем три провода. Когда кнопка будет нажата она будет замыкать один из крайних проводов на центральный.
Далее берем первый попавшийся кусок пвх пластика и приклеиваем на него нашу лицевую панель, а на кнопки клеим их насадки. Единственное что я не учел, так это то, что у тактовых кнопок сама часть которая давит на мембрану вращается. Если вы хотите улучшить конструкцию — используйте нормальные переключатели.
В итоге должно получиться то, что вы видели в начале статьи. Другой ракурс.
Три провода подключаем в digispark.
Далее нам надо заставить digispark притвориться клавиатурой и по нажатию на кнопку отправлять СTRL+C/CTRL+V.
Итак, нам надо отловить нажатие. Начнем с того, что если центральный провод подключить к +5V, а боковые провода подключить к пинам, настроенным на вход, то при нажатой кнопке, да, на пине будет 1, но при ненажатой пин будет ловить помехи и не получится отследить, что есть нажатие, а что помеха. Решается такая проблема удивительно просто — нужно подтянуть через резистор большого номинала ( десятки кОм) пины к земле. Открыв даташит на микроконтроллер можно увидеть, что внутри него можно включить подтяжку, но только к VCC(+ питания). Собственно, это не проблема — требуется всего лишь подключить центральный пин к GND(земле) и инвертировать логику работы.
Представить можно так:
Но есть еще одна проблема. Мы живем в неидеальном мире, где у кнопок механический контакт.
И он неидеален. А контроллер у нас быстрый — и так получается, что в момент переключения кнопка не моментально замыкается, а несколько миллисекунд ее сопротивление скачет — это называется дребезг. Из-за дребезга контроллер может решить, что кнопка нажата не один раз, а, например, 10. Вот иллюстрация этого явления из интернета:
Но так же неинтересно! Может у нас и нет никакого дребезга. Чтобы это узнать я расчехлил логический анализатор. Сейчас и посмотрим… Собираем тестовую установку — подтяжка 10 ком, 16 миллионов измерений в секунду
Видим что нажатие длилось 0,1176 ms
Приближаем момент отпускания кнопки(выделено красным)
Сбоку есть некоторые измерения «выбросов», а всего дребезг длился около 0,1435ms. Да я знаю, это мало, но стоит учесть что у меня кнопки только из ленты, контакты еще не успели окислиться или изменить форму. А со временем ситуация будет только ухудшаться. Как же бороться с дребезгом? Есть три основных способа:
- Триггер Шмидта + RC-цепь — позволяет получить идеальный сигнал
- RC-цепь — позволяет сделать из выбросов горку(плавно возрастающий сигнал)
Но у нас же целый микроконтроллер — и поэтому нам доступен 3 способ: задержки
Один из способов «в лоб» бороться с дребезгом это проверять, все еще нажата ли кнопка через время, заведомо большее дребезга. Если реализовывать через задержки то код будет блокирующий, но как это делается правильно можно посмотреть в сотнях статей про борьбу с дребезгом и arduino.
Итак, поняли мы, что кнопка нажата — что же дальше? Сказать компьютеру, что нажато CTRL+C/V.
Делается это с помощью стандартной библиотеки для digispark’a.
Итоговый код вышел таким:
Вот такой проект за 3 часа у меня получился. Не бойтесь копировать чужой код!
Источник
Ремонт «вырванных» клавиш клавиатуры ноутбука
Используя в повседневной жизни ноутбук, пользователи иногда встречаются с проблемой: «отломалась» клавиша на клавиатуре. Причиной может выступить любой фактор: чистка клавиатуры, использование пылесоса для чистки, шальная кошка (да, даже такое случается), маленький ребенок, интересующийся всем вокруг и случайно сорвавший клавишу, и много другого. Но не все знают, что это маленькую беду достаточно легко исправить.
Я расскажу Вам, как поставить кнопку обратно без потерь.
(осторожно! очень много фотографий)
Случилась беда, и клавиаутра вашего ноутбука выглядит следующим образом:
Ноутбуки все разные, но чаще всего крепление у них похоже (принцип крепления).
Клавиша с обратно стороны выглядит следующим образом:
Видим две пары креплений:
— две защелки;
— два паза под ушки качельки.
К клавиатуре крышечка клавиши крепится при помощь специальной качельки, которая состоит из 2-х деталей, соединенных шарниром по середине и образующие букву Х (ха).
Часто случается, что клавиша «вырывается» вместе с качелькой. В таком случае необходимо сначала отсоединить качельку от крышечки клавиши, установить качельку на клавиатуру, а уже потом возвращать на законное место клавишу.
Для этого берем клавишу, отщелкиваем защелку, с одной стороны клавиши, и выводим усики качельки и пазов, с другой стороны:
Получим 2 детали: крышечку клавиши и качельку.
На клавиатуре для крепления есть 3 ушка: одно побольше и два поменьше.
Если по каким-то причинам эти крепления у вас погнулись (например, на клавиатуру упал тяжелый предмет, в следствии чего и выскочила клавиша), их необходимо выгнуть в правильное положение. Будьте аккуратны, сильно гнуть эти крепления нельзя, т.к. они выполнены из алюминия и легко отламываются, после чего ремонт сильно усложнится.
Устанавливаем качельку на клавиатуру:
— заводим под большое ушко крепления
— легким нажатием заводим качельку на 2 маленьких крепления
После того, как установили качельку, можно ставить обратно крышечку клавиши.
— заводим выступы на качельке в пазы крышечки
тут надо действовать аккуратно и не промазать :).
Далее, убедившись, что ушки зашли в пазы, легким нажатием на верх клавиши закрепляем крышечку клавиши,
будет слышен легкий щелчок.
Готово! клавиша на месте.
Клавиши большого размера (Tab, Shift, space, enter) кроме пластмассовой качельки могут иметь металлический стабилизатор для равномерного нажатия.
На подложке клавиатуры имеются два дополнительных ушка для закрепления этого стабилизатора. В остальном конструкция такая же, как описанная выше.
Сначала заводим концы стабилизатора.
Затем нижние «усики» качельки заводим в пазы и легким нажатием ставим кнопку на место.
Клавиша пробела (а иногда и другие длинные клавиши) держится на двух качельках и стабилизаторе.
В принципе, установка ни чем не отличается от вышеописанной установки клавиши Shift.
Выше было рассмотрено внутреннее устройство клавиш ноутбука фирмы Hewlett-Packard.
Чуть не забыл. Если качелька, состоящая из двух частей при произошедшем ЧП оказалась разобраной, не стоит отчаивать. Воспользовавшись иглой, зубочисткой или другим подходящим предметом ее легко собрать. Заводим одну сторону в паз, а для установки второй стороны используем наш вспомогательный предмет.
Теперь, дорогие пользователи, у вас не будет вопросов:
— как устроена клавиатура ноутбука?
— как починить клавишу на ноутбуке?
— как поставить на место крышечку клавиши?
— что делать, если кошка вырвала клавишу на ноутбуке?
и т.п.
Источник
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.
- Включить светодиод на клавиатуре, если клавиша нажата, выключить — если нет.
Из main.cc:
Компонент 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.
Источник