こんにちは。CSIGの井上です。この記事は秋のブログ週間2021の4日目です。
本ブログでは何度か自作キーボードの記事を書いていますが、基本的には「誰かが設計したものを組み立てる」物でした。最近まではある程度満足して使っていたのですが、もう少しこうだと(私は)使いやすいかもしれない、という点が色々出てきたので、キーボードを基板から作ろうと思い始めました。
- 市販の自作キーボードは、キーアサインの変更は可能です
- しかしながら、物理的な配置等も変えたい場合は、自作するしかないです
ですが、最初からキーボードを作るのは難度が高いので、まずは機能確認のキーパッドを作りました。これについて記事を書きました。
あと、普段はサイバーセキュリティの話をしていますが、今回は一切しません…
概要
この記事について
この記事は、仕組みを知ることの楽しさを知ってもらう、という事を目的に書きました。
今回は、自作の第一歩として以下を含む基板を作ります。
(何かを始めてやるときは、実装テストを小規模で行う、のがセオリーですね)。
- 4つのキー
- 1つのロータリーエンコーダー
- 1つのカラーシリアルLEDテープ
最終的に作りたいもの
本記事で書いたキーパッド設計により、設計プロセスや注意点を、おおよそ理解しました。
今後は、日本語キーボード(70キー程度)を作るつもりです。機会があればこちらに投稿するかもしれません。
- 会社支給PCは日本語キーボードのノートPCであるが、キータッチは個人的にはあまり好きではない
- リモートワーク環境であり、自宅では某自作日本語キーボードを利用している
- 出社または自宅外でリモートワークする時に上記のキーボードを持ち出すと、破損する恐れがある
- 持ち出しても破損しづらい、好みのキーボードが欲しい! 作りたい!
それでは、キーパッドを設計していきます。
キーパッドを作る
構成と利用ソフトウェア
構成
自作キーボードは、一般的に以下の構成となっています。
- ProMicroと呼ばれるマイコン(Arduino互換機)に、各種スイッチ類やLEDなどを接続する
- ProMicroのUSBポート経由でPCと接続し、キーボードとして使う
- ProMicroのファームウェアは、QMK Firmwareというもので作成ができ、それをQMK ToolBoxで書き込むことが可能
- ファームウェアを書き換えることで、キーアサインなどを変更できる
利用するソフトウェア
今回は、以下のアプリケーションを使います。
- KiCAD
- https://www.kicad.org/
A Cross Platform and Open Source Electronics Design Automation Suite
- 回路の設計と、基板の設計ができるアプリケーションです。Ubuntuだとaptで導入もできました。
- KiCADには、Eeschema(回路図エディター)/Pcbnew(プリント基板用ソフトウェア)/GrebView(ガーバー/ドリル ファイルビューア)などが含まれています。
- Freerouting
- https://freerouting.mihosoft.eu/
PCB Autorouter
- KiCADでは自動で配線はできないようなので、このアプリケーションにより配線をしてもらいます。
- QMK Firmware
- https://github.com/qmk/qmk_firmware
- キーボードの制御でよく使われるProMicroに入れるファームウェアとして使われます。
- githubプロジェクトに登録済みのキーボードであれば、QMK Configurator という、Web上でキーアサインを変更してファームウェアを作るものが利用できます。
- QMK ToolBox
- https://github.com/qmk/qmk_toolbox
- QMK Firmwareで用意したファームウェアを、USB経由でキーボード上のProMicroに書き込みます。
何を作りたいかを決める
自作プロセスの検証作業に近い内容なので、欲しい機能を盛り込みます。
- キーは必要
- 最終的にはキーボードを作るつもりなので、複数のキーを扱う練習をしたい
- ロータリーエンコーダーも使ってみる
- マウス代わりとして使う可能性もあるので、実装してみたい
- シリアルカラーLEDテープ
- 自作キーボード=光る、これは定番
キーは内部的にマトリックスとして扱うので、最低限の 2×2 で 4キーとしました。
ロータリーエンコーダーとLEDテープは、実装テストなので数は不要として、1つとしました。
実装するものが決まったので、これ以外に必要なパーツなども含めて配置を考えます。
回路を設計する
KiCADは設計用の複数の画面を持っていますが、今回はKiCADのEeschemaで部品を配置、配線します。
詳細は割愛しますが、キーボードのコントローラーとなるProMicroを中心に、回路を検討します。
- キーはマトリックス配置とします。
- ProMicroの2Pinを「行」、同2Pinを「列」に割り当て、ダイオードで逆流を防止すると、4キーを認識できる
- ProMicroは最大18Pinをこの用途で利用できるので、9行x9列=81キーを単体で判別できる。
- キーのマトリックスを作り、各Pinにアサインします。
- ロータリーエンコーダーは、2Pinを消費します。
- 現状のQMK Firmwawreは、ロータリーエンコーダーはマトリックスに組込めない仕様です。
- そのため、ProMicroに直接Pinアサインします。
- ファームウェア書き換えの簡略化の為、リセットスイッチも付けます。
- RST PinをGNDに短絡するように、スイッチを配線します。
- 分割キーボードとする際に必要なTRRSジャックも一応つけておきます。
- キーボードを左右に分割した場合、シリアル通信若しくはI2C通信で同期させる必要があります。今回はシリアル通信要として1Pinを設定します。
- I2Cの場合は GND/VCC/SDA/SCLの4線が必要で、市販のステレオジャック(3極)では無く、TRRSジャック(4極)を使います。
- シリアル通信だと GND/VCC/Dataで済みますが、汎用化の為にTRRSジャックを使います。
- シリアルLEDテープは、1Pin消費します。
- GND/VCC/Din なので、制御用のDinをProMicroに接続します。
この段階で、論理的な部品と配線が完了しました。
次に進む前に、ネットリストの出力や、フットプリントを割り当てておきます。
PCBを設計する
基板自体の設計に進みます。これは、KiCADのpcbnewを使います。
まずは部品の実際の配置を考えて整理します。
- 使い勝手により位置が決まるもの(TRRSジャックは基板の端オードは同じ向きで固めて配置したい)等で位置決めをします。
- その後、基板上での配線を書いていくのですが、KiCADでは自動配線をしてくれません。手動で配線する必要があります。
- そこでFreeRoutingを使い、自動配線します。
配線後は、下図このようになります。
- 3Dモデルを表示することもできるので、仕上がりを確認することもできます。
これで基板は完成したので、発注を行います。
PCBを発注する
KiCADで作成したデータを基に、業者に発注します。
各業者により特徴はありますが、基本的には同じです。
- 個人で利用する場合、条件により費用が変わりやすいです。
- 最低5枚から、特定のサイズ内であれば安く仕上がる、などの条件があります。
- これに合わせるように基板を設計したほうが良いかもしれません。
- 中国の工場で作成され、郵送されることが多いです。
- 私が頼んだ業者は、深圳から送ってきました。特定のサイズ以下であれば、5枚で2000円以下、程度でした。
- 納期は3週間で、2週間目まで製造は全くされていませんでした。3周目頭で製造が始まり、DHLを使い、予定通り3週間中に送られてきました。
発注後暫く待つと、基板が届くはずです。
組み立てる
基板が届いたら、まずは部品を組みつけてみます。
- パーツ自体は一般的な物なので、関東であれば秋葉原のパーツ屋や台東区にある自作キーボード専門店で入手できます。
- 場合により、「取付向きが逆になる(フットプリントを逆に配置してしまった)」とかが発生することがあります。
- 無理やり空中配線で対応したり、表裏を変えたりして対処できれば良いですが、無理な時はあきらめるしかありません…
部品が付いたことで、「見た目」は完成品になりました。
まだファームウェアを書いていないので、PCに接続しても何も起きません。
ファームウェアを用意します。
ファームウェアを作成する
QMK Firmwareを利用して作成します。
Ubuntuのパッケージを利用して導入しましたが、GitHubのものよりバージョンが古いかもしれません。しかしながら、特段問題は出ないのでそのまま使いました。
QMK Firmwareは開発が頻繁に行われており、1週間程度ごとにはバージョンが上がっているようです。
- KiCADも含めて、PCにそのまま入れると環境が汚れるので、仮想マシン上で動かすのが良いかもしれません。
- 今回はKiCAD, QMK FirmwareのビルドなどはUbuntuで行っています。
- 開発の速さに伴いインターネット上の情報が古くなりやすいです。やはり公式のドキュメントを参照するのが一番良いようですが、なかなか複雑です。
- Ubuntuでapt導入した場合は、
~/qmk_firmware/
以下に環境が用意されます。
詳細は省略しますが、新規でゼロから作る場合は以下のようにします。
- テンプレートを作る
$ ./util/new_keyboard.sh
- キーボード名や作成者名を入れると、テンプレートが
./keyboards/<キーボード名>
に作られる
- キーボード名や作成者名を入れると、テンプレートが
- 編集を行う
- キーの数やアサイン、LEDシートやロータリーエンコーダーなどの設定をする
config.h
,<キーボード名>.h
,keymap.c
等を書き換える- 何を書き換えるかは…ネットで調べる方が良いかもしれない
- 機能を
enable = ture
にする、ProMicroの割当Pin番号を記載していく、等
- 機能を
- キーの数やアサイン、LEDシートやロータリーエンコーダーなどの設定をする
- コンパイルする
$ qmk compile --keyboard <キーボード名> --keymap default
ファームウェアをビルドすると~/.build
以下に*.hex
ファイルとして配置されるので、これをQMK ToolBoxでProMicroに書き込みます。
先人のキーボード設計を流用する場合は、keymapだけ書き換えることになると思います。
新規の場合、流用をすると色々エラーが起こったりすることが多いので、new_keyboard.sh
した方が早いように感じました。
ファームウェアを適用する
ProMicroへの書き込みですが、WindowsだとQMK Toolbox.exe
で、GUIで操作ができます。
- (VM上のファームウェアを、ホストのWindowsから見えるところに移動させる)
QMK Toolbox.exe
を起動し、準備をする- ファームウェアファイルを指定、
Auto-Flash
の有効化のチェックボックスを有効化
- ファームウェアファイルを指定、
- キーボードをUSBで接続する
- リセットスイッチを押すと自動でファームウェアが書き込まれる
これでキーボードとして動作が可能な状態になりました。完成です。
ここまでできれば、一通りの機能実装ができたことになります。おそらく、ロータリーエンコーダーやLEDテープなどが無ければ、簡単に実装できます。
最初の実装としては問題なくできたので、次は日本語キーボードを作ろうと思います。
(大半をWebで済ます方法もある)
最近は、各種Webサービスを駆使することで、ほぼWeb上でキーボードが作れそうです。
- キーボードをデザインする
- keyboard-layout-editor でキーボードをデザインする
- KiCADで基板を作る
- ここは流石にWebではできないか。
- PCB発注
- Webで事業者に発注。一応、Webサービスですね。
- ファームウェアの作成
- Keyboard Firmware Builderでファームウェアを作る
- keyboard-layout-editorのJSONを張り付けることで、オリジナルのキーボードでも作れる
- 但し、ロータリーエンコーダーは書けない
- ファームウェアをダウンロードしてみるとQMK Firmwareのようだけれども、それを改造してcompileするのは難しいみたい。
- ファームウェアの書き込み
- QMK Tool boxを使うので、Webサービスじゃないですね…
まとめ
キーボード自作のおおよそのフローは理解いただけたと思います。
自作キーボードに興味のない方には雑学としての知識を、興味のある方には自作の後押しをできていれば幸いです。
秋のブログ週間2021の4日目でした。