foostan/crkbd の5列版である corne mini の静電容量無接点方式版を自作してみました。
今回の主なモチベーションは
- 他者が設計したキーボードを静電容量式化してみたい
- Column Staggered のものを作ってみたい
という感じです。
設計する前はオリジナルの PCB データを少しいじったら簡単に作れるだろうと思っていましたが、設計し始めてみると他者の作ったキーボードを静電容量式化するのはなかなか大変だと気付きました。
他者が設計したキーボードを静電容量式化することの困難さ
ハウジングの大きさによる制約
マイコンと静電容量スキャンモジュールさえ配置できれば、あとはスイッチ部分のフットプリントを静電容量式用のパッドに変えれば良いだけと初めは思っていました。
しかし現実はそんなに甘くなかったです。最大の問題はハウジングの大きさで、オリジナルのスペーサーの位置を踏襲するとハウジングが大きすぎてスペーサーと干渉してしまいハウジングをトッププレートにはめることが出来ませんでした。 Niz のハウジングを使った場合、左手用はオリジナルのスペーサーの位置でギリギリ問題ありませんが、右手用のほうはスペーサーとハウジングが干渉しました。
ヤスリで削ってどうにかなる感じではなかったので今回は干渉する部分を切り落としました。
これから静電容量式キーボードを自作しようとしている方で、まずはメカニカルキーボードを作って後に静電容量式化するという流れで製作を考えている場合はスペーサーの位置にお気をつけください。
部品を配置するスペースの制約
静電容量式キーボードを作るときに組み立てを楽にしようと思ったら のぎけす屋さんで売っている静電容量スキャンモジュールを使うのが無難な選択と思います。しかしこのモジュールとマイコンボードを組み合わせるとそれなりのスペースを必要とします。
私が今まで作った静電容量式キーボードでは ProMicro を使ってきましたが、corne で ProMicro とスキャンモジュールの組み合わせだとスペース的に乗り切らなかった1ため今回はサイズの小さい XIAO RP2040 を使いました。 XIAO RP2040 のサイズであれば元々 ProMicro 用に設けられていたスペースに必要なものはギリギリ乗せきれました。
Keyboard Firmware Framework の制約
RP2040 に対応した keyboard firmware framework として有名どころは QMK, KMK, PRK, Kermite の4つかと思います。メカニカルキーボードであればこの4つのうちどれでも動かせるのだと思いますが、こと静電容量式で使うとなると現状だと KMK 一択です。
静電容量式キーボードの firmware の場合、framework では ADC 対応、custom matrix scan 対応が必須です。 RP2040 に関して公式2でこの2つに対応しているのは Doc を読む限りは KMK(CircuitPython) だけだと思います。(QMK では ADC Driver をサポートする予定はあるようです。 qmk_firmware/platformdev_rp2040.md at a1676c3b8c3f5f5d713196d99ac358ba5fb021ef · qmk/qmk_firmware · GitHub)
今回 KMK で書いてみてとりあえず動くというレベルにはもっていけましたが、modtap の挙動を私好みにすることはできませんでした。modtap を設定したキーをタップしたときの反応が1テンポ遅れるまたは入力されないことがありました。メカニカルキーボードの firmware を KMK で作ったときも同様な挙動が見られたため、静電容量だからというより現状の KMK はこんな感じなのだろうと思います。
modtap の挙動に不満はあるものの全体の処理の流れがとても読みやすいので KMK は結構気に入っています。QMK で firmware を書いていたときは「この関数はどのタイミングでどこから呼ばれているの???」となりながら雰囲気で書いていましたが、KMK は全体的にコードが小さくどのタイミングでどの関数が呼ばれているかを調べるのが容易でブラックボックス感が少ないので好きです。 また Mu editor と組み合わせると電圧変化も簡単にプロットできるのでチューニングがとてもやりやすかったです。
KMK Firmware と XIAO RP2040 の組み合わせで静電容量式キーボードを作るために Firmware を書き始めた。
— goropikari (@goropikari_) 2022年12月12日
デバウンスが出来てないけれど、一応の入力ができるまでは出来た。
スイッチの ON/OFF 時の電圧変化も取りやすいし KMK 結構良さそう pic.twitter.com/8LZ0uoTr5C
2023/1/15 追記
modtap 周りの設定を見直すことで入力は改善されました。ただし、prefer_hold=True
にしていても左右の通信があると hold になりづらいです。
完成
そんなこんなで完成しました。KMK でうまく Firmware が書けなかったら QMK が公式で RP2040 の ADC driver をサポートするまで気長に待とうと思っていましたが、とりあえずこの記事を書ける程度にはキーボードとして動くようにできたのでほっと一安心です。
キーキャップは Majestouch Xacro 交換用キーキャップの Dvorak 配列のものです。Dvorak 配列用という物珍しさで買ってみましたが、触り心地がどことなく REALFORCE のキーキャップと似ていて個人的には気に入っています。