UID:
20250512213143
Created:
2025-05-12
Updated:
2026-02-08

nRF52840 + ZMK firmware の備忘録

nRF52840 + ZMK ファームウェアキーボードの習作として HM0011a を設計した。

HM0011a の写真

特徴

主な特徴は以下の通り:

  • 36 キー オーソリニア配列
  • Seeed Xiao nRF52840 + ZMK firmware による無線化
  • ドングルによるキーボード側の省力化
  • リバーシブル基板によるコスト削減
  • ケース厚 10mm, 全高 20mm

設計時資料

  • KiCad
  • 参考キーボード
  • バッテリー持続時間の目安
    • Power Profiler
      • nice!nano v2 が nRF52840 搭載のボードなので、目安として使える
      • ドングル仕様の場合には、キーボード側は peripheral となる
  • Seeed Xiao nRF52840
  • ZMK firmware
    • Documentation
      • ZMK はドキュメントが充実しているので、必要なことはだいたい書いてある。
        • 例: 新しいボードの追加、ドングルの設定方法、キーマップの設定
      • ただし、 Zephyr についてはあまり書いていない。 Zephyr 由来の Kconfig や devicetree の概念も説明が薄い気がする。
    • caksoylar/zmk-config
      • ZMK 開発者の zmk-config
      • 参考として有用
    • caksoylar/zmk-rgbled-widget
      • 同開発者の out-of-tree な LED ドライバモジュール
      • ドライバ開発時に役立つかもしれない
    • caksoylar/zmk-smart-toggle
      • 同開発者の out-of-tree な behavior モジュール
      • behavior の実装時に役立つかもしれない

ハードウェア設計時の工夫

当初の設計方針としては以下があった。

  1. 分割無線
  2. 36-key オーソリニア
  3. リバーシブル基板
  4. アクリル積層サンドイッチケース

XIAO nRF52840 を採用

分割無線方式を採用したキーボードの設計は経験がなかったため、これを実現するためのハードウェア・ソフトウェアスタックで冒険するつもりはなかった。

リバーシブル基板

また、リバーシブル基板を採用した。リバーシブル基板により、一枚の基板の表裏を入れ替えることで左手用の基板としても右手用のそれとしても使用できる。

利点としては製造費用の低減があり、小ロットでは左右で2種の別デザイン基板を製造するよりも安上がりになる。

欠点としては複雑性の増加がある。今回の設計では、 XIAO nRF52840 のピン配置とキーボード基板のパッドの対応関係に注意する必要があった。 XIAO nRF52840 を左手側にはんだ付けする場合でも、右手側にはんだ付けする場合でも、 デジタル IO ピンが Col/Row へ接続されるよう設計した。

XIAO nRF52840 周りの schematic

アクリルプレート

アクリル層も KiCad で設計した。アクリルプレートは Kicad で設計すると 基板との整合性を取りやすい。最終的に KiCad 内で DXF と PDF に変換して発注した。

トッププレート: トッププレート

ミドルプレート: ミドルプレート

ボトムプレート: ボトムプレート

ZMK 設定時の工夫

特徴的な部分は多くないが、あえて挙げるのであれば、ドングルを採用した点にある。

Keyboard Dongle

次回のアイデアメモ

  • 有線 / 無線切り替え
    • 有線は type-c
  • 電池容量の削減
    • Power profiler 上では 200mAh で 5ヶ月になるので、十分すぎる
      • 100mAh でも 3ヶ月
  • HM0002 配列への回帰?
  • hotswap ソケット対応
  • choc v2 系スイッチ対応
  • 発売されていれば, Xiao nRF52840 Plus 対応
  • 3Dプリンタを導入していれば、3Dプリンタケース
  • OLED 付きドングル
  • XIAO nRF52840 用のパッドを、表面実装を利用して裏表で別のアサインにすれば、ソフトウェア側がややこしいことにならずに済みそう
    • 左右有線接続時の UART pin も共通化できる
    • 欠点: はんだ付け時の固定が大変かも

#public