モジュラーな自作キーボードアーキテクチャを求めて
この記事は 自作キーボード Advent Calendar 2018 その 1 の 12日目の記事です。
昨日は IKeJI さんの 今年作ったキーボードまとめ でした。
この記事では Modulo という新しい自作キーボードのアーキテクチャとその展望について紹介します。
Modulo とは
Modulo は名前からもこの記事のタイトルからも分かる通り、モジュラーな設計が可能な自作キーボードアーキテクチャの名前です。大きく分けて、MCU を持つ Pendant Module と、いわゆるキーボートやトラックパッドなどの Input Module の 2 つの Module から成り立っています。
Modulo について、よく自作キーボードに使われる プロジェクト と言う言い方ではなく アーキテクチャ という言葉を使っていますが、これは Modulo が、私が設計するキーボードに特異な ―たとえば Ergo42 の次世代機― の設計というわけではなく、多くの自作キーボードに適用可能な汎用的な設計・仕組みであることを表しています。もっと言えば、Modulo は自作キーボードにおける 規格のようなもの 、ソフトウェア的な言い方をすれば フレームワーク と言ってもいいかもしれません。
なにがうれしいの?
モジュラーな設計の最大の旨味は、車輪の再発明の大幅な削減が期待できることです。また、自作キーボードの場合、副次的な効果として MCU のキーボードからの分離による小型化・薄型化が期待できます。具体的にどんなうれしいことがあるか、いくつか考えてみます。
- MCU がキーボードから離れるため 小型化・薄型化 がしやすい
- Pendant / Input Module のインターフェースが規定されているので機能の追加・交換・共有が簡単
- 新しいキーボードを設計するときに Pendant の実装部分については考える必要がない
- Pendant を Bluetooth 対応のものに差し替えるだけで 追加開発なしに無線化 が可能
- カスタマイズが簡単
などなど、でしょうか?
前述の通り Modulo をフレームワーク、たとえば Ruby on Rails のアナロジーで考えてみると、みんなで同じ機能を何度も開発せずに、gem を組み合わせてサービスを構築する、というのを想像してもらうとしっくり来るかもしれません。
Why Modulo?
私はもともと ErgoDox という自作キーボードを使っていて、それはそれでメチャメチャにかっこよくてある種の完成形だと今でも思うのですが、それでもいくつか不満点が出てきてしまい、勢い余って Ergo42 というキーボードを自分で設計するに至りました。その顛末については 以前詳しく書いたので そちらを参照していただきたいのですが、Ergo42 でほぼ End Game だなと思っているものの、今度はその開発プロセスに対して不満が出てきてしまいました。
車輪の再発明と学習コスト
近年良く見かける QMK に準拠した自作キーボードの設計は基本的に
- 一体型で、キーボード基板に Pro Micro 等の開発ボードや MCU を直接実装したもの
- 分割型で片手の基板に開発ボード / MCU を、もう片手の基板には I/O Expander 等を実装したもの (ErgoDox 型)
- 分割型で両手の基板ともに開発ボード/ MCU を実装したもの (Let's Split 型)
の 3 つに大別でき、いずれもキーボードの基板と MCU が一体となった設計となっています。市販のキーボードもそういった設計なので、自然な発想と言えます。
ですが、 ぼくのわたしのかんがえたさいきょうのキーボード を自分で設計しようと思うと、すべての機能がキーボード基板に詰め込まれているため、
- 既存の全部入りキーボードの設計を読み解き設計意図を解釈し
- 複数ある実装手段についてそれぞれの比較評価を行い
- すべての機能を改めて自分で実装し直す
というかなり冗長でコストの高い手順を踏まなければいけません。
よくよく考えてみるとわかるのですが、自作キーボードを設計しようという動機の概ねはキースイッチの物理配列を変更したいという要求ではないかと思います。スイッチの物理配列を変えるために、MCU の仕組みやマトリックス回路について知らなければならない、ましてや設計実装まで行わなければいけないのはあまり DRY とは言えません。知らなくていいところはできればブラックボックスとして扱えるようにするのがエンジニアリングの常套手段です。
また、最近では無線化やトラックボールの実装など新たな機能の開発も活発に行われています。それらについても、それぞれのキーボード設計者が個別に調査し重複する設計実装をするのはあまりにももったいない し私がやりたくない ので、自作キーボードにもモジュラーな設計を導入し、エンジニアリングできないかと考えたのが Modulo です。
Modulo の現在とこれから
Ergo42 Modulo Alpha
Modulo は現在開発中でありまだまだこれからですが、5 月に Tokyo MK で展示した原理検証を始めてから、ついにキーボードとして使えるところまではたどり着くことが出来ました!(2018/12/12 現在)
天キーで頒布させていただいた、Ergo42 をベースにした Ergo42 Modulo Alpha が無事動作しており、これにて Modulo の基礎的な技術検証は完了したことになります。Ergo42 Modulo Alpha では Modulo 型の設計により、Cherry MX 互換スイッチを搭載するキーボードとしてはほぼ最薄となる本体厚さ 9 mm も実現することが出来ました。
アクリルの加工精度の問題等改善すべき点はまだまだありますが、一旦キーボードとしては満足して使えるレベルになっています。今後は Ergo42 だけでなく新しい設計のキーボードの横展開も計画しています。
Modulo Track Pad & Modulo BT Pendant
@_gonnoc さんの協力の下、Modulo Series として接続できるトラックパッド Modulo Track Pad と、無線化 Module の Modulo BT (Bluetooth) Pendant の開発が進行中です。今後公開予定の Modulo Series のキーボード / 公開予定の Modulo 仕様に準拠したキーボードに装着するだけで無線化できるようになるよう開発を進めています。
Lime40 with Modulo (仮)
現在 @eucalyn_ さんが開発中の曲面配置キーボード Lime40 の Modulo Series 対応検討を進めています。また、Lime40 のような立体形状 / 空中配線キーボードに使いやすいような Modulo Breakout が計画されています。
C95 (冬コミ)
C95 2日目(日) 東 ナ-18a にて、たのしい人生が出展します!
Ergo42 Modulo Alpha / Modulo Pendant Alpha をベースに Ergo42 Modulo Beta-1 と Modulo Pendant Beta-1 を冬コミにてリリースできればと思っています (届けば)。また、欲張って他のデザインのキーボードの Modulo 版も出せれば出すかもしれません。
同時に Modulo BT Pendant についても、冬コミにて参考出展ないし頒布で準備を進めています!続報をお待ち下さい。
また、この Modulo について詳しく解説した KbD C95 という薄い本もリリース予定です。この記事で興味を持っていただけた方に、より一層詳しい Modulo の情報を提供できる本になる予定です (それ以外にも自作キーボードの情報を掲載予定です)。
Future Work
現在 Modulo Pendant はよく自作キーボードで使われる AVR ではなく ARM Cortex-M シリーズで開発されています。現在のファームウェアは QMK をベースに開発を行っていますが、C 言語書くのが大変とか個人的な趣味とかで Rust で ARM 向けファームウェアを開発する計画もあります (今止まってますが…)。いずれは、ハードウェアの設計のリファクタリングに合わせて、ソフトウェアの方も刷新していけたらたのしそうだなぁと思っています。
また、Modulo はキーボード側の設計がかなり単純化されるので、GUI でキースイッチ配置決めたら基板がポン as a Service できたらいいなぁとは思っています。思ってばっかだなお前。
まとめ
というわけでちょっと駆け足でしたが、いかがでしたでしょうか? この記事を通して Modulo シリーズや、自作キーボードそのものに興味を持っていただければ幸いです。
そしてそれらに興味を持っていただけたなら、ぜひ Self-Made Keyboards in Japan Discord Server も覗いてみてください。現在 900 人ほどのメンバーでワイワイやっています。Modulo の開発状況の共有や、開発にコミットしてくださる方とのディスカッションの場もこちらになっています。ぜひに。
以上、自作キーボード Advent Calendar 2018 その 1 の 12 日目に記事でした。明日 (今日) 13 日目はみなもさんの オリジナル自作キーボード開発(2D)を早足で説明する です。時空が歪んでいる。
この記事は Ergo42 Modulo Alpha + Kailh Pro Burgundy で書かれました。