1行もコードを書かずに自作キーボードを作る
はじめに
先日、初めて自作キーボードを作ったのですが、非常に簡単かつ自由に作れることに感動したので記録として残そうと思います。感動した点は次の通りです。
- 既存のツールを使えばほとんど回路図を書かなくても良い
- キー配置は既存のウェブサービスで自由に定義可能
- 定義した配置は回路CADのプラグインを使えば手作業で部品を並べなくても済む
- 既存のウェブサービスを使えば開発環境を準備しなくてもファームウェアをコンパイルできる
なお、次の手順に沿ってキーボードを自作しました。
- 部品選定
- キー配列の定義
- 回路CADに配列を読み込ませる
- 配線する
- 発注
- 実装
- ファームウェアの実装
事前にインストールしておく必要のあるソフトウェアは「KiCad(回路CAD)」のみです。部品調達や基板の発注がスムーズに行けば1~2週間程度で完成すると思います。
部品選定
自作キーボードだけでなく、ハードウェア開発において最も重要なことの一つに、「世の中に自分の目的に沿った部品が存在すること」があると思います。求めるスペックの部品がない場合、思い描いているハードウェアを完成させることができません。そのため、まず理想のハードウェアの開発に取り組む前に部品をきちんと探しておく必要があります。
自作キーボードの部品を探す際に重要なのは「スイッチの押し心地」「スイッチのサイズ」「キーキャップのサイズ」だと思います。それぞれ、配給しているメーカーやスイッチの機構によってスペックが左右されます。
スイッチの押し心地は完全に個人の好みなので、自分が好きなものを探し当てるまで長い道のりになるでしょう。ちなみに、秋葉原には遊舎工房というお店があるので、そこでスイッチの押し心地を確認することができます。スイッチひとつの値段は微々たるものでも、キーボードにすると60~100個もの数が必要になってくるので予算に響いてきます。必ず確認しましょう。
スイッチのサイズは2種類存在しており、それぞれ端子の形が違うので、どちらのスイッチを使うかを先に決めておきましょう。1つはハイプロファイルというもので、HHKBやリアルフォースといったキーボードに搭載されている背の高いものです。もう一つはロープロファイルというもので、ノートパソコンに搭載されている背の低いものです。幸い、世の中には両方の端子が刺さるフットプリントを作ってくれている人がいるので、それを使うと回路設計が楽になります。
キーキャップとはスイッチの上に取り付ける文字の書かれている部品のことで、見た目の美しいキーボードを作るための重要な要素の一つです。手元のキーボードを見ていただくとわかりますが、様々な横幅のキーキャップがあります。基板上にピッタリハマるように配置したとしても、市販のキーキャップにもとめているサイズがない場合があります。どのキーキャップを使うか決めてから配列を考えましょう。そうでない場合は、配列を決めてからキーキャップを選定し、適宜配列を修正する必要があります。
自作キーボード開発において、キーキャップの選定が一番重要だと思います。市販のキーキャップを使用するにあたって、キーのサイズや印字、色など、様々な制約が課せられます。キー配列の自由度を束縛する要素なので、きちんと選定しておくことで作業の手戻りを減らすことができます。
キー配列の定義
Keyboard Layout Editorというウェブサービスを使って自分だけの配列を定義していきましょう。プリセットの配列が色々と用意されているので、その中から自分の作りたいキーボードに似たものを選び、改修していくのが手っ取り早いです。
自由に配置した後は、キーの左上(Top Legend)に番号を振っていきましょう。番号は下図の回路図に記載されている部品と対応付ける必要があります。例えば、1u(横幅が1のキー)のキーは1~100番まで番号が振られています。
(https://github.com/yskoht/keyboard-layouter-playground より拝借)
完成したら、画面右上の「Download」からjsonファイルをダウンロードしましょう。
次の配列のキーボードを作る前提で話を勧めていきます。
回路CADに配列を読み込ませる
Keyboard Layout Editorで作ったキー配列を回路CADに読み込ませましょう。
回路CADはKiCadを使います。KiCadの細かい使い方は解説しないので、ここなどを参考にしてください。
まず、keyboard-layouter-playgroundリポジトリをクローンしましょう。このリポジトリに含まれるkeyboard-layouter-playground.kicad_pcb
を編集してキー配置を決めていきます。そうしたら、.kicad_pcb
ファイルをダブルクリックしてPCB newというソフトを立ち上げましょう。最後に、プラグインを使って、前のセクションでダウンロードしておいたjsonを読み込ませましょう。Keyboard Layout Editorで指定した番号と回路図上の部品の番号が対応付けられて配置されます。うまくいくと次のような状態になります。
配線する
読み込みが成功したら部品の配線をしていきましょう。
.sch
ファイルをダブルクリックして回路図エディタを起動します。
まず、使用する部品以外を削除しましょう。
Keyboard Layout Editorでキーごとに割り当てた番号以外の部品を削除すればよいです。
次に、使用するキースイッチとダイオードを格子状に配線していきます。具体的には下図のように配線していきます。
キースイッチとダイオードが配線できたら、マイコンと各行・列を配線しましょう。GPIOと行・列のピンを繋げばOKです。具体的には下図のように配線します。今回はElite-Cというマイコンを使いました。GPIOの数が多いため、キー数の多いキーボードをIOエキスパンダを使わずに制御できます。お高いですが...。
最終的に、次のような配線になりました。
回路図上で配線ができたら、基板上での配線を行いましょう。詳しいやり方は省きますが、部品とフットプリントを対応させ、PCB newを開いて配線していきます。この記事を参考にしてみてください。
発注
回路図が完成したら基板屋に発注しましょう。自分はPCBWayを使いました。1週間くらいで到着します。
実装
黙々とはんだ付けをします。
ファームウェアの実装
ファームウェアにはQMKを使います。C言語です。書くの面倒くさいですよね。
なので、Keyboard Firmware Builderというサービスを使いましょう。
Or import from keyboard-layout-editor.com
の下のテキストボックスにKyeboard Layout Editor
からダウンロードしたjsonを貼り付けましょう。そうすると次のような画面になります。
縦横の線の繋がりは、回路図エディタで配線した時の格子と対応している必要があります。回路図と一致させるように編集しましょう。キーをクリックして「Rows」と「Columns」の数字を変更します。
次に、キーマップを作成しましょう。大抵の場合はKeyboard Layout Editorで指定したキーがすでに割り当てられています。レイヤーを駆使したい場合はココで設定しましょう。
最後に一番右の「COMPILE」メニューからファームウェアを生成しましょう。
Download.hex
をクリックしてしばらくするとコンパイル済みのファームウェアがダウンロードできます。ソースコードもダウンロードできます。キースイッチ以外のデバイスをつなぎたい場合は、ダウンロードしたソースコードを改変すると良いでしょう。ダウンロードしたhexファイルをQMK Toolboxを使ってマイコンに書き込みます。QMK Toolbox
の詳しい使い方はここなどを参考にしてみてください。
最後に
既存のプラグインやサービスを駆使することで、自作キーボードを開発する際に1行もコードを書かず、すべての作業をGUIで完結させることができます。自分は今まで自作キーボードを作るための、ちまちました作業を面倒くさく感じており、なかなか重い腰を上げて作業に取り掛かることができませんでした。しかし、今回紹介したサービスを使えばそのような面倒な作業から開放されるわけです。例えば、自分の理想のキー配列を実現するために、回路CAD上で部品を正確な位置に規則正しく配置することは、手作業で行うには骨が折れます。しかし、プラグインを使うことで自動化できました。また、回路図を引く作業も、既存のリポジトリを改変するだけで良く、わざわざ部品を選定・配置する手間を省くことができます。さらに、理想のキー配列で動作させるためのファームウェアを実装するためには、開発環境の整備やコードを書く必要があります。Keyboard Firmware Builderを使うことで、手元の環境に変更を加えずにファームウェアを生成する事ができました。
この記事ではキーボードの筐体設計については説明しませんでした。その理由は、筐体設計を行うには様々な方法があり、包括的に説明することが難しいからです。筐体設計にはトライアンドエラーが求められ、自分の中でベストプラクティスが確立していないので、上手く説明することができませんでした。例えば、このサイトでレーザーカッター用のデータを作成することができます。しかし、このサイトを使っても完璧なデータを作ることはできず、細かな修正が必要です(スタビライザーの外形が部品よりも小さいため、カットした板が部品に上手く嵌まらない)。KiCadの外形データを読み込ませることでいい感じのケースを生成するサービスがあると嬉しいです。
今回説明した方法では、みんなが大好きな左右分割キーボードは作ることができません。キー配列は定義できても、ファームウェア上でマイコン同士の通信に対応することができません(やり方があったら教えて下さい)。QMK自体に左右分割キーボードの実装はあるので、コードを書けば作ることができるでしょう。
GUIをポチポチするだけで自分の理想のキーボードを作れる時代に感謝です。みなさまもぜひトライしてみてください。なお、最終的に完成したキーボードの回路図などはこちらで公開しています。よかったらスターをしてください。
Discussion