ヒトは知識ゼロから自作キーボードを作れるか?
 Kotone/Nano
Kotone/Nano筆者のレベル
ソフトウェア
大学の研究でCを書いていた程度、研究所でC++を書いていた程度、民間企業でWeb開発をしている程度
ハードウェア
大学の授業でマイコンで遊んでいた程度
座学
理論
作り方
PCB設計
無線化
 Kotone/Nano
Kotone/Nanoソフトウェア
PCB(プリント基板)設計
 Kotone/Nano
Kotone/Nanoレイアウト
作る時の留意点
Keyboard Layout Editorではキーサイズ1×1で作ってai03さんのジェネレータでキーキャップのサイズを指定すると綺麗に出力できる
Themis V1

 Kotone/Nano
Kotone/NanoPCB
footprint検索に便利
 Kotone/Nano
Kotone/Nano配線と外枠まで

 Kotone/Nano
Kotone/Nano納品前のGerberチェック
 Kotone/Nano
Kotone/Nanoマウント用の穴とベタグランド

 Kotone/Nano
Kotone/Nanoキーが干渉しないかチェック、18×17で組んだのでChocFoxキーキャップがぴったり

はんだ付け後の状態、やってみてわかったのはSMDの方がはんだ付けが簡単で足を切らなくていいので楽
ただTHTだとPCB設計中にviaとしての役割も担えるので便利は便利(viaを綺麗に配置する方法を知らないだけと言われればそう)

キースイッチとキャップをはめた状態で試打
まず親指の一番内側のキーを1.5Uにしようと思ってたけど90°回転させないといけないのを見落としていた
縦コンボは押せるけど最適ではなさそうなのでちゃんと動いたらChicago StenoかKLP Lameを検討したい

なお何も考えずにPro Microを表裏逆にピンソケットに付けてしまった(本当に頭がバグってた)ので後日つけなおし
 Kotone/Nano
Kotone/NanoQMKを設定するときに便利だったピンの名称
 Kotone/Nano
Kotone/Nanoできた、2024-09-22に完成、10日あれば作れる
 Kotone/Nano
Kotone/Nano分割キーボードではTRRSケーブルを使って VCC/GND/SDA/SCLを繋ぐらしい
 Kotone/Nano
Kotone/Nanoシフトレジスタを用いた出力ピン増設
あるピンの入力がクロック信号ごとにHIGHかLOWか(シリアル信号)によってレジスタに書き込んでLATCHピンに入力を与えるとレジスタのビット値に対応する出力ピンがHIGH/LOWになったり(パラレル信号)、逆に複数の入力ピンのHIGHかLOWか(パラレル信号)をクロック信号ごとに出力する(シリアル信号)仕組み
前者をSIPO、後者をPISOという
マイコンボードのピン的にはそれぞれMOSI/MISO線を使う、MISO線はクロックごとに入力を走査する必要があり電力消費が大きいというデメリットがある
キーボードの用途では例えば75%で80キーとちょっと
例としてseeed XIAO BLEにアナログスティックを2つ繋ぎつつLiPoバッテリーを充電できるようにするとアナログ線5本が必要で残るピンの数は6本、3×3=9キーまでしか配置できない
しかしSIPOのシフトレジスタを使えばシリアル信号、クロック信号、レジスタロック(ラッチ)信号の三本のピンを8本に増やすことができる
さらにシフトレジスタのシリアル出力とマイコンのクロック・レジスタロックを他のシフトレジスタに繋いでやれば+8本、3本のピンを16本に増やすことができる
 Kotone/Nano
Kotone/Nanoここから知識ゼロでゲームパッドを作れるのか?編
 Kotone/Nano
Kotone/Nano6/9-dof センサからの姿勢推定
p.23 5.5 段落1 冒頭に propsoed の誤字あり
同じく5.5内に convergene teh experimetns などの誤字あり、おもろい
 Kotone/Nano
Kotone/Nanovendor id?の設定
 Kotone/Nano
Kotone/Nanoここまでの軌跡
- とりあえず適当にHID Reportをでっちあげてみる(敗北)
- インターネットにあるHID Reportを参考に書いてみる(GamePad Testerは認識するがFF14が認識しない
- Vendor IDとProduct IDを無理やり設定してみる(ここで丸一日溶かす、単純に検索するとSDPでやる方法しか出てこない、なんかよくわからないけどGATTでできるらしいと知る、仕様書を漁ったら見つかる、CircuitPythonのコードを読んで実装を追加、PRを出してマージされる、FF14が認識するようになるが入力には反応しないの)
- WindowsにBLEで繋ぐと明らかにリファレンスのGuliKit KK3 Maxと挙動が違うのでHID Reportの形式が微妙に違うと信じたいが、rreport ID 2-3を実装しないといけなくなるとCircuitPythonの根元に手を入れることになるので大変
- 一旦BLEの通信内容をWiresharkでSniffingしてみたいがなんか出てこない
 Kotone/Nano
Kotone/Nanoなんかうまくsniffingできなかったけど便利Webサイトは見つけた
既存のHIDで 0x01 レポートは良さそうなので 0x02-0x04 レポートが定義できないのが問題そう