Доброго дня! Хочу поделиться своим опытом сборки кастомного макропада для пк. Так как я работаю за ПК, меня часто посещают мысли, как бы ускорить свои рабочие процессы. Не так давно мне на глаза попалась реклама небольшой клавиатуры на 4 кнопки и с 1 энкодером. Мне показалось это интересным, но я подумал, что легко соберу такую штуку и сам. Да и я люблю всевозможные поделки и опыт у меня есть.
Предварительно заказал 10 свитчей Cherry MX red с алиэкспресса. Свитчи - это сами кнопки, которые замыкают контакты. Явно какие-то китайские, но какая разница для макропада? Колпачки и корпус решил спроектировать во Fusion 360 и напечатать на 3д принтере самостоятельно. Так же у меня была идея встроить туда небольшой OLED дисплей, забегая вперед, я не придумал как его использовать и забил, оставив в корпусе "продуманное" отверстие для него)
Получилось вот так. Было много правок перед печатью, но без косяков конечно же не обошлось. Например, я задал не верные размеры для платы и не учел толщину проводов. Однако перепечатывать я не стал, пользоваться можно и так.
Электроника
В таких проектах чаще всего используют Adruino pro micro. Хотя я решительно не понимаю почему именно ее. Она достаточно не дешевая и медленная. Поэтому я решил использовать STM32 103f, да и у меня их было 2 штуки, а ардуины были только nano, которые не имеют аппаратного USB.
Немного отходя от темы, еще у меня была идея собрать клавиатуру на ESP32 и я это сделал. Работало все через блютуз, но прошивку пришлось писать самому, естественно она была примитивная и менять раскладку на ней было очень не удобно. Несколько позже я узнал что есть нормальная прошивка для ESP, но разобраться с ходу не вышло, поэтому я забил. А так как я пока еще не знал что конкретно я хочу от клавиатуры, я решил пересобрать на проводной вариант с нормальной продвинутой прошивкой QMK.
Кроме контроллера, желательно использовать диоды на каждую клавишу. Они нужны для правильного распознавания одновременного нажатия более 2 кнопок. А на энкодеры, желательно использовать конденсаторы и резисторы, для подавления дребезга контактов. Но как вы наверняка уже поняли, использовать их я конечно же не буду😁. Однако проблем в использовании это не вызывает.
Как вы помните, у меня 10 кнопок и 2 энкодера. В энкодерах есть еще по кнопке. Поэтому в сумме имеем 12 кнопок. Для подключения к контроллеру разумнее всего использовать матрицу. Кнопки подключатся в столбцы и строки, тем самым занимая меньше выводов микроконтроллера.
Как видно по картинке, для подключения 16 кнопок нужно всего лишь 8 контактов, а если подключать их напрямую получилось бы 16 контактов и 1 контакт GND - земли. Согласитесь, матрица выглядит интереснее.
Итак, у нас есть 12 кнопок, ровной матрицы не выйдет, сделаем 4 на 3. Итого 7 пинов, шикарно. НО не делайте моих ошибок, вместо того чтобы экономить выводы микроконтроллера, спроектируйте укладку удобно для вас. Например, для меня было бы удобнее сделать матрицу 5 на 3. Да, не экономно, но куда удобнее прокладывать провода чем вести змейку.
Нарисовал по памяти, то, что вышло у меня. Выглядит не удобно, так оно и есть, паять было совсем не удобно😃
После того как матрица готова, нужно подключить все к микроконтроллеру. Делается это просто, соединяем все столбцы и строки с пинами. У STM32 почти все пины можно спокойно использовать, поэтому можно сильно не заморачиваться, но все таки нюансы есть. Лучше заранее проверить какие из пинов можно использовать под кнопки а какие под энкодеры.
К примеру, на моем контролере, выводы юсб так же выходят на пины A10, A11. Не заметив этого, я долго мучался с проблемой прошивки. Оно то работало, то не работало, то плата определялась как, то ни так. Поэтому, проверьте свои контроллеры сразу и выясните какие пины занимать нельзя.
Я использовал B11, B10, B1, B0, A7, A6, A5 для кнопок и A1, A2, A3, A4 для энкодеров.
Бонус! Я нашел у себя в закромах адресную RGB ленту как раз на нужное количество кнопок. Подключается она очень просто, 2 пина для питания и 1 пин для управления. Так и подключил к С13. Ленту просто смял под размер кнопок, получилось неплохо. Правда пихать ее под уже собранную матрицу было не простоя задачей😁
Что мы видим на данной картинке? Правильно, боль перфекциониста. Из-за использования разных отрезков проводов, разной толщины, все уложилось как попало, даже отверстие новое пришлось делать под кабель. Также на картинке видно как я смял RGB ленту. Заказал нормальные провода, в следующем проекте такого не будет. Ага, конечно😁
Думаю с электроникой все. Пришло время прошивки.
Прошивка QMK для STM32
Я буду использовать модификацию MSYS QMK, разработанную для работы с vial.
VIAL - это программа для настройки раскладки, через интерфейс. Очень удобно надо сказать. В QMK есть поддержка обычного
VIA, но для его работы нужно согласование вашего проекта в официальном репозитории. Мне показалось это странным. а вот проект VIAL, не требует подтверждения и работает достаточно удобно.
В программе разбирался, конечно методом тыка, поэтому на это ушло не мало времени. Честно говоря, сейчас я даже не смогу вспомнить точно, что я делал и какие конкретно действия производились. Поэтому я думаю просто выложу тут код своей прошивки для дальнейшей доработки под ваши нужды, если вы захотите собрать сие чудо.
Как можно использовать?
Данный макропад можно использовать абсолютно по разному, можно даже сделать много различных раскладок и менять их по мере необходимости. Я же сделал следующее.
- Крутилка управления музыкой
- Крутилка управления звуком
- Кнопка включения и выключения второго монитора
- Открытие диспетчера задач
- Особая кнопка для юнити которая включает и выключает объекты на сцене
- Свернуть все окна
- Создать рабочий стол
- Закрыть рабочий стол
- Переключиться на следующий стол
- Переключиться на предыдущий стол
- Открыть диспетчер рабочих столов
Таким образом, такой макропад позволяет вам увеличить свою продуктивность и удобство работы за ПК за счет кастомизации и оптимизации раскладок.
Файлы
Ссылка на проект - https://disk.yandex.ru/d/TM7SNagOBxPKFA
Внутри вы найдете проект Fusion360, проект прошивки QMK, проект прошивки для ESP32,
Нужно понимать, что там только заготовки и о полностью готовом проекте речи не идет, однако для меня он завершен и я пользуюсь тем что у меня вышло.