ほぼゼロから始める自作キーボード設計体験記

この記事はキーボード #2 Advent Calendar 2023の23日目の記事です。10日くらい前に見たら空きがあったので、思い切って参加させてもらいました。

0: はじめに

あらためまして、こちらの記事は電気回路やプログラムの専門知識ほぼゼロのド素人がAtalanteというオリジナル自作キーボードを設計して完成させるまでの記録です。

2022年の年末に『自作キーボード設計ガイド Vol1 設計入門編』という同人誌が発表されて、キーボードを開発するための体系的な知識を手に入れやすくなりました。

とはいえ、まったくの初心者にとって、ゼロからキーボードを作るという行為はまだまだハードルが高いのではないかと思います。

そこで実際のキーボードの開発過程を公開することで、これから自作キーボード活動を始める誰かの参考になればいいなと思って書きました。

基本的には前述の『自作キーボード設計ガイド Vol1 設計入門編』と、Web上で無料公開されている『GL516デザインガイド』に沿って進めていきます。

上級自作キーボード民の皆様にとっては今さらな情報ばかりでしょうが、温かく見守っていただけると幸いです。

1: どういうキーボードが欲しいのか

新しくキーボードを設計するに当たっては、まずどういうキーボードが欲しいのか、だいたいの方向性を決めるところからスタートすると良いそうです。

既存の製品に不満がある、試してみたい部品や技術がある、などなど、キーボードを自作する動機は人それぞれですが、市販されている製品を見てもコンセプトの明瞭なキーボードはやはりどれも魅力的だと感じます。

私の場合は、カラムスタッガード配列の一体型で矢印キーがついてるキーボードが欲しい(薄型でコンパクトだとなお良い)、という切実な欲求があったので、期せずしてわりとがっつりコンセプトが固まってました。そういう製品が意外にありそうでなかったんですよね。

この段階でイメージが明確であればあるほど製品の完成度が上がると思います。心ゆくまで妄想を膨らませましょう。

2: レイアウトを検討する

おおまかな方針が決まったところで、具体的なキー配置を考えることにしました。

レイアウトデータを作成する

こういうのは画像を見ながら試してみたほうがわかりやすいと思うので、Keyboard Layout Editor(http://www.keyboard-layout-editor.com/)を使ってレイアウトデータを作成します。

Keyboard Layout Editor(KLE)の使い方については、GL516デザインガイドの解説(🤔キーレイアウトを検討する|GL516 デザインガイド)がわかりやすいです。

KLEではキーを傾ける操作にクセがあり、Atalanteのようなほぼすべてのキーが傾いているキーボードを再現するのは正直かなり面倒です。さいわいPresetに入っているサンプルデータに同じ一体型カラムスタッガードのAtreusがあったので、それを参考にちまちまキーの数を増やしてどうにかイメージどおりのレイアウトを再現できました。*1

なんとなくカッコいい気がしますが、(一般的な)キーボードには見えませんね…

作成したKLEのデータはあとで使います。Githubと連携してセーブしておくか、Githubを使えない方はJSONファイルをダウンロードして保存しておきます。

キーキャップを並べてみる

作りたいキーレイアウトが決まったら、紙の上などにキーキャップを並べて実際に手を置いてみると良いとのこと。特にスペースキーの位置などは、ほんの少し位置がズレるだけでキーボードの使い心地に大きな影響が出るので、億劫がらずに確認しておかないとあとで面倒なことになります(なった)。*2

3: 部品を選定する

続いてキーボードを構成する部品を決定します。使用する部品によって、キーボードの機能や形状が(要求される技術や予算も)変わってくるので部品の選定は重要です。『自作キーボード設計ガイド』ではVII章の3に当たる部分です。

マイコン

自作キーボードに搭載するマイコンですが、キーボードの基板にMCUを直載せするのは(初心者には)配線やはんだづけが困難なため、別途モジュール化されたマイコンボードを使うのが安全です。自作キーボードで多く使われているのはPro Microですが、最近はRP2040系の開発ボード(xiao rp2040やRP2040-Zeroなど)も人気のようです。

Atalanteは無線接続対応を前提としていたので、Bluetoothが使えるBLE Micro Proを採用しました。

キースイッチ

キーボードの形状や使い心地に大きな影響を与えるキースイッチ。使用するスイッチによって基板のフットプリントの形状やプレートの厚みが変わってくるので、この選択は重要です。Cherry MX互換スイッチやChoc v1スイッチなどが入手性も良くて一般的ですが、最近はそれ以外のロープロファイルスイッチも人気みたいですね。

またスイッチの抜き差しを可能にするPCBソケットを使うかどうかも悩ましいところです。ソケットを使わないほうが安く作れたり、キーボード全体の高さを低くできるというメリットがあるのですが、組み立て後のスイッチ交換が困難になってしまいます。

Atalanteは薄型コンパクトというコンセプトのキーボードだったので、薄型キースイッチであるChoc v1(+PCBソケット)を採用することにしました。

ケース

最近は自作キーボードでも3Dプリントやアルミ切削の専用ケースを使っている製品が少なくありませんが、Atalanteは軽量薄型というコンセプトのキーボードなので、シンプルなプレートサンドイッチ構造のケースを選びました。

キーボードの基板を表面のカバーを兼ねたスイッチプレートと底面のカバーを兼ねたボトムプレートで挟みこみ、ネジとスペーサーで連結した三層構造を想定しています。自作キーボードでは、ごく一般的な構成で初心者でも安心です。

オプション

Atalanteは無線接続対応なので、消費電力を抑えるためにも本来は光らせるべきではないのですが、写真を撮影する際に見栄えがいいというだけの理由でアンダーグロー用のLEDを搭載することにしました。

またキーボードの中央(いわゆる仏陀スペース)にロータリーエンコーダーを1コ搭載します。
キーボード本体が薄型なので、それに合わせてロータリーエンコーダーもロープロファイルのものの使用を想定しています。

その他

ほかにもダイオードやリセットスイッチ、スペーサーなどの部品が必要になりますが、これに関しては特に機能的なこだわりがありませんので、自作キーボードとして標準的な部品を使います。

特にネジやスペーサーに関しては、自作キーボードでは想像以上にたくさん使います。部品の品番や数量などを管理するのも大変なので、もっと早い段階からExcelやGoogleスプレッドシートなどでまとめておけば良かったとあとで反省しました。特にキーボードの頒布を考えている場合は、原価計算の助けにもなりますので。

4: 環境を構築する

こんな感じで必要な部品もだいたい固まって、作りたいキーボードの完成形が見えてきました。次はいよいよ実際の設計に入っていきます。

なにはともあれ自前のPCにキーボードの設計ができる環境を整えなければなりません。
これに関しては、GL516デザインガイドのChapter 02(🧰環境を構築する|GL516 デザインガイド)に詳しく解説されています。

何を隠そう、Atalanteの設計に当たってはGL516のテンプレートをそのまま流用させていただくので、前述のリンク先を参考に、GL516のテンプレートをダウンロードしてリネームするところまで一気にやりました。そう、実はAtalanteはGL516の姉妹機なのです。*3

5: スイッチプレートを設計する

キーボードの設計に決められた手順というのは特にないのですが、なにしろこちらはド素人なので、まずはいちばんわかりやすいスイッチプレートの設計から始めました。

こちらもGL516デザインガイドのChapter 04(⌨テンプレートからスイッチプレートを作成する|GL516 デザインガイド)を参考にすればほぼ大丈夫です。


完成したスイッチプレート。キースイッチをキーボード本体に固定するとともに、キーボードの表面カバーを兼ねます。

ただ今回のキーボードはGL516の完全な互換キーボードではないので、プレートのサイズや外形などは自由に変更することができます。そのぶん作業量も増えますが、設計の自由度が上がるのはやはり嬉しいですね。

テンプレートを編集する

今回はChoc v1スイッチを使うということで、キーの間隔(ピッチ)はCerryMX互換スイッチのキーボード(19.05×19.05mm)よりも狭い18×17mmで設計します。

狭ピッチのフットプリントを作成する

まずKiCadのフットプリントエディターを開き、アイテム欄にあるkbd_SW_Hole > SW_Hole_1uのコピーを保存します*4。保存する際の名前はわかりやすければなんでもいいみたいです。

次に先ほど作成した狭ピッチのフットプリントを編集します。
黄色い四角形の外側にある白い四角形の線をダブルクリックし、それぞれ横幅を18mm(X軸を-9〜9mm)、または縦を17mm(Y軸を-8.5〜8.5mm)に設定します。この作業を上下左右それぞれの線に対して行います。

この白い線はCad上でスイッチを配置するときの単なる目印で、実際に作成するプレートには反映されません。

以上で、スイッチホールのフットプリント(狭ピッチ版)ができました。

ユーザーグリッドの単位を変更する

続いて、KiCadのPCBエディターでGL516テンプレートを開きます。ツールバーに表示されている「ユーザーグリッド」のプルダウンメニューから「ユーザーグリッドを編集…」を選び、ユーザー定義グリッドのサイズXに18/8を、サイズYに17/8を入力します。

これでキーピッチの8分の1単位で部品を配置できるようになりました。式を入れるだけで、勝手に計算してくれるのは楽でいいですね。

あとはGL516デザインガイドの手順に従って、検討したキーレイアウトの通りにスイッチ穴を並べていきます。

スイッチ穴を並べ終わったら、GL516デザインガイドを参考に各スイッチ穴にリファレンス番号を振っておきます。

プレート形状をデザインする

プレートの外形を決める

プレート全体の外形を決めます。ここはデザインセンスを問われるところです。プレートサンドイッチ構造のキーボードの場合、この外形がほぼそのままキーボードの形状になるからです。

物理的に実現可能な形状であれば、プレートの外形については特に制限はないと思われます(自己責任で)。

このときのKiCadの操作方法(プレートをカットする線の引き方や角の丸め方)については、またしてもGL516デザインガイドのChapter 06(⌨スイッチプレートからデコレーションプレートを作成する|GL516 デザインガイド)が参考になります。

どうやったら左右対称のデザインにできるのかわからなかったので、まず片側だけ線を引いて、それを反転コピーするという手段をとりました。もっと上手いやり方もありそうなので、ご存じの方がいたら教えてください…!

というわけで、実際に作って見た没案です。
自作キーボード界にはCorneliusというどちゃくそカッコいいキーボードがあるので、それっぽくしてみようと思ったけど違うコレジャナイ…ってなったやつ。圧倒的なデザインセンスの差を感じてちょっと凹みました。

こちらが完成版のベースになった改良版。 ErgoArrowsRadialexを参考にミニマルな感じにまとめてみたもの。

なんとなく邪悪な面構えでいい感じ。悪の秘密結社の改造人間みがありますね。

ネジ穴の位置を決めておく

ある程度デザインが固まったので、プレートを固定するためのネジ穴の位置も決めておきます。サンドイッチ構造ケースの場合、基板やボトムプレートにも同じ位置にネジ穴が来ることになるので先に位置決めしておいたほうが楽だと思います。どちらにしても、あとで微調整は必要ですが…。

ネジ穴の位置決めが終わったら、こちらにもリファレンス番号を振っておきます。

GL516テンプレートからネジ穴を流用した場合、各ネジ穴にはJ2〜J17までのリファレンス番号が振られていると思います*5。これらを増やしたり減らしたりした場合は重複や欠番が出ているはずですので、適当に連番に直しておくとあとの作業が少しだけ楽になります。

6: 回路図を作成する

続いてキーボードの回路図の設計に入ります。まずは先ほど作ったスイッチプレートをフォルダごとコピーして、基板用のフォルダとしてリネームしました。

回路図エディターの基本的な操作は、やはり当然のようにGL516デザインガイドのChapter 05(⌨スイッチプレートから基板を作成する|GL516 デザインガイド)を参考に進めます。

完成した回路図

回路の具体的な設計方法については、『自作キーボード設計ガイド Vol1 設計入門編』に詳しく書かれていますので、そちらも併せて読んでおけばテンプレートの内容がよりよく理解できるのではないかと思います。

スイッチの数を変更する

GL516テンプレートの回路図では最大80キーのキーボードまで設計できるようになっていますが、今回作成するキーボードは全63キー(左側31キー+右側31キー+ロータリーエンコーダーのプッシュスイッチ1キー)しかないのでスイッチの数を削ります。

Atalanteは左右それぞれ7列×5行というレイアウトなので回路図の8列目(Col7と書いてある列)は必要ありません。なのでこの列はまるっと削ります。

また、5行目(最下段)のキーは左右それぞれ3キーしかないので、右側を4個、左側を3個削ります。このときに残すキーの位置をなるべく実際のキーボードの形に近づけておくと、のちのち回路図をイメージしやすくなってファームウェアの作成が楽になります。

スイッチ1個のシンボルをロータリーエンコーダーに置き換える

GL516デザインガイドの手順に従って、スイッチのシンボル一カ所をロータリーエンコーダーのシンボルと入れ替えます。

これで回路図のスイッチ部分は、こんな感じになりました。

LEDの数を変更する

こちらも基本的にはGL516デザインガイドの手順に従って進めます。DOUTから出た線がDINにつながるという基本さえ押さえておけばたぶん大丈夫。
なおLEDの配線は初心者にはかなりハードルが高いので、慣れるまではLEDの数は控えめにしておくことをおすすめします。LEDコワイ。

マイコン周りのラベルを修正する

マイコンのピンに接続されているラベルを貼り替えます。先ほど削ったCol7のラベルを削除し、ロータリーエンコーダー用のラベルAとラベルBをそれぞれ空いているピンに接続します。

ネジの数を減らす(増やす)

スイッチプレート作成の際に決めたネジ穴の数に合わせて、回路図右端にあるネジの数を増やしたり減らしたりしておきました。ここは正直あまり気にしなくても大丈夫かも。よくわからん。

回路図を清書する

いちおう回路図ができあがったところで、次のような手順で回路図を清書します。

  1. 回路図のアノテーション
  2. 回路図のチェック
  3. フットプリントの割り当て

基本的にすべてGL516デザインガイドに従っておけば大丈夫です。

ただしフットプリントの割り当ては通常のGL516キーボードと違って、

  • 全スイッチがChoc_Hotswap_1uに変更されている
  • スイッチが一カ所ロータリーエンコーダーに置き換わっている

ことに注意して進めて行きます。

なんだかGL516デザインガイドにひたすら従ってるだけ、という気がしてきましたが、おかげでひとまずスイッチプレートと回路図ができました。

7: フットプリントを配置する

ここからはいよいよキーボードの本体である基板の設計に入っていきます。
先ほど作った回路図をもとに、キーボードの基板(PCB)を作成します。

完成した基板

基板の作成は、スイッチプレートのデータからフットプリントを更新する形で行います。GL516デザインガイドのChapter 05、手順 7 以降の作業です。

うっかりスイッチプレート用のデータを上書きして消してしまわないように、必ずフォルダごとコピーして別の名前をつけておきます

マイコンボードの位置を決める

配置する部品の中でも、もっとも影響が大きいのはマイコンの位置決めです。

まず最初に基板の表面裏面のどちらに配置するかを決めなければなりません。

表面にマイコンを配置するメリットは(基板の下にマイコンボードを入れるスペースを確保する必要がなくなるので)キーボード全体の厚みを薄くできることです。
デメリットは(マイコンボードの上にキースイッチを配置することができないせいで)キーボードにマイコンボードを置くための余白が必要になってしまうことです。


マイコンボードを表面に配置したキーボードの例(社畜のキーボード「新入社員の同期」)

裏面にマイコンを配置する場合はその逆で、キーボード全面にキースイッチを配置できるので余白を作らずにすむのがメリット、キーボードにある程度の厚みが必要になるのがデメリットです。


マイコンボードを裏面に配置したキーボードの例(MalicAcid A65)

Atalanteに関しては、①もともと薄型キーボードを作るのが目的だった、②一体型カラムスタッガード配列の場合、キーボードの中央に自動的に余白が生まれてしまう、という理由からマイコンを表面に配置することに決めました。

スイッチプレートの外形を変更する

Choc v1スイッチの場合、基板とスイッチプレートの間にほとんど隙間がありません。そのため基板の表側にマイコンボードをそのまま載せると、マイコンボードとスイッチプレートが干渉してしまいます。

その干渉を避けるためスイッチプレートに切り欠きを作ります。

ダミーのフットプリントを配置することで、切り欠きのサイズ感がわかりやすくなります。

またマイコンボードを載せる余白を確保するために、左右のキースイッチ部分の間隔を1cmほど広げました。

マイコンカバーを作る

切り欠きを作ってそのままだと今度はマイコンが剥き出しになってしまい、端子に金属などが触れるとショートしてしまう可能性があります。そこでマイコンを保護するためのカバーを作成することにしました。

というわけで、最終的に完成した新しいスイッチプレートがこちらです。

意外にかっこいいのでは…!?

OLED・トラックボールを搭載できるようにする

マイコンボードを表側に搭載した場合に生じてしまう余白を埋めるため、OLEDを搭載しているキーボードをよく見かけます。見た目に楽しいだけでなく、現在使用しているキーマップのレイヤーや、NumLockなどの状態を表示させることも可能で実用的でもあります。

というわけで、今回のキーボードにもOLED搭載のための端子を取り付けておくことにしました。同じ端子を利用してトラックボールを搭載することもできます。

回路図エディターに戻って、OLED用のコネクタを追加します。

OLEDのデータシートを見ながらこんな順番で。

OLEDはI2Cという規格でマイコンと接続しますが、Pro MicroやBLE Micro Proでシリアル通信に使えるピンはPIN5とPIN6に限られています。GL516テンプレートでは、これらのピンはキースイッチの入出力検知に使われていたので、ピンについているラベルを変更しました。

ピンの数がだいぶ逼迫してきましたが、これで回路図はいちおう完成です。

基板の外形を作る

キーボードのマウント方式によっては、基板とスイッチプレートの外形は異なるものを用意しなければならないのですが、今回はサンドイッチ構造ケースですのでスイッチプレートのデータがそのまま使えます(マイコンボード用の切り欠きを入れる前のデータを使います)。

ただし今回はマイコンボードを基板表面に取りつけるため、背の低いコンスルーやピンヘッダを使用すると、USBのコネクタ部分が基板に干渉する可能性があります。ですので、USBのコネクタの形に小さな切り欠きを入れました。

こんだけ空けておけばたぶん大丈夫でしょう。

フットプリントを配置する

以後の作業は、GL516デザインガイドに従えば大丈夫です。基板の裏側と表側に配置する部品に気をつけながら作業を進めていきます。

ダイオードやLEDなどは基板のどこに配置しても大丈夫なのですが、置いた場所によっては配線が複雑になって難易度が上がってしまいます。なるべく配線を意識した位置に配置するべき……なのですが、邪魔だったらあとで動かせばいいと聞いたので最初は気楽に置いていきます。

これでフットプリントの配置が終わりました。

8: 配線する

キーボード設計最後のステップにして、最大の難所です。

今回は自作キーボード設計ガイド Vol1 設計入門編の付録2で解説されている自動配線ツール(Freerouting)を使用して、その後、手動ですべて配線し直すという手順を取りました。

Freeroutingはキーが傾いているキーボードに少々弱く、完全に任せてしまうと、残念な配線になってしまう部分があります。

ですが初心者が完全にゼロから線を引くのはそれはそれで大変なので、Freeroutingにだいたいの方向性を示してもらい、人力でそれを清書するのが最終的にいちばん速く配線できました。このあたりのバランスは、作りたいキーボードの大きさや複雑さによって変わってきそうです。

チェックする

配線を終えたら、デザインルールチェッカーで未配線の部品がないかチェックします。最初はやばい数のエラーが出て泣きそうになりましたが、1コ1コ手直ししていけば、いつかは終わります。

エラーがなくなれば基板は(いちおう)完成です。

9: ボトムプレートを作成する

自作キーボード設計ガイド Vol1 設計入門編の6-4を参考に、ボトムプレートを作成します。

ボトムプレートの作成自体は特に難しい部分はないので、ここまでの作業に比べればすぐに終わらせることができました。

10: ネジ穴の位置を調整する

基板とボトムプレートは、スイッチプレートのデータをコピーして作ったので、ネジ穴の位置は本来ぴったり重なるはずです。ですが、部品の配置や配線の都合でネジ穴の位置を動かした場合は、ズレが生じている可能性があります。

ですので、基板を工場に発注する前に、自作キーボード設計ガイド Vol1 設計入門編の8-2を参考に、ネジ穴がぴったり重なることを確認しておきます。きっちり合わせたつもりが案外ズレてて、私は冷や汗をかきました…!

11: 発注する

基板やプレートを製造工場に発注します。

具体的なやり方はGL516デザインガイドのChapter 07(📝作ったプレートを発注する|GL516 デザインガイド)や、サリチル酸さんのブログ(JLCPCBの発注方法を解説するよ! - 自作キーボード温泉街の歩き方)が大変参考になりました。

今回、私はアクリル製のプレート類をElecrowさんに、基板をJLCPCBさんに注文しています。

12: 完成!

これでキーボードの設計作業は完了です。

あとは工場から到着した基板を組み立ててキーボードを動かすためのファームウェアを用意してあげれば、自分だけのキーボードの完成です。

作業量が多く感じられるかもしれませんが、ひとつひとつのステップは見た目ほど難しいものではありません。順番に作業を進めていけば、特別な知識を持たない初心者でも自作キーボードの設計ができてしまいます。

私の場合、設計を始めて工場に発注するまで実働4日くらいでした。実際にはそのあと試作しては手直しして試作しては手直しして、最終的に納得のいく製品が出来るまで4回くらい設計をやり直しているのですが…

この記事が、オリジナルキーボードの設計に挑戦してみたい方の参考になることを願っています。それでは、良いクリスマスを!

明日のキーボード #2 Advent Calendar 2023の24日目は、大西拓磨さんの「おさかなキーボードの現状」です。最初に見たときはデザイン性に全振りのキーボードかと思ったのですが、エルゴノミクス的な打ちやすさも追求しておられる製品ということで、とても気になります。楽しみです。


この記事は、Atalante Xで書きました。

*1:堕落猫さんが公開しているKLE ExtensionというChrome機能拡張を使うと、キーの回転や移動がちょっと楽になります。https://github.com/darakuneko/kle_extension

*2:Atalante最初の試作機はホームポジションに手を置いたままだと左右両端のキーに指が全然届かなくて、試作をやり直す羽目になりました……。

*3:GL516テンプレートはMITライセンスで公開されているのでありがたく使わせていただきました。設計者のサリチル酸さんに感謝いたします!

*4:もしkbd_SW_Holeが表示されない場合は、4の工程に戻ってフットプリントライブラリを追加してください。

*5:J1は電源コネクタに割り振られています