Geaconについて
作ろうと思ったきっかけ
GRIN配列が大好きで、この配列を使ったキーボードをいくつか自作していました。
・アルミボトムプレート(というかブロック)を採用したGRISSANDO2
そこからqmkにいろいろ思うところがでてきたので、ZMKでcharlieplexを使った60%キーボードを作る実験をしていました。
・60%charlieplex試作機
xiao1枚で60%作れた時点で、こんなものか〜余裕余裕〜と割と満足してたところに、
roBaの存在を知りました。
「右手側のAlt〜Ctrlって使わないから、ここにトラックボール置けるんじゃないか?」(Keyballじゃんと気づいたのはしばらくあとの話。)
そこから、トラックボール付き無線キーボードに興味を持ったのがきっかけでした。
トラックボール付き分割キーボードはroBaやmonaがあるから、もっと別な、自分にしか作れないものを・・・ならばcharlieplexを使った一体型のトラックボール付きキーボードを作ってしまおう!と考えたのがきっかけでした。
特徴について
ZMKによる無線接続対応
最近流行りのZMKを使って無線接続を実現しています。
ZMKは開発が盛んで、本作にも採用しているXiaoのLEDでステータスを表示するRGB-LED-WIDGETモジュールや、ZMK STUDIOなどいろんな新しいものがどんどん出てきていてわくわくします。
60%Grin配列
このキーボードのキモです。
通常マトリクスだとNxMキーが実装可能です。
Seeed Xiao nrfだとGPIO11ピン、NFC2ピン、はんだ付け激ムズセンサー3ピンで最大15ピンGPIOに使えます(?)ので、7x8=56キーが最大の実装可能なキー数になります。
本作ではLow-powered improbed charlieplex matrix(低電力改良2乗マトリクス)を採用しており、最大(N-1)x(N-2)キーが実装可能です。
※1ピンはinterrupt用に使用
なので9ピンだけで8x7=56キーが実装可能になります。
15ピン使えば182キーも実装可能ですね!
これで万事解決かと思いきや、肝心のトラックボール(PMW3610)を搭載すると5ピン必要になり、GPIOが足りなくなってしまいました。PMW3610に5ピン、マトリクス用(62キー)に9ピン必要です。。。
ZMKのDiscordをひたすら眺めて、IOエキスパンダを使用する方法で解決できる可能性が見えてきました。
IOエキスパンダについて
詳しいことはドキュメントを見ていただいたほうがわかりやすいので詳細は割愛します。
トラックボール基板のPMW3610がSPIだったので、それにあわせてIOエキスパンダはMCP23S17を採用しました。
※複数のSPIデバイスは一部ピンを共有することができます。
先人の偉大な実装例をコピペしながら、実装を模索してようやく実装に成功しました。
・ブレッドボードで試行錯誤していました
工夫した点としては、以下の点です。
・charlieplexのダイオードの向きを逆にする
MCP23S17はプルアップだかプルダウンができないらしい
・MCP23S17のinterruptはXiaoのGPIOにする
MCP23S17のGPIOだとうまく動かない
MCP23S17は16ピンのGPIOを使用できるので、これだけで200%キーボードが実現できますね!
トラックボール搭載
IOエキスパンダを採用したので、トラックボールはroBaの実装を参考にしながら乗せるだけです。
JLCPCBでPCBAしたトラックボール基板が40%も不良だったり、これはこれで苦労しました。。。
トラックボールはけぺおさんが公開してくださっていたデータがとてもかっこよく、使いやすかったので即採用させていただきました。
最近は25mmボールが流行っている気がしますが、操作性は34mmが優れているかなと思っているので、そちらをおすすめしています。
ケースについて
サンタさんがP1Sをくれたので、ケースは自家印刷することにしました。
60%サイズは一発で印刷できないので、斜めにして印刷してみるも微妙に収縮してしまい、ハマらなかったり、そもそもモジャったりしてうまくいかなかったので、分割式にすることにしました。
ただ縦に分割するだけだと、ちょっとかっこ悪いので、繋ぎ目には意匠を加えてみました。
惜しいところとしては電源スイッチと、マイコンのUSB端子を切り欠きにしているところです。ここは次回作では改善したいところ。
自分で使用しているプロトタイプはPLAで印刷していますが、打鍵感が柔らかく結構気に入っています。(構造は華奢ですが。。。)
ケースの試作はめちゃくちゃ苦労しました。
なぜGeacon?
平沢進氏のBeaconが好きすぎて、無線のイメージとあっていたので名前のベースはBeaconにしようと考えました。
GRIN配列+Beacon=G-eacon、かっこいいじゃん!となって、採用しました。
Copilotを何度も壁打ちして一緒に考えてみましたが、なかなかいい案が出てこず、ふとしたひらめきが決め手でした。
完成
日本語配列と英語配列に対応しています。
今後の展望
余ったGPIOを使用してOLEDをつけてみました。現在のプロファイルと接続状況、バッテリー残量、レイヤーなどを表示することができて、意外と便利です。が電池の消耗が激しい・・・
OLEDが実装できることが分かったので、OLED、トラボ、ジョイスティック搭載60%GRIN配列分割ZMK無線キーボードを作りたいなと考えています。
Discussion