Оглавление:

Программируемая клавиатура: 5 шагов (с изображениями)
Программируемая клавиатура: 5 шагов (с изображениями)

Видео: Программируемая клавиатура: 5 шагов (с изображениями)

Видео: Программируемая клавиатура: 5 шагов (с изображениями)
Видео: 32 Секретные Комбинации Для Вашей Клавиатуры 2024, Декабрь
Anonim
Программируемая клавиатура
Программируемая клавиатура
Программируемая клавиатура
Программируемая клавиатура

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

Эта клавиатура распознается как клавиатура во всех основных ОС, никаких дополнительных драйверов не требуется.

Запасы

  • Поворотный энкодер.
  • Множество (в зависимости от ваших потребностей) кнопок.
  • Arduino Pro Micro, Arduino Leonardo или любая другая плата для разработчиков с микроконтроллером Atmega32U4.
  • Проволока, припой, паяльник и т. Д.
  • (Необязательно) Тяжелая основа для предотвращения скольжения клавиатуры, я использую старый 3,5-дюймовый жесткий диск.

Шаг 1: электрическая схема

Электрическая цепь
Электрическая цепь

Я решил использовать плату разработки Arduino Pro Micro с микроконтроллером Atmega32U4, который имеет 18 используемых цифровых контактов.

Контакты для подключения кнопок и поворотного энкодера были выбраны без особого порядка, но следует отметить некоторые моменты:

  1. Все выводы с возможностью цифрового считывания имеют внутренние подтягивающие резисторы, что позволяет уменьшить влияние внешних подтягивающих резисторов. Конечно, код должен быть обновлен соответственно, потому что он ожидает, что состояние вывода будет переходить от низкого к высокому при нажатии кнопок.
  2. В примере с библиотекой encoder.h отмечено, что наилучшая производительность кодировщика достигается, когда оба контакта подключены к контактам, поддерживающим прерывание MCU. Большинство аналоговых выводов Atmega32U4 не имеют возможности прерывания.
  3. Точные значения понижающего резистора не имеют большого значения, все от 1 кОм до 100 кОм подойдет. Большие значения сопротивления позволяют уменьшить рассеиваемую мощность, но приводят к более медленной реакции вывода на изменения напряжения. Просто выберите резисторы любого номинала, которые у вас больше всего.
  4. Механические энкодеры не самые надежные вещи из-за износа контактов и дребезга. Вот почему необходимо хорошее решение для устранения проблем. Выбранные мной значения конденсаторов и время задержки в коде, вероятно, не дадут вам наилучших результатов. Так что нужно немного поэкспериментировать. Или переключитесь на что-то вроде оптического кодировщика, но его цена значительно выше.

Шаг 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).
  • Лучший энкодер (или лучшее решение для устранения дребезга).

Рекомендуемые: