Новогодняя елочка? Нет, это подсветка для сплит-клавиатуры Lily58 и кастомный прозрачный корпус

Не хватает только подарков и Деда Мороза посередине.Не хватает только подарков и Деда Мороза посередине.

Привет, Хабр! Ну что, снова я со своей клавиатурой – думаю, это уже финальный вариант. В предыдущей статье я рассказывал, как переделывал свою беспроводную Lily58 Pro: менял контроллеры, устанавливал аккумуляторы большой ёмкости и печатал новый корпус. В целом, все хорошо, но корпус получился немного колхозным, там паяльником приходилось делать канавки в пластике.

Мне это не очень нравилось, поэтому решил сделать иначе, более аккуратно. Ну и в этой статье описываю свой опыт. На этот раз переделал 3D-модель, добавил съемные крышки аккумуляторных отсеков, подготовил каналы для проводов и увеличил количество светодиодов до 45. Заодно пришлось разбираться с GitHub и настройками ZMK, поскольку после монтажа работала только часть подсветки. Поехали!

Что решил изменить

После последней переделки клавиатура работала нормально, особых претензий к ней не было. Контроллеры nice!nano v2, OLED-дисплеи, энкодер и Bluetooth — все было штатно, аккумуляторы тоже проблем не доставляли. Но устраивало расположение подсветки, ее яркость и то, что для доступа к батареям приходилось разбирать корпус. Крайне неудобно. Да еще и провода проложены лишь бы как. Короче, главная переделка — это корпус: решил сначала изменить 3D-модель, а уже потом заниматься электроникой.

Вот так выглядела правая половинка клавиатуры после последних изменений.Вот так выглядела правая половинка клавиатуры после последних изменений.

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

Это бледненькая подсветка в прошлой модификации.Это бледненькая подсветка в прошлой модификации.

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

Вот так она выглядела с аккумулятором на 3000 мА*ч.Вот так она выглядела с аккумулятором на 3000 мА*ч.

Ещё одна задача — сделать нормальный доступ к аккумуляторам. Раньше для этого нужно было снимать плату, а вместе с ней рисковать повредить проводку и другие соединения. Поэтому подготовил два варианта корпуса: под батареи ёмкостью 1 350 и 3 000 мА·ч, причем в обоих предусмотрел съемные лючки снизу. То есть аккумулятор теперь можно вынуть, не разбирая всю клавиатуру, что очень удобно. Заодно немного изменил расположение внутренних элементов и убрал несколько ненужных отверстий.

Переделка корпуса

Для светодиодов добавил канавки шириной 13 мм и глубиной 2 мм. Под провода сделал отдельные каналы глубиной около 2 мм, чтобы они не выступали над внутренней поверхностью корпуса. Пришлось учитывать расположение креплений, разъёмов и аккумуляторов, поскольку свободного места там немного. Некоторые участки модели переделывал несколько раз, проверяя, не мешают ли новые углубления уже существующим элементам. В результате получилось разместить подсветку по нужным участкам, не увеличивая размеры корпуса.

С лючками пришлось повозиться отдельно. Нужно было оставить достаточно места для батареи, но при этом сохранить крепления и сделать крышку, которую можно снять без разборки половинки. Для варианта под аккумулятор на 1350 мА·ч изменил размеры посадочного места, расширив его преимущественно в длину. В версии под 3000 мА·ч отсек получился больше, но принцип тот же. В обоих случаях крышки устанавливаются снизу, поэтому доступ к батарее теперь гораздо проще.

Это версия на 3 000 мА*ч.Это версия на 3 000 мА*ч.И лючок к ней.И лючок к ней.

После печати проверил, как всё собирается. Аккумуляторы помещаются в свои отсеки, крышки закрываются, а провода можно уложить в подготовленные каналы. Сами светодиоды теперь находятся в специальных углублениях, поэтому ничего дополнительно проплавлять не пришлось.

А это версия для батареи на 1350 мА*ч.А это версия для батареи на 1350 мА*ч.

По сравнению с предыдущим вариантом конструкция стала аккуратнее, а главное — удобнее в обслуживании.

Установка светодиодов

Для подсветки использовал адресные RGB-светодиоды семейства WS2812. У каждого есть встроенный контроллер, поэтому цвет и яркость можно задавать программно. Соединяются они последовательно: выход данных предыдущего светодиода подключается ко входу следующего, а питание подводится к цепочке отдельно. Благодаря этому для управления всеми элементами достаточно одного сигнального вывода микроконтроллера. Но есть и недостаток: если где-нибудь пропадет контакт, все последующие светодиоды могут перестать работать.

Вот такие вот светодиоды WS2812. Взял ленту на 1 м, 144 элемента.Вот такие вот светодиоды WS2812. Взял ленту на 1 м, 144 элемента.

Обычные монтажные провода для такой конструкции оказались слишком толстыми. Поэтому взял многожильный кабель, разобрал его и использовал отдельные медные жилы (изолированные). Они тонкие, легко гнутся и почти не занимают места, что для моей клавиатуры особенно важно. Для защиты соединений дополнительно использовал каптоновую пленку.

Половинка с уложенными светодиодами и лючком для батареи. Никаких проплавленных канавок.Половинка с уложенными светодиодами и лючком для батареи. Никаких проплавленных канавок.

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

После монтажа подключил питание и включил подсветку. Светодиоды заработали, но только первые десять, остальные никак не реагировали на изменение цвета и режимов. Сначала подумал, что где-то ошибся с пайкой, поскольку при последовательном подключении достаточно одного плохого контакта, чтобы все последующие элементы перестали получать данные. Проверил соединения, но явной проблемы не нашёл. Тогда решил посмотреть настройки ZMK, поскольку десять работающих светодиодов выглядели подозрительно похожими на программное ограничение.

Настройка ZMK через GitHub

Конфигурация моей Lily58 хранится в репозитории GitHub, а прошивка собирается через GitHub Actions. На выходе получаются прошивки в формате UF2, которые можно записать на nice!nano v2 через стандартный загрузчик. В моем случае для левой и правой половинок используются отдельные конфигурации.

Сначала нужно открыть каталог config/boards/shields/lily58/. Там находятся два файла:

lily58_left.overlaylily58_right.overlay

В первом хранятся дополнительные настройки левой половинки, во втором — правой. У меня они уже существовали, поэтому создавать новые не понадобилось. Для левой половинки требовалось добавить следующие строки:

&led_strip { chain-length = ;};

Здесь led_strip — существующий узел Devicetree, отвечающий за адресную подсветку. Запись &led_strip позволяет изменить его свойства, не создавая новый узел. Значение 24 — количество установленных светодиодов на левой половинке. Если подключено другое число элементов, его нужно заменить на своё. Иначе система будет думать, что их больше или меньше, соответственно, работать все это будет с глюками. Остальные настройки подсветки в моём случае уже были заданы ранее, поэтому менять их не пришлось.

С правой половинкой немного сложнее, поскольку в ее overlay уже находились настройки энкодера. Их я оставил без изменений, добавив только параметр длины цепочки. В результате файл lily58_right.overlay выглядит так:

/ { right_encoder: encoder_right { compatible = "alps,ec11"; a-gpios = ; b-gpios = ; steps = ; }; sensors { compatible = "zmk,keymap-sensors"; sensors = ; triggers-per-rotation = ; };};&led_strip { chain-length = ;};

Верхняя часть файла отвечает за энкодер, нижняя — за подсветку. Параметры steps и triggers-per-rotation относятся к конкретной модели энкодера и моим настройкам, поэтому копировать их в другую конфигурацию необязательно. Для управления громкостью используется привязка sensor-bindings в файле lily58.keymap, которую я тоже не менял. Короче, вся новая настройка здесь сводится к последним трем строкам. Но чтобы они действительно попали в прошивку, понадобилось ещё изменить build.yaml.

Изменение build.yaml

Этот файл находится в корне репозитория и содержит параметры сборки для обеих половинок. В нём указываются контроллер, шилд, дополнительные настройки CMake и названия готовых файлов. Сначала я попробовал подключить overlay через ZMK_EXTRA_DTC_OVERLAY_FILE, но после сборки и перепрошивки количество работающих светодиодов осталось прежним. Как выяснилось, в моей конфигурации нужно использовать EXTRA_DTC_OVERLAY_FILE. Этот параметр передаётся через CMake и позволяет указать дополнительный файл Devicetree.

Рабочий вариант build.yaml получился следующим:

---include: - board: nice_nano_v2 shield: lily58_left nice_oled cmake-args: -DCONFIG_ZMK_KEYBOARD_NAME="lily58_Oled" -DCONFIG_ZMK_STUDIO=y -DCONFIG_ZMK_SLEEP=y -DCONFIG_ZMK_IDLE_TIMEOUT=60000 -DEXTRA_DTC_OVERLAY_FILE=/tmp/zmk-config/config/boards/shields/lily58/lily58_left.overlay artifact-name: nice_lily58_left_oled snippet: studio-rpc-usb-uart - board: nice_nano_v2 shield: lily58_right nice_oled cmake-args: -DCONFIG_ZMK_SLEEP=y -DCONFIG_ZMK_IDLE_TIMEOUT=60000 -DEXTRA_DTC_OVERLAY_FILE=/tmp/zmk-config/config/boards/shields/lily58/lily58_right.overlay artifact-name: nice_lily58_right_oled

Здесь nice_nano_v2 — используемый контроллер, а lily58_left nice_oled и lily58_right nice_oled — варианты шилдов для обеих половинок с OLED-дисплеями. Для левой дополнительно включён ZMK Studio, который позволяет менять некоторые настройки клавиатуры без перепрошивки. Параметры сна и времени простоя оставил прежними, поскольку они уже использовались в моей конфигурации. Путь /tmp/zmk-config/… относится к окружению сборки GitHub Actions, поэтому в другом репозитории он может отличаться. Главное, чтобы EXTRA_DTC_OVERLAY_FILE указывал на реально существующий файл.

После изменения build.yaml требуется сохранить его вместе с обоими overlay в репозитории. Если GitHub Actions настроен на автоматическую сборку, процесс запустится после коммита.

У меня все запустилось, но изменения не применились. GitHub Actions может показать зелёную отметку, но это ещё не означает, что нужный overlay действительно использовался. Поэтому решил проверить итоговый Devicetree-файл zephyr.dts, который создаётся после объединения всех настроек платы, шилдов и дополнительных конфигураций. В локальной сборке он находится в каталоге zephyr внутри папки сборки, а в GitHub Actions его содержимое можно вывести в журнале соответствующего этапа. В этом файле нужно найти узел светодиодной цепочки и посмотреть значение chain-length.

Для левой половинки должно быть указано 24, для правой — 21. Если там осталось десять, значит изменения не попали в итоговую конфигурацию, даже если исходный overlay содержит правильные строки. В таком случае нужно проверить путь в build.yaml и журнал CMake, где отображаются используемые файлы Devicetree. Ну и проверяем этап в West Build, поскольку там можно обнаружить неправильный путь или другие ошибки подключения. В моём случае после замены параметра на EXTRA_DTC_OVERLAY_FILE нужные значения наконец появились в итоговом файле.

После перепрошивки заработали все 45 светодиодов: 24 слева и 21 справа. Режимы RGB теперь применяются ко всей цепочке, а OLED-дисплеи, раскладка и остальные функции клавиатуры сохранились.

Что получилось

Подсветка работает на обеих половинках, причём светодиоды расположены внутри корпуса, а не непосредственно под клавишами. Благодаря прозрачному пластику свечение распространяется по стенкам и хорошо заметно в темноте. 

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

В автономном режиме на полной яркости все это работает около полутора дней (понятно, я не сижу 36 часов подряд за клавиатурой). Плюс в том, что при простое свыше 10 минут клавиатура отключает сначала экранчики, а потом и подсветку. Потом нажимаешь на любую кнопку — все возвращается к жизни. Экономия должна быть экономной.

Что дальше

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

Еще, наверное, сделаю ножки для наклона обеих половинок на 5-10 градусов. Говорят, так печатать еще удобнее. Тут можно обойтись без изменений корпуса — впаять в стенки шайбы от петель ноутбука и смоделировать ножки. 

Ну так — я всем доволен. Пишите в комментариях о своих вариантах клавиатур и их переделки, это крайне интересно.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев