Оглавление:
- Запасы
- Шаг 1: электрическая схема
- Шаг 2: Сборка
- Шаг 3: программирование
- Шаг 4. Настройка ярлыков
- Шаг 5: Улучшения
Видео: Программируемая клавиатура: 5 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:49
В этом проекте я покажу, как сделать относительно простую и недорогую программируемую клавиатуру для отображения наиболее часто используемых сочетаний клавиш, приложений и многого другого.
Эта клавиатура распознается как клавиатура во всех основных ОС, никаких дополнительных драйверов не требуется.
Запасы
- Поворотный энкодер.
- Множество (в зависимости от ваших потребностей) кнопок.
- Arduino Pro Micro, Arduino Leonardo или любая другая плата для разработчиков с микроконтроллером Atmega32U4.
- Проволока, припой, паяльник и т. Д.
- (Необязательно) Тяжелая основа для предотвращения скольжения клавиатуры, я использую старый 3,5-дюймовый жесткий диск.
Шаг 1: электрическая схема
Я решил использовать плату разработки Arduino Pro Micro с микроконтроллером Atmega32U4, который имеет 18 используемых цифровых контактов.
Контакты для подключения кнопок и поворотного энкодера были выбраны без особого порядка, но следует отметить некоторые моменты:
- Все выводы с возможностью цифрового считывания имеют внутренние подтягивающие резисторы, что позволяет уменьшить влияние внешних подтягивающих резисторов. Конечно, код должен быть обновлен соответственно, потому что он ожидает, что состояние вывода будет переходить от низкого к высокому при нажатии кнопок.
- В примере с библиотекой encoder.h отмечено, что наилучшая производительность кодировщика достигается, когда оба контакта подключены к контактам, поддерживающим прерывание MCU. Большинство аналоговых выводов Atmega32U4 не имеют возможности прерывания.
- Точные значения понижающего резистора не имеют большого значения, все от 1 кОм до 100 кОм подойдет. Большие значения сопротивления позволяют уменьшить рассеиваемую мощность, но приводят к более медленной реакции вывода на изменения напряжения. Просто выберите резисторы любого номинала, которые у вас больше всего.
- Механические энкодеры не самые надежные вещи из-за износа контактов и дребезга. Вот почему необходимо хорошее решение для устранения проблем. Выбранные мной значения конденсаторов и время задержки в коде, вероятно, не дадут вам наилучших результатов. Так что нужно немного поэкспериментировать. Или переключитесь на что-то вроде оптического кодировщика, но его цена значительно выше.
Шаг 2: Сборка
Я хотел сделать клавиатуру как можно более чистой, поэтому припаял все компоненты на обратной стороне макета платы. Я подумал, что клавиатура будет более эргономичной, если использовать ее под небольшим углом. Вот почему я припаял Arduino Pro Micro на отдельной плате и соединил все цифровые контакты проводом с кнопками. Так удобнее подключать USB-кабель.
Я нашел старый 3,5-дюймовый жесткий диск, который можно использовать в качестве основания для клавиатуры, он довольно тяжелый и предотвращает скольжение формы платы по столу при работе (также помогают нескользящие накладки). Также в нем есть удобные 3-миллиметровые отверстия для винтов, в которые я вкрутил латунные стойки и зафиксировал доску под небольшим углом.
Шаг 3: программирование
Код написан с помощью Arduino IDE. Вам потребуется установить 2 библиотеки:
- Кодировщик Пол Стоффреген
- Клавиатура Arduino
Для компиляции для Atmega32U4 вам также необходимо установить файл платы Arduino Pro Micro, у Sparkfun есть отличный учебник, как это сделать.
Заранее следует отметить одну вещь: будьте осторожны и не оставляйте «клавиши нажатыми» в вашем коде. Это случилось со мной, и MCU постоянно рассылал спам по каким-то комбинациям клавиш. Единственный способ, которым я знаю, как это исправить, - это перезаписать загрузчик на MCU. Если вы закончите, как я, вы можете следовать этому руководству, чтобы записать загрузчик, вам понадобится еще одна плата Arduino для использования в качестве программиста.
В основном цикле MCU сначала считывает каждое состояние кнопки, если обнаруживается изменение состояния с LOW на HIGH, выполняется функция keyboard_shortcut (i). Переменная i - это идентификатор нажатой кнопки, общее количество кнопок определяется ALL_BUTTONS (в моем случае 15). При выполнении keyboard_shortcut (i) отправляет CTRL + SHIFT, а затем букву, которая сопоставляется с идентификатором кнопки: 1-> A, 2-> B, 3-> C и т. Д. Некоторые комбинации, такие как CTRL + SHIFT + N, опускаются, потому что это уже используется в Windows10 по умолчанию (в данном случае для создания новой папки). Вот список всех ярлыков Windows по умолчанию. После короткой задержки MCU отправляет сигнал, чтобы отпустить все клавиши, и функция возвращается в основной цикл.
После того, как все кнопки проверены, MCU проверяет, изменилось ли положение поворотного энкодера, и если это так, keyboard_shortcut (i) выполняется с уникальным идентификатором.
Нажатие кнопки Encoder инвертирует логическую переменную encoderButtonFlag. Когда энкодер вращается, на ПК отправляется другой ярлык, в зависимости от направления вращения и значения encoderButtonFlag.
Если для параметра debugFlag установлено значение 1, отладочные сообщения отправляются через UART на последовательный монитор.
Шаг 4. Настройка ярлыков
То, что делает каждый ярлык, зависит от вас, у всех нас разные предпочтения. В качестве примера приведу, какие ярлыки я настроил для себя. Я использую Linux Mint 19.3 с менеджером рабочего стола xfce4, поэтому в моих примерах в основном используются сценарии bash, но я также покажу несколько базовых примеров для Windows10.
На первом изображении вы можете увидеть, какие скрипты я сопоставил с какими ярлыками. Это делается из меню настроек xfce, процесс прост. Вы можете найти эти скрипты в моем репозитории GitHub
6 кнопок меньшего размера внизу предназначены для запуска приложений, таких как веб-браузер или файловый менеджер, некоторые из этих приложений вызываются из сценария start_only_one_app.sh, который получает имена всех запущенных приложений и выполняет поиск приложения, которое вы хотите запустить. Если окно приложения уже существует, оно становится сфокусированным, иначе запускается новый экземпляр приложения.
Другие скрипты:
- 2nd_display_control.sh - включает / выключает второй монитор.
- moon_lamp.sh - включает / выключает мою лунную лампу.
- pc_load.sh - создает всплывающее окно уведомлений с текущим использованием и температурами процессора и графического процессора.
- shutdown.sh - инициализирует выключение ПК с задержкой в 1 минуту и создает всплывающее окно с уведомлением, в котором отображается оставшееся время.
- spec_vpn.sh - подключается к определенному серверу OpenVPN или, если соединение уже существует, отключается от сервера.
- shortcut_controll.sh - принимает команду (плюс, минус, табуляция, закрыть) в качестве аргумента, определяет, какое окно теперь сфокусировано, и, если определенное приложение обнаруживается активным, выполняет управляющее действие. Например, для открытия новой вкладки в возвышенном текстовом редакторе ярлык по умолчанию - «CTRL + N», а в терминале xfce - «CTRL + T», поэтому этот скрипт позволяет открывать новую вкладку в возвышенном и терминальном редакторе с помощью той же кнопки.
Первая функция поворотного энкодера - регулировать громкость, вторая - управлять масштабированием активного окна через shortcut_controll.sh.
Для ОС Windows вы можете сопоставить ярлыки с приложениями через окно свойств программы, как показано на втором рисунке. Для всего остального вы захотите использовать AutoHotkey. Это язык сценариев автоматизации для Windows.
Несколько простых примеров синтаксиса AHK:
;Контроль громкости
^ + t:: Отправить {Volume_Up}
возвращение
^ + v:: Отправить {Volume_Down}
возвращение
; Закрыть активное окно
^ + h:: WinGetTitle, Заголовок, A
PostMessage, 0x112, 0xF060``,% Заголовок%
возвращение
;Выключить компьютер
^ + b:: Выполнить выключение / с
Шаг 5: Улучшения
Некоторые возможные улучшения:
- Кнопки лучшего качества.
- Печатная плата прототипа довольно сильно прогибается при нажатии кнопок.
- Подсветка RGB для изменения цвета в зависимости от того, на какую функцию установлен поворотный энкодер.
- Больше кнопок (используйте IO Expander IC).
- Лучший энкодер (или лучшее решение для устранения дребезга).
Рекомендуемые:
Программируемая на Python рука робота DIY: 5 шагов
Программируемая роботизированная рука на Python: зачем нужен этот проект: (а) Научитесь управлять роботизированной рукой, фактически написав код Python. Это даст вам наиболее детальный контроль при добавлении компьютерного программирования на ваш пояс и изучении внутренней работы сложных двигателей на основе регистров
Totally Lit - Программируемая светодиодная акриловая вывеска RGB: 3 шага (с изображениями)
Totally Lit - Программируемый акриловый знак со светодиодной подсветкой RGB: поигрался с лазерным резаком / гравером и действительно влюбился в гравировку на прозрачном акриле и сияние источника света с края. Толщина используемого акрила составляет 25 дюймов. лист, который действительно чисто режет л
Программируемая станция лупера гитарных эффектов True Bypass с использованием микропереключателей: 11 шагов
Программируемая станция лупера гитарных эффектов True Bypass с использованием двухпозиционных переключателей: Я гитарный энтузиаст и любитель. Большинство моих проектов связано с гитарной атрибутикой. Я собираю собственные усилители и несколько педалей эффектов. В прошлом я играл в небольшой группе и убедил себя, что мне нужен только усилитель с ре
Картонная программируемая клавиатура: 8 шагов (с изображениями)
Картонная программируемая клавиатура: по мере развития технологий люди хотят, чтобы вещи становились все более и более виртуальными, однако иногда гораздо практичнее и удобнее иметь что-то физическое, к чему вы можете прикоснуться и с чем можно взаимодействовать собственными руками. Один пример
Программируемая кормушка для аквариумных рыбок - разработанный гранулированный корм: 7 шагов (с изображениями)
Программируемая кормушка для аквариумных рыб - Гранулированный корм для рыб: Гранулированный корм для рыб - гранулированный корм для аквариумных рыб с очень простой конструкцией полностью автоматической кормушки для рыб. Он работал с небольшим сервоприводом SG90 9g и Arduino Nano. Вы запитываете всю подачу с помощью USB-кабеля (от USB-зарядного устройства или USB-порта вашего