自作キーボード (Ergo42) を組み立てた

Biacco42 さんが制作された自作キーボードキット、 [Ergo42](https://github.com/Biacco42/Ergo42) を組み立てたので、その記録です。

自作キーボードの組み立ては初めてで、いろいろ初歩的なところではまりかけたので、これから作る人や自作キーボードに手を出してみたいと思っている人の参考になればいいなと思います 👀

電子工作ほぼ初めてくらいの人でも読めるように書いたつもりでいます。

# 2019/04 追記

この記事は自分が組み立てた時点 (Ergo42 Early Bird) での内容です。最新の基板 (現時点では、Ergo42 Towel) では一部仕様が変更されている箇所もあるので、公式の組み立てガイドも必ず参照してください。

# 部品の入手
## プリント基板、アクリルフレーム

![Image uploaded from iOS (20).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/f126e0ae-5e83-fe00-af51-9d130a059682.jpeg)

肝心のプリント基板とアクリルフレームは、 [Early Bird](https://booth.pm/ja/items/811778) に参加して入手しました。

他のキットを組む場合も、おそらくしかるべき機会にキットになっているものを買うか、オープンソースなのでデータから自分で制作するかのどちらかになると思います。

自分で作る場合、 PCB は [FusionPCB](https://www.seeedstudio.com/fusion.html) あたりの小ロットから発注できる業者さんに依頼、フレームはレーザーカッターのレンタルをやっている工作スペースでアクリル板から切り出し、になるんだと思うんですが、やったことないのでごめんなさい。

## キースイッチ

選ぶのが楽しいところその１ですね。

Aliexpress などの海外通販から購入するか、 Massdrop などの共同購入に参加するのが定番みたいです。自分は、国内でキーボードアクセサリを扱う [TALP KEYBOARDS](https://talpkeyboard.stores.jp/) さんでタイミングよく在庫にありつけたので、お世話になりました。海外通販で購入する場合、（無料だったり割引が効いたりしなければ）相場 1500 円くらいが国際配送料としてかかる雰囲気でした。

選択肢としては、おなじみの Cherry か、 Cherry 互換の中華スイッチ Gateron 、ロープロファイル（背丈の低いフラットなもの）の Kailh が定番みたいです。 Ergo42 はどちらにも対応しているようでしたが、ロープロファイルスイッチは Cherry 互換ではないので、キットによっては実装できないと思います。注意してください。

購入先によりますが、まとめて購入すると Cherry が１キーあたり 50 円くらい、 Gateron だとそこからさらに 4 割くらい安上がりになる印象でした。

メカニカルキーボードのスイッチは、大きく分けて、押した時に引っ掛かりがあってカチカチと音がなるものと、ストンと（リニアに）下まで落ちるものがあります。

自分はカチカチいうのは好みじゃなかったので、リニアタイプのスイッチを選びました。

リニアタイプのスイッチの定番は黒軸と赤軸の二種類で、黒軸は重く、赤軸は軽いです。それ以外にも、 Gateron には黒軸に近いけど気持ち軽めな黄軸というのがあったり、 Cherry には赤軸に静音加工を施したピンク軸というのがあったり、選択肢がかなりたくさんあります。メカニカルキーボードの取り扱いのあるお店で試し打ちさせてもらうのもいいと思います。

自分は、ある程度抵抗のある重めのスイッチが好きなので、黄軸を選びました。ついでに、スイッチによって重さを変えるというのをちょっと試してみたいなと思ったので、小指用に赤軸も一緒に少数購入しました。

## キーキャップ

選ぶのが楽しいところその２です。

キーキャップは本当にピンキリで、いいものではキーキャップ代だけでちょっとしたキーボードをまるっと買えてしまいそうな値段をするものもあります。

こだわり派の定番は、いろいろなカラー・配列の充実している [pimpmykeyboard](https://pimpmykeyboard.com/) さんや、個別にカスタムして購入できる [WASD Keyboards](http://www.wasdkeyboards.com/) あたりみたいです。お手軽に済ませたければ、 Aliexpess などで比較的安いものも見つかりますし、あるいは普通の市販キーボードの交換用キーキャップセット ([Majestouch の交換用セット](http://www.diatec.co.jp/shop/list.php?s[]=100:1002:10008) など) から部品取りするという手も全然あると思います。自分の選んだスイッチにちゃんとはまるものを選ぶようにだけ注意してください。

キーキャップにも形状（プロファイル）が何種類かあって、それぞれに特徴があります。 Cherry / OEM プロファイルなどは段ごとに傾斜が付いています。逆に、 DSA などはすべてのキーの形が同じです。

自作勢は、キー配列を入れ替えたりとかするのですべてのキーが同じ形をした DSA を選ぶことが多いみたいです。が、純粋な打ちやすさだけで言えば個人的には OEM プロファイルが好みでした。ただ、記号系のキーはやっぱり配置をいじりたくなるので、確かにキーの形が違うのがネックになることはあります。

キートップの印字にも種類があります。二色形成 (double shot) と呼ばれるものは、物理的に二種類の色の違う素材を組み合わせて作られていて、使い込んでも 文字の剥げない高級品みたいです。また、印字がそもそもないやつもあります。上に書いたような事情があるので、 OEM プロファイルなど、場所によってキーの形が決まっているキートップを使う場合は無刻印の方が融通が利くかもしれないです。が、ふとしたときに刻印を見たくなる時も自分はあるので、刻印のあるものを使っています（キーの形だけで F, J を見つけて普通に打ち始められる人は問題ないと思いますが、そうでない人は慣れるまでしんどいかもしれないです）。

## その他の電子部品

送料浮かせたかったので、自分は秋葉原で現地調達しました。

ついでにブルーイングラボで一杯飲んで帰りました。ビールは良いものだ。

分割キーボードのキットを組む場合、当たり前ですがどのパーツも両手分必要なので、注意してください。

### 秋月

[秋月電子通商](http://akizukidenshi.com/) さん。

値段も比較的安いし、なにより整理されていて探しやすい＆店員さんが親切で電子工作を始める人に優しいお店です。

ダイオード、 TRRS ジャックは型番の指定があるのでそれと、マイコンリセット用の適当なタクトスイッチを買いました。全部合わせて 300 円くらい…？

タクトスイッチの種類には指定がないのですが、おそらく 5mm ２ピンのタクトスイッチが丁度良いです。自分が買ったのは多分 [これ](http://akizukidenshi.com/catalog/g/gP-08078/) です。

TRRS ジャックは二つのキーボードを接続するために使うので、分割タイプではないキットを組み立てるときには不要です。

### せんごく

[せんごく電商](https://www.sengoku.co.jp/) さん。

周辺に複数店舗を構えていて、電子部品だけじゃなく、ケーブル類とか工具類も充実している便利なお店です。

[TRRS ケーブル](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4Z7Z) を購入しました。両端 L 字のプラグになっているものでも良かったかなーと思っています。キットによりますが、普通の３極 (ステレオ) ケーブルではダメな場合も多いので注意してください。

### aitendo

[aitendo](http://www.aitendo.com/) さん。

謎の中華パーツが特価のカゴにごろごろ転がっていたり、なぜか天体望遠鏡が破格で売られてたり、クセの強い店ですがめちゃくちゃ面白いしなにより安いです。何年か前に移転して、他の二店舗からは少し離れたところにあります（それまではジャンク通りらへんにありました）。

Pro Micro 互換の [マイコンモジュール](http://www.aitendo.com/product/12196)
を購入しました。こいつがキー入力を監視して、 USB 経由で PC にキーコードを送信します。

aitendo の Pro Micro にはピンヘッダが付属していますが、もし購入した Pro Micro にピンヘッダが付属していない場合は、合わせて購入してください。

分割キーボードの場合はマイコンも両手それぞれに必要なので、買い忘れに注意してください。

# 組み立て

自分は有休を取って丸一日で組み上げましたが、結構疲れるので二日とかに分けてもいいかもしれないです。

## 道具

最低限絶対に必要なのは、ニッパ（ある程度良いもの）、はんだごて、はんだです。

こて先クリーナーのついたこて台、はんだ吸い取り機（ミスったときに部品外すために必要）、ピンセット（力を入れ続けなくても部品を押さえておいてくれる逆作動タイプのものがあると便利）、マルチテスター（高級品じゃなくて ok）くらいは揃えておいて間違いないと思います。

はんだは鉛フリーのものとそうでないものがあって、鉛フリーのほうが有害性が低いものの難易度が上がります。

ニッパは、部品の足を切る時にうまく根元から切れず基板にガッツリ線材が残ってしまうと、あとでアクリルプレートを取り付ける時にピタッとはまらなくなってしまうので、ある程度綺麗に切断できるものを選んでおくのが吉です。

## 左手用・右手用の基板を決める

左手用・右手用で基板の区別はありません。２つの同じ基板を、一方だけ裏返して左右対称にして使います。

**マイコンを設置するスペースがあるほうが内側**　なので注意してください。

これから実装していく部品達は、基本的にスイッチを設置するのと同じ側（上を向いている側）につけていきます
（ロープロファイルスイッチを使う場合、ダイオードだけはスイッチと反対側の面に実装することになるようなので、注意してください）。

今後もろもろ部品を付けていくと、こんな感じになっていきます。

![Image uploaded from iOS (21).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/3f3db4eb-9116-6bb1-5483-77a349a8de5e.jpeg)

## ダイオードの実装

電流の流れを一方通行に制限するダイオードを、キーの個数分つけます。地味ですが、マイコンの少ないピン数ですべてのキーの入力状況を把握するための重要な部品です。

ダイオードの足を折り曲げて基盤に挿入して、根元をはんだづけ、はみ出した足を切ります。

![Image uploaded from iOS (28).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/1643a36c-fef9-17c0-a2ab-e99c98205d26.jpeg)

一方通行にする部品というくらいなので、 **向きが決まっています。** 注意してください。 Ergo42 の場合、 **ダイオードの、ラインが入っている側が基板の四角い穴に、反対側が丸い穴に入ります。**

![Image uploaded from iOS (23).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/2d6faaea-e6d9-19b6-0fba-fe53dee30a29.jpeg)

_個人的にはこのあとのスイッチの実装なんかよりよっぽど大変だったので、ここでくじけないでください。_ これが終われば４割完成くらいの気持ちでいいです。

### チェック

すべてのダイオードが正しくついているか、この時点で確認しておくと、後でデバッグするより楽です。

丸をつけた箇所が、ダイオードを介して繋がる場所になります。赤丸・青丸ペアにマルチテスターのプローブを当てて、導通チェックをします。

一部のペアだけ繋がっていないとかいったことがあれば、はんだ不良やダイオードの向きのミスを疑ってください。

僕は一箇所ミスってました。

4段目

![Image uploaded from iOS (23) のコピー.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/6897cc00-2647-2d5b-eba8-8b0f84308df6.jpeg)

3段目

![Image uploaded from iOS (23) のコピー 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/cfffd759-25e4-7e6c-ae5f-c7159408e08e.jpeg)

2段目

![Image uploaded from iOS (23) のコピー 3.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/7e93e7cc-28eb-6971-16f6-3fb860b8e9cc.jpeg)

1段目

![Image uploaded from iOS (23) のコピー 4.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/a1a924f9-dafd-e528-1013-999ff89dd248.jpeg)

## タクトスイッチの実装

電子部品は背の低い順につけていくのが基本です。自分の選んだタクトスイッチは TRRS ジャックより背が低いので、まずはタクトスイッチを実装します。

タクトスイッチを設置するところは、図の赤丸のところです。タクトスイッチはただのスイッチなので向きを気にしなくて ok です。

![Image uploaded from iOS (23) のコピー 5.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/4a2afc58-d7aa-68f5-46e7-b7471e1d5780.jpeg)

はんだ付けできたら、同様にはみ出した足を切っておきます。

### チェック

下の図の箇所がスイッチを経由してつながるところになります。スイッチを押したときにちゃんと導通するか確認します。

![Image uploaded from iOS (23) のコピー 6.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/be05b80e-58d9-3279-8536-7ffcc4026df2.jpeg)

## TRRS ジャックの実装

同様に TRRS ジャックも実装していきます。

### チェック

TRRS ジャックからの入力 4 本を読み取れる穴が下の図の箇所にあります。

![Image uploaded from iOS (23) のコピー 8.jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/0f0d3168-05d1-340c-5409-4813f97ef2ca.jpeg)

TRRS ジャックの実装が済んだ二つの基板を、実際に TRRS ケーブルでつないで、基板上の同じ箇所同士が接続されることを確認します。

## Pro Micro の実装

Pro Micro の実装はちょっと大変です。

まずは Pro Micro の基板に、 Ergo42 の基板と連結するためのピンヘッダを取り付けます。

ピンヘッダは、短い側を Pro Micro の基板に、下面から上面に向かって差し込み、上面側をはんだ付けします。

![Image uploaded from iOS (24).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/c1eca9e8-513f-b6ac-7f9c-01c420bdccbb.jpeg)

Ergo42 の場合、 **右手側の Pro Micro は裏返して使うため、差し込む向きが変わる** ことに注意してください。

![Image uploaded from iOS (25).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/ed25b2cf-2f00-0474-7394-da2f4bd20205.jpeg)

Pro Micro にピンヘッダが装着できたら、今度はピンヘッダつきの Pro Micro を Ergo42 の基板に取り付けます。

![Image uploaded from iOS (22).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/39121654-4492-0526-2809-d6f64d182ce0.jpeg)

無事はんだ付けできたら、はみ出した足は切り取ります。あまり足を長く残すと、最後の工程で底板を取り付けるときに引っかかって辛い気持ちになるので、ダイオードなどの足より太くてちょっとしんどいですが、極力根元から綺麗に切ります。

## スイッチの実装

いよいよお待ちかね、スイッチの実装です。

### 初期不良のチェック

僕は念のためスイッチの初期不良をチェックしました。

スイッチの二つのピンにテスターを当てて、スイッチを押したときに導通することを確認します。

幸い問題のあるスイッチはありませんでした。

### スイッチをフレームにはめる

まずはスイッチをフレームにパチパチはめ込んでいきます。ロープロファイルスイッチだと結構大変という噂を聞きました。

![Image uploaded from iOS (26).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/dabe0b57-d6f5-c64f-a707-c42787288374.jpeg)

フレームにスイッチをはめ終えたら、基板の上からフレームごとスイッチを挿入します。

![Image uploaded from iOS (27).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/ddb66d1c-f19a-7d84-b9da-ab501678f069.jpeg)

**フレームにも裏表があるので注意してください。フレームにあいた穴が、基板側の穴の位置と揃う向きで作らないと、ネジが通りません。** (よく見ると、上の写真は思いっきりミスってます。説明のためにわざと間違えてあげたんだからね！)

### スイッチをはんだ付けする

スイッチとフレームを基板にセットできたら、あとはひたすらはんだ付けするだけです。

無事はんだ付けができたら、例によって足はなるべく短く切っておいてください。

## ケースを完成させる

最後にケースを完成させて、物理パートは終了です。これが終われば、あとはソフトウェアをマイコンに書き込むだけです。

底板にネジでスペーサを取り付けて、

![Image uploaded from iOS (29).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/9d9b1326-8097-4f0a-c76b-58fce059f9ec.jpeg)

基板に挿入、上からもネジを締めれば完成です。スイッチの中央についている樹脂の支えが直接底板に当たっている状態が正しい状態です。もし部品の足が樹脂の支えよりもはみ出していて、底板からスイッチが浮いてしまうようであれば、その部品の足をもっと根元からしっかり切って、底板をはめ直してください。

![Image uploaded from iOS (30).jpg](https://qiita-image-store.s3.amazonaws.com/0/54240/04d74b80-c433-8f92-ee9e-bc25a4ebf7f7.jpeg)

## Pro Micro にソフトウェアを書き込む

[QMK Firmware](https://github.com/qmk/qmk_firmware) を GitHub から clone して、

```sh
git clone https://github.com/qmk/qmk_firmware.git
```

[ドキュメント](https://docs.qmk.fm/install-build-tools) にしたがってコマンドラインツールをセットアップ

```sh
# Mac の場合
brew tap osx-cross/avr
brew tap PX4/homebrew-px4
brew update
brew install avr-gcc
brew install dfu-programmer
brew install gcc-arm-none-eabi
brew install avrdude
```

環境ができたら、２つの基板のうち片方をまずは USB で PC に接続して (TRRS ケーブルは抜いておきます)、ビルド＆書き込みをします。

```sh
make ergo42/rev1:default:avrdude
```

以下のようなメッセージが表示されたら

```sh
Reset your Pro Micro now ...
```

タクトスイッチをポチっとしてマイコンをリセットします。

もう片方のマイコンにも同様にソフトウェアを書き込めば、キーボードはひとまず完成です！

# 実際使ってみて

このコンパクトさ・カッコよさと、なによりキーマップを無限にカスタマイズできる楽しさ・便利さはめちゃめちゃいいです！がんばって育てていこうという気持ちになります。 Ctrl と Tab を同じキーにまとめたら指の移動減るかな？とかモーソーもはかどるし、出来合いのキーボードと違ってそれをすぐに手元で試せるのが最高です。

Karabiner (Mac) や AutoHotKey, レジストリ書き換え (Windows) と違って、ハード側でキーマップを入れ替えられるのがとても良いです。ちょっとしたプログラムもかけるので、キーボードマクロの記録・再生とか実装してみたいなーと思っています。以前 Windows のキーバインドをまるっと Emacs にする [EWOW](https://github.com/zk-phi/EWOW) というツールを作って、それこそ学部時代から今までずっと使ってきていたんですが、会社に入ったら PC が Mac で、ぜんぜん Emacs キーバインドが使えなくて厳しい思いをしました。いつかどうにかして移植したいなあとか思っていたんですが、ハード側に実装すれば全部解決っぽい感じがしなくもないです（やってみないとわかんないけど）。

一方で、格子配列とかキー数の少なさは、いかんせんなかなか慣れなくてタイプミスも多いしまだまだ厳しい感じです。 `yyyy/mm/dd hh:MM` みたいな記号数字混じりの文字列とかは打つのに結構頭使うし、あとはアルファベットでも Z, X, C あたりの左下のキーはタイプミスが目立ちます。まして自分は、普通のキーボードを打つ時ですら数字とか記号の位置がわかんなくなってしまって刻印をチラ見してしまう人なので、刻印どころかそもそも専用のキーすらないのはなかなか大変です。が、一応組んだ翌日から実戦投入して練習＆カスタマイズしている感じなので、いきなりでもギリギリ仕事になるくらいには使えます。

# おまけ: キーマップのカスタマイズ

Ergo42 のキーマップは `qmk_firmware/keyboards/ergo42/keymaps/default/keymap.c` で変更できます。変更したら、例によって

```sh
make ergo42/rev1:default:avrdude
```

でマイコンに書き込めば ok です。バイナリの容量が大きくなりすぎると、マイコンが壊れるみたいな話を見たことがあるので、ガッツリコードを追加する場合は注意が必要かもしれません。

自分の今のキーマップはこんな感じになっています。

```c
/* BASE
 * ,------------------------------------------------.   ,------------------------------------------------.
 * |   `  |   Q  |   W  |   E  |   R  |   T  |  Y   |   |  T   |   Y  |   U  |   I  |   O  |   P  |  -   |
 * |------+------+------+------+------+------+------|   |-------------+------+------+------+------+------|
 * | Tab/ |   A  |   S  |   D  |   F  |   G  |  [   |   |  ]   |   H  |   J  |   K  |   L  |   ;  |  :   |
 * | Ctrl |      |      |      |      |      |      |   |      |      |      |      |      |      |      |
 * |------+------+------+------+------+------+------|   |------|------+------+------+------+------+------|
 * | Sft  |   Z  |   X  |   C  |   V  |   B  |  N   |   |  B   |   N  |   M  |   ,  |   .  |   /  |  \   |
 * |------+------+------+------+------+------+------|   |------+------+------+------+------+------+------|
 * |PrtSc | App  | GUI  | Alt  |Lang2 |Space |ESC/  |   |BS/   |Enter |Lang1 | Left | Down |  Up  |Right |
 * |      |      |      |      |      |      |~SYMB |   |~META |      |      |      |      |      |      |
 * `------------------------------------------------'   `------------------------------------------------'
 */

[BASE] = KEYMAP( \
  KC_JYEN,        KC_Q,   KC_W,    KC_E,    KC_R,     KC_T,   KC_Y,             /**/ KC_T,              KC_Y,   KC_U,     KC_I,    KC_O,    KC_P,    KC_MINS, \
  LCTL_T(KC_TAB), KC_A,   KC_S,    KC_D,    KC_F,     KC_G,   KC_LBRC,          /**/ KC_RBRC,           KC_H,   KC_J,     KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
  KC_LSFT,        KC_Z,   KC_X,    KC_C,    KC_V,     KC_B,   KC_N,             /**/ KC_B,              KC_N,   KC_M,     KC_COMM, KC_DOT,  KC_SLSH, KC_BSLASH, \
  KC_PSCR,        KC_APP, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, LT(SYMB, KC_ESC), /**/ LT(META, KC_BSPC), KC_ENT, KC_LANG1, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT \
),
```

- `KC_XXX` ... 普通のキー入力
- `LT(LAYER, KC_XXX)` ... 単品で押すとキー入力、長押しするとレイヤー切り替え
- `XXX_T(KC_YYY)` ... 単品で押すとキー入力、長押しすると修飾キー

Lang2 と Alt 合体したいなあとか。まだまだ色々試したいです。