0と1の反復横跳び

日記や趣味のメモ。コンピュータ、旅、音楽に本。もちろんアニメと漫画も。そして車。

自作キーボードを作ってみた

以前より分割式キーボードに興味があり、せっかくなら自作してみようと思い基板からスクラッチで起こしてみることにした。 今はOSSの回路エディタも充実しており、またファームウェアOSSで質の良いものが揃っている。

今回は私の大好きなHHKBの配列をベースとし、Type-Cでコンピュータと接続できるような設計とした。 (世の中にはそれなりにHHKB配列の分割式キーボードが出回っているのだが、(こういった分野の)車輪の再発明は自分自身にとって健全な行為であると考えたため、自作することにした。)

概要

設計したキーボードの仕様および設計メモ。

キーボードの仕様

  • 名称: HH_splitter
  • 配列: US配列61キー左右分割(某HHKB風配列)
  • キースイッチ: mx互換(ホットスワップ対応)
  • インターフェース: USB Type-C(左右1か所ずつ)、TRRS(TRS)ケーブル(左右接続用)
    HH_splitter

部品一覧

  • 基板: 2枚(左右1枚ずつ)
  • カバー: スイッチプレート、ボトムプレート、カバープレートの計6枚(左右1枚ずつ。今回はPCB基板を各プレートに採用したが、正直アクリル板で良いと思う)
  • キーキャップ: 任意(1u=51個,1.5u=4個, 1.75u=2個, 2.25u=2個, 3u=2個)(HHKB Studio純正品+市販の3uキーキャップ) DSA PBT ブランク キーキャップ (1個/Space 3U/ブラック/グレー/ホワ...
  • キースイッチ: mx互換品×61個(今回はGateron G Pro 3.0 Redを使用)
  • ダイオード: 1n4148 or 1n4148w × 61個
  • kailh PCBソケット: 61個(ホットスワップに対応するための部品。ホットスワップしない場合は不要)
  • 3.5mm4極ミニジャック: MJ-4PP-9×2個
  • TRRSケーブル: 1本
  • Type-Cケーブル: 1本(データ通信可能なもの)
  • タクトスイッチ: 2個(2本足のタイプ)
  • Pro Micro: 2個(今回はATmega32U4 Type-Cタイプを使用。Arduino R4互換品(Renesas製RA4M1使用版)は未検証だが、使用可能と推測される)
  • MAC8コンスルー(12ピン2mm): 2セット4本(Pro Microと基板の接続に使用。本来は取り外しを可能にするためのアイテムなのだが、基板設計不良により半田付けをすることで対処(本来は半田付けを想定した製品ではないので、取り付けは自己責任で。また2.5mm品を使用すれば、クリアランスが確保されるので半田付けが不要と思われる)
  • ゴム脚: 片側4個(任意の高さのもので可。傾斜をつけるために高さ別で2種類を推薦。例: 手前4mm, 奥10mm)
  • M2*8mmネジ: 16個
  • M2*5mmネジ; 16個
  • M2丸形中空スペーサ(2~4mm): 16個
  • M2 6角スペーサ(8mm以上): 16個(ASB-2000Eを使用)

キー配列デザイン検討

キー配列
まず、キー配列デザインの検討には下記サイト(keyboard-layout-editor, 通称KLE)を使用した。自作キーボード界隈では有名なサイトのようで、キートップのデザインやキー設定の出力にも使用する。 keyboard-layout-editor.com 今回のキーボードだが、基本的には某HHKBの配列を踏襲している。変更箇所としては分割にする都合上、スペースキーを左右に配置している。

強いて言えば、3uのキーキャップ(とスタビライザ)は入手性に難があるため、1.5u*2としてもよいだろう。(色々調査をしたところ、7sProMaxというキーボードはスペースキーを複数個搭載して回避している模様。)

基板設計

基板設計にはKiCadを使用した。オープンソースソフトウェアで、回路図エディタ、PCBエディタなどが備わっている。またPCBの3D表示なども可能で、基板製造依頼前にイメージをつかむことが可能。 www.kicad.org

回路設計

下記に左右の回路図を示す。 ポイントとしてはマイコンボードのI/Oポートの関係上、キーマトリクスを使用してポート数を節約する。 また左右基板の判別のために、空きポートをVCC(左側)、GND(右側)に接続する。

左側回路図
右側回路図

PCB&プレートデザイン

設計した回路を基に、PCB設計を行う。まずはキースイッチの配列を決めてしまう。次にコントローラやリセットスイッチ、3.5mmジャックの位置を決める。 最後に各部品が収まるように基板外形をデザインする。 この時、基板接合用のネジ穴などが、半田付けするランドやパッドに干渉しないようにする。打鍵感の担保のために、ある程度剛性を出す必要があるので、上下左右、中央部など適宜に穴をあけておくとよい。

PCBデザインの例

またPCBの配線には、簡略化のために自動配線ツール"freerouting"を使用した。KiCadで設計したデータを食わせることで、各種配線を自動で処理してくれる。 自動配線後にエディタ内で配線の微調整を行うだけで済むので、積極的に活用すると良いだろう。 github.com

PCBが設計出来たら3D Viewを使用し、完成後イメージを掴むとよい。この時点で部品が揃っていれば、軽く当ててみて干渉などを見ることをオススメする。

3D viewの例

スイッチやカバープレートは設計したPCBの外形をそのまま流用し、微調整を加える。

プレート設計の例

ファームウェア設計

今回はQMK firmwareを使用した。これは自作キーボード界隈では定番のファームウェアのようで、各種有名キーボードのデータが散見される。

HH_splitterのファームウェアは下記githubより入手可能。 github.com

この時、keyboard.json内に"layout"を記述する必要があるのだが、下記のように、KLEを使用する。回路図で設定したcol, rowの数字を各キーに割り当てて、"Raw data"の内容を下記ウェブサイトにコピペして生成する。

layoutの設定
qmk.fm

この時、

"label":"0,0"

のような記述を

"matrix":[0,0]

に置き換えること。

実際の設計時のメモとしては、キー入力の整合を取るために左右間のlayoutを1行分空けている。 (キーマトリクスの設計がイマイチだったようで、出力データのlayoutアサインを使うと、右側が意図しないキーコード出力となったため)

基板発注

基板(およびプレート)の発注はJLCPCBを使用した。 jlcpcb.com

基本的には2層基板を発注することになると思うので、特にデフォルトの発注設定からは変えず、kicadで生成されたガーバーデータをそのまま食わせればよい。 基板色を変更したい場合は下図の項目から任意の色を選択する。

JLCPCBでの基板色変更

発送方法は複数選択可能であるが、DHLは高いが、早く届くのでオススメ。

土日に発注->木曜に出荷->翌土日着といったスケジュール感。

組み立て

半田付け

基本的にはこまごまとした部品をひたすら半田する。

完全に個々人の技量次第だが、ポイントとしてはヤニ入りはんだを使用し、さらにフラックスを適宜塗布することで比較的うまく半田が乗ると思われる。

またC型半田ごてがあると表面実装部品でも比較的容易に半田付けできる。

部品をつける際は高さの低い部品から接着していく。 (ダイオード->PCBソケット->ピンヘッダ)_

www.youtube.com (半田付けの解説動画:イチケン氏。分かりやすいのでオススメ)

またホットスワップ対応する場合、kailhのPCBソケットを使用することになると思うが、 この場合

  1. 基板の左右どちらかのパッドに予備半田を行う
  2. ピンセットで上からPCBソケットを押さえながら、予備半田を溶かし、仮止め
  3. 反対側のパッドを完全に半田付け
  4. 予備半田した側のパッドに追加の半田を供給 という流れで綺麗に部品を接合できる。
    kailh PCBソケットの半田付け例

<追記: 24/12/15> 新しい環境でコンパイル&書き込みを行う際、やり方がわからなくなったのでメモ。 docs.qmk.fm 上記公式HPを参考にする。 自分でcloneしたHH_splitterのファームウェアをgitからpullしたのち、 "3.Run QMK Setup"を参考に、qmk_firmwareディレクトリ内で

qmk setup

を実行する。 コンソールの指示にしたがい'y'を選択し、

qmk compile -kb hh_splitter -km default

コンパイル

qmk flash -kb hh_splitter -km default

でフラッシュ。

<ここまで>

仕上げ

基板が完成したら、仕上げを行う。 (ホットスワップで組み立てる場合)スイッチプレートと基板を接合する際は、プレート側に数個(上下左右、中央で5~6個ほど)キースイッチをはめ込んでおく。 そのうえでPCBソケットにスイッチをはめ込み、残りをはめ込むことで楽に組み立てが行える。

<追記: 24/12/15> ネジに関して。 表面(キートップ側)は、M25mmを使用。 また裏側はM28mmを使用して固定すること。

<ここまで> ファームウェアをコントローラに書き込む際はlinuxを使用すると良い。 (Ubuntu22.04で確認済。WSL2は未確認。Windowsで実行する場合は docs.qmk.fm

Windowsを使用する場合はQMK MSYSを使用する。 msys.qmk.fm

hh_splitterの場合は、コンピュータにコントローラを接続した状態で下記コマンドを実行することで、書き込み可能。

$ qmk flash -kb hh_splitter -km default

途中でリセットスイッチを押下するように指示が出るので、何回か押してみて書き込みが完了することを確認。

以上手順で一通り設計~組み立てが行える。

作成したキーボードに対する所感

完成品

まず剛性が高いと感じた。フレームがしっかりしていることと、赤軸スイッチのスムーズな感触が相まって、打ち心地は良好。

次に、キーボードに傾斜をつけた方がよいと感じた。 60%キーボードなのだが、フラットになっている関係上、奥側(数字)キーが押しにくく、腱鞘炎になりそうな感触を抱いた。 これはカバープレートを短くし、奥が高くなる様にした方がよい。

キーボードの高さ

基板の改善点としては、 基板上コントローラ端子(Type-C)の逃がしの設計が不十分で、干渉しないように外形を削ったほうが良い。

Type-C干渉箇所

またリセットスイッチの位置も微妙で、こちらについても改善したい。

参考文献&URL

  • 『自作キーボード設計ガイド Vol1 設計入門編』Salicylic_acid3氏著 (各種ツールの使用法、設計時のポイントが書かれており、大変有用な書籍。スクラッチで設計する場合には是非一読することを推薦。) booth.pm

  • KiCad回路図シンボル及びPCBフットプリントデータ Salicylic_acid3氏 (本キーボード設計時に使用したKiCad回路図シンボル、PCBフットプリントデータ。上記書物にもリンクあり。) https://github.com/Salicylic-acid3/PCB_Data

  • 特集 - 自作キーボードの作り方(QMK Firmware編) 株式会社ケレスソフト websiteLinux上でのQMK Firmware設定方法、書き込み方法などが書かれている。) https://www.ceressoft.co.jp/special_keyboard_qmk.html

  • QMK Firmware公式サイト (各種Firmwareの書き方、設定方法が書かれている。キーコード、split、レイヤー設定については必ず読むこと。) https://docs.qmk.fm/