Solkatsticeについて
一見、ただの40%キーボード。
でも、その中にはこれまで学んだ技術と挑戦のすべてが詰まっています。
あなたなら、どんな機能を詰め込みたいと思いますか?
作ろうと思ったきっかけ
最初はZMKでアナログスティックが使えることを知り、現在設計中のGeaconSolsticeに載せたら面白そうだなー程度に思いついて、その検証基板を作ってみようと考えていました。
検証基板の構成を考えていく中で、マクロパッドでも良かったはずなのに、「せっかく作るなら、これまでの自作で学んだ知識と、ZMKで実現できそうな、やったことがない実装を集約した集大成を作ったら面白いのではないか?」「どうせ作るなら今まで触ったことがないレイアウトに挑戦してみたい・・・40%のQazikatをベースにしてしまおう!」と、どんどんアイディアが湧き始めたのがSolkatsticeの始まりでした。
■PCBのイメージ
■詰め込んだ回路図
あと1ピン余っています。
特徴について
ZMKによる無線接続対応
Geaconと同じ。
ファームウェアに使用するモジュールはとても多くなりました。manifest:
remotes:
- name: zmkfirmware
url-base: https://github.com/zmkfirmware
- name: caksoylar
url-base: https://github.com/caksoylar
- name: badjeff
url-base: https://github.com/badjeff
- name: urob
url-base: https://github.com/urob
- name: te9no
url-base: https://github.com/te9no
projects:
- name: zmk
remote: zmkfirmware
revision: main
import: app/west.yml
- name: zmk-rgbled-widget
remote: caksoylar
revision: main
- name: zmk-pmw3610-driver
remote: badjeff
revision: main
- name: zmk-analog-input-driver
remote: badjeff
revision: main
- name: zmk-leader-key
remote: urob
revision: v0.2.1
- name: zmk-dongle-display
remote: te9no
revision: test
self:
path: config
40%Qazikat風配列
キーマトリクス数に限りがあったので、ちっちゃくてかわいいQAZikat配列を一部改造して、OLED・アナロ
グスティック・トラックボールを載せてみました。
キーマトリクスはGeaconと同様、Low-powered improbed charlieplex matrixをMCP23S17(IOエキスパンダ)に載せて、他デバイスのピンを用意できるようにしています。
トラックボール
スペースの都合上、34mmボールは厳しかったので25mmボールを採用しました。
トラックボールケースはGeaconと同様、けぺおさんが公開してくださっていたデータが使いやすかったので採用させていただきました。
アナログスティック
チャレンジその1にして、このキーボードの最初の目標です。
某スイッチのアナログスティックが安価で入手性が良いので、採用しました。
表裏があるFFCケーブルで接続する必要があるため、パーツの選定、実装位置に気を使いました。
実際のパーツを採寸してモデルとフットプリントを作り、PCBを作成しました。
FFCコネクタもPCBAで実装してしまいたかったので、部品実装面の裏面に実装し、表面のアナログスティックとPCBの切り欠きを通して接続できるようにしています。
OLED
チャレンジその2。
Geaconのプロトタイプに無理やりつけて、動くことは確認できているので、載せるだけです。
レイヤー、バッテリー残量が視覚的にわかるのはとても便利ですし、入力に応じてネコがテーブルをバンバンして応援してくれます。
タッチセンサー
チャレンジその3。
GRIN RCの存在を知って、衝撃を受けて、実装してみたいと思っていろいろ調べました。
GRIN RCで採用されているICはJLCPCBでは売り切れだったので、同様な機能を持つICを四苦八苦しながら見つけ出しました。
I2Cで通信するICが大半で、自分でドライバを書くのはちょっと難しかったので、簡単な仕組みのXW06Aにしました。
仕組みは簡単で、タッチセンサーのパッドを触ると、そのパッドに対応したピンがONになるので、IOエキスパンダに入力する様にしています。
果たして動くのか・・・?
回路図はこんな感じ。
→動きました👏
タッチセンサーは上から下、下から上になぞることで特定のキー入力ができるスライダー機能を備えています。
使い道は募集中です。
実装について
zmk-leader-keyでスライダー機能を実現しています。
/ {
macros {
mF13: mF13 {
compatible = "zmk,behavior-macro";
#binding-cells = <0>;
bindings = <¯o_tap &kp F13>
, <&leader1>;
};
mF14: mF14 {
compatible = "zmk,behavior-macro";
#binding-cells = <0>;
bindings = <¯o_tap &kp F14>;
};
mF15: mF15 {
compatible = "zmk,behavior-macro";
#binding-cells = <0>;
bindings = <¯o_tap &kp F15>
, <&leader2>;
};
};
behaviors {
leader1: leader1 {
compatible = "zmk,behavior-leader-key";
#binding-cells = <0>;
leftdown { sequence = <F14 F15>; bindings = <&kp PG_DN>; };
};
leader2: leader2 {
compatible = "zmk,behavior-leader-key";
#binding-cells = <0>;
leftup { sequence = <F14 F13>; bindings = <&kp PG_UP>; };
};
};
F13〜F18といった普段使わないキーをそれぞれのタッチパッドに割り当てています。
1番目のパッドを触るとF13の入力をした後にリーダーキーが起動し、F14、F15の順で入力されるとPG_DNが入力されます。
■IC周りのイメージ、かなりいかつい感じになりました。
ケースについて
例によって自家印刷することにしました。
タッチセンサーを露出させる必要があるので、構造は悩みました。。。
タッチセンサーを露出させる構造について悩んでいます。
ケースデザインを工夫するアイディアがあれば、ぜひ教えてください
名前について
単語のかっこよさと、自分の持っている技術を詰め込んだ設計の最高到達点を至点として、さらにQazikatの名前を組み合わせた名前にしました。
読み方は多分ソルキャッツティス?
Solsticeは至点という単語です。
至点とは1年に2回、天球上において太陽の赤道面からの距離が最大となる瞬間、またはその時の太陽の位置を指す語である。
至点を意味する英語の solstice はラテン語の solstitium という語に由来する。
キーマップ
こんな感じにすれば40%に慣れていない私でもいけるかなと想像しています。
完成
テストで出力したケースで組んでみました。
今後の展望
SolkatsticeというPoCを経て、OLED、トラボ、ジョイスティック搭載60%GRIN配列分割ZMK無線キーボードを作りたいなと考えています。
同じことを前も言ってたなぁ…
Discussion