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

Прокомментировать Просмотры: 0

Осталось добавить подарки и посадить в центре Деда Мороза.

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

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

Что хотелось улучшить

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

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

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

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

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

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

Ещё одной задачей был удобный доступ к аккумуляторам. Раньше для этого приходилось снимать плату и рисковать повредить проводку или другие соединения. Я подготовил два варианта корпуса — для батарей на 1350 и 3000 мА·ч — и в обоих предусмотрел съёмные лючки снизу. Теперь аккумулятор можно извлечь без полной разборки клавиатуры. Заодно я немного изменил расположение внутренних компонентов и избавился от нескольких лишних отверстий.

Доработка корпуса

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

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

Это версия на 3 000 мА*ч.
Вариант корпуса для аккумулятора на 3000 мА·ч.
И лючок к ней.
А это крышка для него.

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

А это версия для батареи на 1350 мА*ч.
Версия для батареи ёмкостью 1350 мА·ч.

В сравнении с прежним вариантом конструкция стала аккуратнее и, что важнее, удобнее в обслуживании.

Монтаж светодиодов

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

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

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

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

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

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

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

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

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

lily58_left.overlay
lily58_right.overlay

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

&led_strip {
    chain-length = <24>;
};

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

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

/ {
    right_encoder: encoder_right {
        compatible = "alps,ec11";
        a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
        b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
        steps = <80>;
    };

    sensors {
        compatible = "zmk,keymap-sensors";
        sensors = <&right_encoder>;
        triggers-per-rotation = <20>;
    };
};

&led_strip {
    chain-length = <21>;
};

Верхняя часть файла описывает энкодер, нижняя — подсветку. Параметры 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 часов. Если она простаивает больше десяти минут, сначала выключаются экраны, а затем подсветка. При нажатии любой клавиши всё снова включается. Экономия должна быть экономной.

Планы на будущее

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

Возможно, ещё сделаю ножки, чтобы наклонить обе половинки на 5–10 градусов. Говорят, так печатать удобнее. При этом можно обойтись без переделки корпуса: впаять в стенки шайбы от петель ноутбука и смоделировать ножки.

В целом результатом я доволен. Расскажите в комментариях о своих клавиатурах и их доработках — очень интересно узнать о вашем опыте.

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов