メモ帳DPA

ぐぐってあまり引っかからないような何かがあったら書いたりする

自作キーボードの基板設計は意外とどうにかなる話

自作キーボードの基板設計にふと興味が出てきたのでやってみることにした。

結果

Row-Staggeredでロープロファイルでロータリーエンコーダ付きの左右分割ワイヤレスキーボードが作れた。

f:id:de0:20210606101331j:plain

売られているキーボードを作っている人は内容既に全部理解した上で作っているんだろうけど、基板設計絡みの記載はあまり見当たらず、大体は細部まで作り込まれた成果物が「ね、簡単でしょ?」みたいなノリでいきなりお出しされてくるので、今回はその辺の過程について、自分用の最小限割り切りまくり構成で作ってみた感想のメモをだらだら書きます。

条件

Helixキーボードを2年以上使った結果、格子配列には完全に慣れ、普通のズレ(Row-Staggered)は別に必須ではなくなったんだけど、せっかくなのでHelixを買った当時に欲しかった仕様で作ってみることにした。

  • 左右分割
  • Row-Staggered
  • 薄い
  • 親指に4キー以上
  • 数字キー有りかつ6が左
  • 電池駆動

そんなに厳しい条件じゃないつもりなのに、意外とこれを満たすキーボードは無かった。

  • 親指に4キー以上
    • 親指で出来る操作の選択肢が増えるのでキーは多いほうが良い
    • しかし実際にはやたら長いキーが置かれ役目はスペース一個だったりする(特に英語配列)
  • 6キーが左
    • 基本的に右に置かれがち
    • F/Jから見て近いのはFなんだけど、一般的なホームポジションでは何故か右手人差し指で押すことになっているせいな気がする
    • ちなみに、zxcvは小薬中人がホームポジションとされているようだった
      • 遠い上にCtrl+zとかShift+zとか押せないだろうし、薬中人人のほうが自然な気がする(でも一般的な運指ではないらしい)
  • 電池駆動
    • ワイヤレス自作キーボードの電源は省スペース性重視でボタン電池から取るケースが多いようだが、使い勝手は微妙
      • 入手性が悪く、充電も効かない
      • 交換時、それぞれ逆側から棒で押し出して突っ込み直すような工程が必要

作成のざっくりした流れ

kicadという単体のツールでどうにかなると思っていたら、kicad内外に様々なツールやファイル形式がある上に工程も多く、最初はかなり混乱することになった。
結局のところ以下をやればキーボード用基板が作れる。

  1. キーボードパーツ用のフットプリントとシンボルの入手
  2. 回路の設計
    • Eeschemaで.schファイルを編集する
    • Pro Microとスイッチとダイオードをマトリクス配線する
      • 使うキー分を決まったパターンで縦横に全部繋ぐだけの単純作業なので、設計といっても特に頭使うことなし
    • それ以外のパーツは別に必須じゃないので適当に省いてよい
    • ロータリーエンコーダ等その他各種パーツも用意されてるので、他に必要なパーツは追加して繋げば使える
  3. 物理配置の設計
    • Pcbnewで.kicad_pcbファイルを編集する
    • フットプリントを並べてキー等の物理的なレイアウトを決める
    • Pro Micro、スイッチ、ネジ穴を並べて基板のカット形状を決める
  4. 回路を物理配置上に反映する
    • FreeRouting(kicadとは別の外部ツール)で自動配線させる
      • Kicadからエクスポートした.dsnファイルを処理後インポートする
    • GNDの塗りつぶし以外全部やってくれるので流して待つだけ
  5. 製造用のファイルを生成する
    • Kicadからまとめて出力してくれる
    • 以下のファイルが出来る
      • 銅レイヤ(裏/表):name-B.Cu.gbr、name-F.Cu.gbr
      • はんだマスクレイヤ(裏/表):name-B.Mask.gbr、name-F.Mask.gbr
      • シルクスクリーンレイヤ(裏/表):name-B.SilkS.gbr、name-F.SilkS.gbr
      • カット線:name-Edge.Cuts.gbr
      • 穴位置(メッキ有/無):name-PTH.drl、name-NPTH.drl
  6. トッププレートを設計する
    • 要らないので省略
  7. ボトムプレートを設計する
    • 要らないので省略
  8. 業者に発注する
    • 生成された9ファイルを業者指定の名前にリネームする
    • elecrow.com にzipでアップロードして発注する(他の店もある)
      • アップロードと条件指定(色とか枚数とか)した後は、その辺の普通のネットショップと同じようにカートに入れて買うだけ
    • キーボード片側サイズ5枚がだいたい$25くらいで出来る(1枚500円くらい)
      • なお10cm*10cmを下回ると滅茶苦茶安くなり10枚が$5で出来る
    • 送料がそこそこかかるので大体合計4000円ちょっとで作れる
    • だいたい2週間くらいで届く

(以降は普通の自作キーボードと同じように組み立て)

やたらやることが多そうに見えるけど、実際考える必要があるのは物理配置くらいで、そこさえ決まっていれば他の工程でやるべきことはほぼ自動的に決まり単純作業で終わった。

作る際に読むべき

kicadのことを何も知らなかったので、最初は色々ネット上の情報をググりつつやっていたんだけど、これは結果的にかなり遠回りだった。
最終的に必要な内容は「自作キーボード設計入門」 に結局全部書いてあった。
booth.pm
知識なしでこれから基板作ろうとしてる人は、おとなしく最初にこれだけ読むのが一番早くて間違いないと思う。

他のレイアウト案

Keyboard Layout Editorで色々考えたあと、キーキャップの画像と電池基板の写真を雑コラして見た目を確認したときの画像を貼ります

四角くするパターン


Kailhの刻印キーキャップには1.5Uのキーキャップが8つ含まれているので、使おうと思えば左右各4つまでは使える。
別に1.5Uにしなくても空振らないし、キーキャップの選択肢も減るのでやめた。(Chocだと選択肢自体あんまり無いけど)

端に電池&BMP付けるパターン


別にTRRSケーブルを繋ぐわけでもないし、USBケーブルを接続することも滅多にないので、特に端にある必要が無いことに気づいた。
電池が一番邪魔にならないのは真ん中だった。

要らないキー削るバターン


キー削っても大してコンパクトにならないのでやめた。
電池パーツは見た目も厚みもキー側と全然違うので、変にキーボード側に詰め込むより単体で独立させたほうがデザイン的にマシな気がする。

実際作ってみて分かったことや感想など

物理レイアウト設計以外考える必要ほぼ無し

必要な作業が多くて一見かなり大変そうだけど、実際はやることは決まっていて、3番の物理配置の設計以外はほとんど頭を使わずに出来てしまう内容だった。

各工程とも詳細は「自作キーボード設計入門」に書いてある内容をそのままなぞればほぼ済んでしまう。特殊仕様を入れたり細かいところまで拘ったりするのでなければ、各工程での試行錯誤や調整の余地はあんまりない。

高度な知識が特に要求されずに基盤完成まで辿り着ける環境が整っているので、自作キーボードを一台作って概要を理解した人だったら基板設計はそこまで破茶滅茶にハードルの高い行為ではなかった。

電流計算等は不要

物理配置にしても、キーボード用のフットプリントやシンボルが何もかも揃っているので、それらを好きに並べるだけで完成した。
オームやらキルヒホッフやらの法則とかを使いつつ各部品毎に流れる電流を計算しながら抵抗入れて調整したりするのかな、という漠然とした設計イメージでいたのだけど、一切そんな必要は無かった。

実際はすでに用意されているパーツを単に並べていくだけで良く、配線も回路設計の通りに自動でいい感じにやってくれる。

トッププレート無くてもどうにかなる

本当は基板に合わせたトッププレートの設計とボトムプレートの設計をし、アクリルやPCBのカットで作成するのがよくある流れのようだ.。(あとは、最初から既存ケースに合わせて設計するか、3Dプリンタでケース作るか等)
ただ、気にしなければプレートは別に無くても大丈夫だった。この工程をすっ飛ばせると設計の手間がかなり減らせる。

キーの固定強化やデザイン性での意味があるようだけど、そもそもキーは半田でくっついているし、見た目を気にしないなら別に無くても大して変わらない。ロープロファイルだと見た目の影響も少ない。
仮にキーが取れてももう一回半田付けすれば良いと思う。(取れたことないけど)

ボトムプレートも無くてもどうにかなる

裏面の保護、剛性を上げる、重さを盛る、見た目要素、といった辺りの意味が主にあるようだけど、持ち運びしないのであれば剥き出しで特に支障ないと思う。(打ち心地や打鍵音のこだわりが大して無いせいもあるけど)

さすがにそのままだと凸凹でガタつくので、ゴム足を適当に直張りすれば使える。

プレートの省略で厚みが減らせるため、メカニカルスイッチを使うキーボードでの限界に近い薄さ(机からキートップまで14mmくらい)になるメリットも一応ある。
なお、もっと薄い基板で発注する、キーの端子をカットする、更に薄いゴム足を使う、等でもう何mmか削れはするはずなので、完全な限界ではない。

目的は限りなく薄くすることではなく、パームレストを不要にすることなので、これくらいで十分過ぎるくらいだと思う。多少薄さを捨ててChoc V2にしてキーキャップの選択肢を取るのもありかもしれない。
(そもそも本当の限界を追求するなら、ChocでなくPG1425スイッチを使うのがよさそう)

f:id:de0:20210606101645j:plain
Helixとの比較

余り基板をボトムプレートに使うのもあり

基板発注時には最低数量があり、elecrowの場合少なくとも5枚は届いてしまう。同じ基板が5枚も要らないので絶対余る。(おまけで更にもっと多く届いたりする場合もある)
全く同じ形状をしているので、間にナットを入れて余った基板をネジ止めするだけでボトムプレートの代わりになる。

これすらも別に要らないなと思い最終的に基板に直にゴム足にしたけど、手抜きの選択肢の一つにはなるかと思う。

基盤形状凝る必要なし

基盤にパーツが被らない場所に余白を設けている既存の自作キーボードが結構あるので、何かしら設計上の意味があるのかと思っていたんだけど、別にそんなことは特に無さそうだった。(ケース絡みくらい?)
いろいろ基盤デザイン案を考えてはみたものの、変に空間を余らせたりロゴ入れ文字入れをしても、デザインセンスが無いとどんどん野暮ったくなる一方だった。
何も考えず、余り一切なしで単純にパーツの外周に沿ってそのまま切り取るのが、結局簡単かつ見た目的にも一番マシだった。

幅広キーいらない

1U以上の幅の長いキーは、色々な人が使う前提で個人の打鍵位置のブレを吸収する意味はありそうだけど、利用者が一人なら基本的に各キーは同一位置しか押されないので、押す位置に最初から1Uのキー配置すれば済んでしまう。
配置時のキー間隔の計算やスタビライザーの配置が省略できるので、全部1Uだけで良い気がする。

BLE Micro Pro前提だと楽

リセットボタンは使わないし、一切有線接続しないのであればTRSSジャックも要らなくなる。電池部分は販売されている別パーツをそのまま乗せれば動くため、BMP本体とキースイッチの接続だけ考慮すればキーボードとして動作する。
ソフトウェア側としても、作ったキーボードに対応させるのにファームウェアから作る必要はなく、設定ファイル(config.json)を単純に書き換えるだけで終わる。
予めBLE Micro Proの仕様の理解は必要にはなるけど、全体的にいろいろと省力化できた。

なお、電池周りを既存パーツを使わずに基板上に実装すればレイアウトの自由度が大幅に増えるので、一回作った後はその辺りも試したい欲求は出てくる。

ズレと分割

これまであまり意識したことなかったが、普通のキーボードの行のズレは均等ではなく、1234~の行から順に、QWER~の行は0.5Uのズレ、ASDF~の列は0.25Uのズレ、ZXCV~の行は0.5Uのズレとなっている。

よくある分割キーボードは、同一基板を裏表使って左右対称にしている場合が多いようだけど、0.25Uのズレが存在するせいで、左右対称のリバーシブル基板にすることが出来なかった。(裏返した側は0.75Uのズレになってしまう)
普通のズレのある配列かつ分割の自作キーボードが少ないのは、このせいで左右別基板が必要になって作るのが面倒だからなのかなあと思った。

EnterやBSを普通の配置で右手小指に入れようとすると、左手側のレイアウトとどんどん不一致になってくるって理由もありそう。自分は普段から通常のキー配列のノートPC等でも別の位置にAutohotkeyで割り当てているので、その辺りは大して重要ではなかった。

キー配置

いきなり左右別配置で基板2枚作るのは失敗しそうだし費用も工数も倍になって無駄が多いので、同一のレイアウトで左右両方使える基板をとりあえず作った。

1種類の基板かつ裏返さず済む配置にするために、片側だけに必要な位置のキーも両手分入れないとならない。さほど必要でないキーが左右それぞれに入ってしまうが、まあ少ないよりは良いやととりあえず良しとした。
マウス/トラックボールとの距離に影響がある横方向の幅の無駄さえ少なければ、奥行きの省スペース性は配置上大して重要じゃない気がする。縦方向に空きを作ってもあんまり省スペースにはならないので、今回はキー数をケチらずにとりあえず埋められるだけ埋めた。

ちなみに、左右合体機能は必要とするタイミングが一切無かったしこれからも無さそうので考慮しないことにした。

ロータリーエンコーダ

いわゆるつまみ。ボリュームコントロールとの相性が最高だったので付けておくことにした。

ロープロファイルのロータリーエンコーダだと、つままずに真上から指一本でスライドする操作になるので、同じ手で他のキーを押してレイヤ移動しながらでも無理なく回すことができる。
ロータリーエンコーダ付きの他のキーボードでは、上下左右四隅のどこかに置いている場合が多いようだけど、レイヤ移動を親指で行う場合に遠すぎるので、内側中央付近に置いたほうが個人的には便利に感じた。

設計の際、スイッチのフットプリントとロータリーエンコーダのフットプリントを単純に重ねて配置すれば普通のキーと両対応にできた。

名前

売り物でない個人用のキーボードとかも含め、みんな何でキーボードに名前付けるのだろうかと前から謎だった。(フェニックス1号かよと思っていた)
実際のところ、kicadのプロジェクト名だったり認識させるデバイス名として何か指定しないとならないからなのかもしれない。
このキーボードの名前は、形状の一致+キー数 より、DENIM76 にした。

もう一個作りたくなってくる

1回試しにやるだけで終わるつもりで手を出したのに、いざ1個完成させてみると改善したいところが山ほど出てくる。
ここに穴空けとけばよかった、格子配列で作りたい、親指キー傾けたい、電池を基板に直載せしたい、etc、etc

普通のズレのキーボードとしては満足の行く出来で完成はしたし利用上の問題も全く無いんだけれど、せっかくRow-Staggeredで作ったのにやっぱり格子配列が恋しくなって来ていて、もう一台作りたい欲が出てきてしまっている。
タイピング速度や精度は配列が違っても大して変わらかった(どちらもe-typingで350~400 / monkeytypeで65~75くらい)けど、押しやすさは格子配列のほうが完全に上だった。
(ちなみにColumn-Staggeredは近場のキーの連続入力時の縦方向の位置関係が滅茶苦茶になるのが合わなかった。waとかseとかmiとかkoのような配置)

作り方を一旦理解したら2個目以降は簡単にまた再設計して発注できてしまうので、どこかで妥協しないとキーボードが増え続けそうな気配を感じる。

...結局作った

…といったここまでの内容を書きかけて、下書きのまま公開せず長い間寝かせていたうちに、案の定結局もう一台作ってしまった。

f:id:de0:20211101144525j:plain
なまえ:Chimera78
(形状バラバラの7x4と狭3x2と親指と電池の結合で出来ているので)

仕様

今回は色々手を加えたHelixを使っているうちに欲しくなった仕様を加えたキーボードを作った。

  • 親指キーの傾け
  • 親指キーの追加
  • 普通の位置関係の単体の矢印キー
  • マクロパッド
  • ロータリーエンコーダと昇圧モジュールの両立
  • 昇圧モジュールのネジ止め

普段のキャレット移動等には矢印はIJKLのレイヤ割り当てを使っているんだけど、電子書籍のページ送り、動画操作、特定のゲーム用途あたりには単品で使える普通の矢印があると嬉しいので、ちゃんと付けることにした。

キーピッチの混在

今回は19x18キーピッチの格子配列を基本にして、端の6キーだけ16x16キーピッチにしてみた。

キーピッチを混ぜる他の作例は見かけたことが無かったんだけど、存在しては欲しいが通常のタイピング中には一切使わない系のキーを詰め込むのには結構有りな選択肢な気がする。
文字入力と用途が独立している、ランチャ、マクロパッド、メディアキー、ペアリング、機器制御(エアコン/昇降デスク/介護ベッド変形)のような機能をコンパクトに突っ込むのに良さそう。

狭ピッチキーキャップ

キーピッチ混在方式が一見良さげなのに全く流行っていないのは、キーキャップが共通じゃない上に入手性が悪いからかもしれない。

16mmピッチかつロープロファイルのキーキャップはメーカの市販品だと存在しないので、今回はmcsp lp用のキーキャップを塗装して使った。
ただ、黒を白に染めるのはかなりの回数の重ね塗りが必要だったのと、既存キーキャップの白とは若干色味が違ったりしたので、黒ベースで作ったほうがどう考えても楽だった。

狭ピッチキーキャップについては以下が詳しい。
e3w2q.github.io

採用しなかった他のレイアウト案詰め合わせ
  • 青:角削ってカーソルとおまけを置く例
  • 黃:6U幅に7キー突っ込める
    • 最上列にマクロパッドやFキー入れたい場合に有りかも
    • 幅と違い縦方向はいくら盛っても影響少ないので多段にしても良さそう
  • 赤:もっとキーが欲しい場合は有りかも
    • 設計当時こんなに要らんと思ってやめたが、これでも良かった気もしてきた
  • 緑:親指を傾けずに詰める場合の配置
    • こっちのほうが密度を上げられるが、キーの角が気になるのでやめた
    • 単純に狭ピッチで配置するのが良いかも

他の仕様案

キーピッチは横方向が変わると違和感が大きかったけど、縦の場合は特に窮屈さは感じられなかった。(単に19mm→18mmで1mmしか削ってないせいかもしれないが)
狭いほうが移動量が減るのは確実なので、窮屈でないようだったら縦方向だけをもっと狭めてみるって方向も有りなのかもしれない。
左手側にも独立した矢印があっても結構便利と分かったので、カーソルに回す分キー数をもう少し増やしたくなってきたし、親指も狭ピッチにするのも良さそうに思えてきた。

これでもうこれ以上キーボード作らなくて済むようになるつもりで設計したはずだったんだけど、キーキャップの寸法に合わせて軽い気持ちでたった1mm調整しただけで、こうして連鎖的に新たな沼が次々と襲いかかってくる。

おわり

"基板設計"の字面からは、難解で謎の専門技術をいろいろ要するような印象を受けるけど、実際は単にスイッチとダイオードが全部Pro Microと繋がってさえいればキーボードとして成立する。
作りたい配置が決まっていたら設計の大半は実質ほぼ終わっているようなもので、基板は意外と単純に作れてしまった。

既存のキーボードには無い変な配置のキーボードが欲しくなってしまった人は、あんまりビビらずに基板設計に手を出してみても良いんじゃないかと思います。


adventar.org
この記事はDENIM76とChimera78で書きました。

PCBデータ (とBMP用設定とRemap用json)

www.dropbox.com
この中身をelecrowに発注すると同じものが作れる。ただ、穴がズレてたりGND塗りつぶせてなかったりといろいろ完璧には程遠いし、ビルドガイドも無い。
他の材料:スイッチ、ダイオード、電池基盤、BLE Micro Pro、ゴム足