Ergo42 というキーボードを自作した

学部時代、研究室で雑談しているときに自転車の話になって、バーハンドルとドロップハンドルのどちらがよいかという話になったときに先輩が「人間の腕はこうついてるんだよ、こうじゃないんだよ」といって前ならえのポーズをして主張したことがあった。確かに前腕を前に出したときに、手のひらを前にむけて指を上にむけるよりも、前ならえの格好のように手のひらを内側に向けて指を前に向けた方が人間の骨格や筋肉がより自然な状態に近くなり、緊張している部分が少ないことがわかる。健康のためには、なるべく自然な姿勢でいなければならない。というわけでセパレート型のキーボードを自分で組んで職場で使っている。自作PCくらい簡単だった。


背景

わたしのようなデスクワーカーはキーボードにタイプをするのが仕事の一部なわけで、一日のうち少なくない時間をこれに費やしている。
Community Blog - 握力王 vs 日本男児 ヘルシーすぎるプログラマ対談(Part2) でも述べられているように、上半身の健康のためには人間の身体がなるべく自然な状態でキーボードを使えるようにするために、人類はセパレート型のキーボードを使うべきである。ちょっと誇張したかもしれない。実際私は既にKinesisユーザーであったが、卓上でスペースをとりすぎる、幅が固定されているなどの問題があって、次はErgoDox-ezを使った。Ergodox-ezにしてよかったのは、幅や位置を自由にできる、卓上のスペースを少し節約できる、キーボード配列をファームウェアレベルで変更できるということだ。特に配列を自由に組めるというのはとても便利で、OSの設定を変更しなくてよいとか、どのマシンにつないでもすぐ使えるというメリットがあって、我々のようにたまにマシンを複数台使い分けるようなケースでこれが以外と便利なのだ。それでKinesisっぽい配列を自分で作ってしばらく職場で便利に使っていた。

/* Keymap 0: Basic layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |   =    |   1  |   2  |   3  |   4  |   5  | Esc  |           | Meh  |   6  |   7  |   8  |   9  |   0  |   -_   |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * | Tab    |   Q  |   W  |   E  |   R  |   T  | Alt  |           | L1   |   Y  |   U  |   I  |   O  |   P  |   \|   |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * | LCtrl  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;:  | '"     |
 * |--------+------+------+------+------+------| Alt  |           | L2   |------+------+------+------+------+--------|
 * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |  /   | RShift |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | `~   |  \|  | Alt  | Left | Right|                                       |  Up  | Down |   [  |   ]  | Alt  |
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,--------------.
 *                                        | Ctrl | Alt  |       | Cmd  |Ctrl   |
 *                                 ,------|------|------|       |------+-------+------.
 *                                 |      |      | Home |       | PgUp |       |      |
 *                                 | BS   | Del  |------|       |------| Enter |Space |
 *                                 |      |      | End  |       | PgDn |       |      |
 *                                 `--------------------'       `----------------------'
 */

とくにこの配列で気を付けたのは、Emacsenは小指が命、小指でCtrlを押すように出来上がってしまっているので、この配列が変わってしまうと生産性が 1/10 になってしまうことだ。そういうわけでしばらく既製品のErgoDoxで満足していて、キーボード自作ブームとは少し距離をおいていた。

…しかし、やっぱり机を広く使いたかった。

とりあえず何か作ってみる

自分はミニマリストではないので、MiniDoxとかPlanckにはあまり惹かれなかった。キー数が少ないとレイヤーを切り替えながら使うことになるのだが、キーボードを小さくするのにキーストローク数が増えてはかえって効率が落ちて本末転倒だと考えたからだ。なのでErgoDoxと似たような配列でサイズが小さくなった感じのIrisを…と思ったら在庫切れていた。で、岡本さんに教えてもらったErgo42も勢いでとりあえずポチった。 当時のEarly Birdで rev1 を買った。今は入手方法は違うかもしれないが、PCBの設計はGitHubで公開されているので、いざとなれば自分でメーカーに注文して焼いてもらうこともできるだろう。調べたら今は5枚から安く作れるようになっているようだ。先輩方に教えてもらいながらAliExpressでパーツを大量に買いまくった。失敗してもいいように、必要量の2倍くらい買った。それでもAliExpressは安くて、秋葉原や日本の通販サイトで買うよりもかなりやすい。

  • TRRSジャック( PJ320A headphone jack)
  • TRRSケーブル
  • キースイッチ
  • キーキャップ
  • 1N4148ダイオード
  • Pro Micro
  • タクタイルスイッチ

ネジとかケースはErgo42もIrisもPCBに付属しているので、とりあえずそれでよい。理想の形を追求するときはまた考えるけど…さすがに香港シンガポール深圳からエアメールで届くので時間はかかる。早いもので2週間、長いやつで3週間ちょいくらいだったかな。

半田セットも、小学生のときに使ってたものを去年か今年捨ててしまったばかりだったので、改めて買い直した。面倒なのでこのあたりは全部HAKKOで揃えた。高温になる部品だし信頼性を優先して国産でちゃんとしたものを yodobashi.com で買い揃えた。

あとは半田吸いがあると、失敗した半田をやり直すのに役に立つ。テスターは適当に秋葉原でダイオードチェックができるやつを買った。

実際に組む

本家のREADMEはキーボード組むのに慣れている人には十分だが、初心者には難しいので、写真つきで詳しい解説のある
自作キーボード (Ergo42) を組み立てた - Qiita を参考にするのがよいだろう。というか、組むことが目的ならこの記事を見るだけでよくて、以下の私の文章は特に読む必要はない。しかしErgo42だけでなく、半田づけとかキーボードづくりのノリを学ぶために他のキーボード自作の記録をネット上でよく見ておくとよいと思う。手順はそんなに複雑ではないけど、ここでも私の理解を並べておこう。

1. ダイオードをさす

こんな感じで、全部さしておく。曲げるのは本当はリードベンダー( サンハヤト リードベンダー RB-5 リード線、部品の簡易折り曲げ器 )を使った方がよいが、まあ手で曲げても疲れるのと不格好なのを我慢できれば問題ない。このときダイオードの向きを間違えると動作しないので注意。

これをひとつずつ半田づけして、余ったワイヤーをニッパーで丹念に切っていく。だるい。これで徐々に半田に慣れておくと、ロジックボードやタクタイルスイッチ、TRRSジャックなどのちょっと難しい半田づけもやりやすくなるだろう。基本的には、付け根をぐっと小手先で抑えて熱しながら半田線を当てると、ある温度になった瞬間に半田が接合面にシュッと吸い込まれているので、その瞬間を逃さずに半田線をパッと離す。ダラダラ半田線をつけているとどんどん溶解してダマになってしまう。小手を離すのが早いと半田線が接合面についたまま冷えてしまって半田線がとれなくなってしまう(それを離すためにまた小手で加熱すると不要な半田が接着部に流れ込んでダマになる)。

自信のない人や、はんだ付けが初めての人は先にプロの解説講座を一通り読むことを強くすすめる。脳内でシミュレーションしたり、別のボードを買って練習しておけば絶対に私よりも上手にできるようになっていることだろう。私は子供時代にはんだ付けしたことがあったという謎の自信だけがあり、時間が勿体なかったのでざっとナナメ読みだけして半田セットの機器選定だけ参考にした。

ダイオードを全部さしたら、テスターでダイオードの動作確認をきちんとやっておこう。ダイオードは片方向にだけ電流を流すことができて、反対方向には電流が一切流れない電子部品である。ダイオードモードのあるテスターを買っておくことが望ましいが、そうでなければ抵抗測定で代用してもいいだろう。とりあえず全部のダイオードがショートしていないこと、接着面が導通していることを確認しよう。

テスターのダイオード測定モードは電流を少し流して雑に測るもののようで、このあとの導通テストも全部ダイオード測定モードでやってしまえるくらい万能である。ダイオード測定モードのついているテスターを必ず買おう。ボタン電池で動くやつがコンパクトでいいと思う。こういうやつ。

2. 他の電子部品をはんだ付けする

タクタイルスイッチ、TRRSジャック、Pro Micro。Pro Microは表裏を間違えずにやること。Pro Microの足が多く間隔が狭いので、ここがショートしてしまうとあとで動かなくなる。接着に成功したら、タクタイルスイッチとTRRSジャックの導通はこの時点で確認しておこう。タクタイルスイッチはボタンを押している間だけ導通する。TRRSジャックは、ケーブルをつないで、左右のそれぞれの電極「だけ」が導通していることをチェックしよう。

3. キースイッチをつける

安物のキースイッチだと信頼性に不安があるので、キースイッチを全部フレームにはめた時点で導通を確認しよう。キースイッチは、キーを押している間だけ導通していること、キーを押してないときは絶縁していることを確認する。それをPCBにはめる。PCBの穴にキースイッチがはまると仮止めになるので、あとは順にはんだ付けしている。はんだ付けが終わったら、接着面をテスターで抑えながらキースイッチを押して導通を確認しよう。キースイッチを押しても導通しない場合ははんだ付けに失敗しているか、キースイッチが不良品のどちらかのケースだ。

私の場合は、フレームをはめるのを忘れて、キースイッチを直接PCBにはめ込んで全キーはんだ付けした後にフレームをつけるのを失念していたことに気付いた(というか、ドキュメントなどをろくに読まなかったのでフレームを先につけないといけないことを知らなかった)ので、一旦PCBにはんだ付けしたキースイッチを全て外してから(一つずつ半田を熱して引っ張ってとるという危険な作業)、改めてフレーム越しに半田づけするという残念でアホな失敗をとりかえす作業で3時間以上ロスをした。この過程でキースイッチが5,6個ダメになったのだが、それに気づけたのは、適当なタイミングでテスターを使ってテストをまめに繰り返していたからだ。

キースイッチがついた時点で、物理的な配線は全て完了している。本格的にネジなどで組み立てる前にこの時点で各種テストを行っておくののがよい。

4. 回路テスト

テスターでの導通テストはここまでで一通り済んでいるはずなので、ここではパソコンにつないでキーを使えることをテストする。片側だけでいいので、 Pro Micro をパソコンに接続して、ファームウェアをインストールする。(Macであれば port install avrdude などとしてQMK用の環境を整えておこう)

$ git clone git://github.com/qmk/qmk_firmware
$ cd qmk_firmware
$ make ergo42/rev1:default:avrdude

Linuxの場合は最後のMakeはroot権限が必要になるだろう。クロスコンパイル環境やavrdude が入っていれば、この時点で ...... という入力待ちになるので、タクタイルスイッチをポチッとするとファームウェアの書き込みが行われる。

ファームウェアの書き込みが終わったらUSBキーボードとして使える状態になっているので、ひとつひとつのキーを全部押して動作確認をする。デフォルトの配列はソースコードに次のように書かれている。

/* BASE
 * ,------------------------------------------------.   ,------------------------------------------------.
 * | ESC  | Tab  |   Q  |   W  |   E  |   R  |  T   |   |  Y   |   U  |   I  |   O  |   P  |   [  | Bksp |
 * |------+------+------+------+------+------+------|   |-------------+------+------+------+------+------|
 * | Del  | RCtrl|   A  |   S  |   D  |   F  |  G   |   |  H   |   J  |   K  |   L  |   ;  |   ]  | Enter|
 * |------+------+------+------+------+------+------|   |------|------+------+------+------+------+------|
 * | SYMB | LSft |   Z  |   X  |   C  |   V  |  B   |   |  N   |   M  |   ,  |   .  |   /  |  UP  | RSft |
 * |------+------+------+------+------+------+------|   |------+------+------+------+------+------+------|
 * | META | LCtrl|   `  |   \  | LAlt | LGUI |Space |   |Space |   '  |   -  |   =  | LEFT | DOWN | RIGHT|
 * `------------------------------------------------'   `------------------------------------------------'
 */

右側のPro Microを挿したときも同様にファームウェアを書き込む。このとき、配列は右側のそれではなく左側の裏返しのようになるので注意すること。

これで正常動作しないキーがあったら、そこのはんだ付けかパーツがおかしいことがほとんどなので、それを再度確認して戻って直す。ほとんどないと思うがPCBが万が一破損していたら別のPCBでやり直すしかないだろう。

再確認できたら、左側のPro Microをパソコンに接続して、TRRSケーブルで左右をつないで全キーの動作確認する。左右の確認がそれぞれできていたら、全体の大抵は動く、はず…。ちなみに私がやったときはここまで何度の手戻りして、ここまでで午前5時くらいだったはず。平日にやるもんじゃない。

5. フレームなどを整えてキーキャップをさす

ここはまあTrivialといえばTrivialだし、楽しいといえば楽しいところ。予め買っておいたキーキャップを淡々とはめていく。


6. キーボード配列を考えて実装する

ErgoDoxから 4x7 の配列になってキー数が大幅に減ってとても困っていてここはわりと悩んだ。悩んでいまのところこういう配列になった。

/* BASE
 * ,------------------------------------------------.          ,------------------------------------------------.
 * | ESC  | Tab  |   Q  |   W  |   E  |   R  |  T   |          |  Y   |   U  |   I  |   O  |   P  |   [  |  ]   |
 * |------+------+------+------+------+------+------|          |-------------+------+------+------+------+------|
 * | LCtrl| LCtrl|   A  |   S  |   D  |   F  |  G   |          |  H   |   J  |   K  |   L  |   ;  |   '  |  \   |
 * |------+------+------+------+------+------+------|          |------|------+------+------+------+------+------|
 * | LSft | LSft |   Z  |   X  |   C  |   V  |  B   |          |  N   |   M  |   ,  |   .  |   /  | RSft |      |
 * |------+------+------+------+------+------+------|          |------+------+------+------+------+------+------|
 * | META |      |      | LGUI | LAlt | Bksp |Space |          |Space | Entr |      |                    | SYMB |
 * `------------------------------------------------'          `------------------------------------------------'
 */

METAを押している間レイヤーが切り替わって、最上段で数字を打ち込めるようになる。またSYMBを押している間は最上段+Shiftを押した状態をイメージして、各種記号を打てるようになる。ちなみにこれは読みやすくしたソースコードのコメントなので、本体このコメント直下のマクロを並べたものである。このコメントだけ書き換えて下のマクロを直し忘れて、いざファームを書いても反映されない…?ということがよくあるので、注意するとよい。

で、これはデフォルトとは違う配列なので、改めて standard という適当な名前のディレクトリをコピーで作って、それにあわせて次のようにビルドして書き込む。

$ make ergo42/rev1:standard:avrdude

最後の :avrdude をとるとファームウェアをビルドするだけになるので、Linuxだとルート権限がいらなくなる。

というわけで、できあがり。最初はちょっと違った配列だったのだけど、職場でもちょいちょい配列を組み直したりして業務改善して上記の配列になった。今は冒頭の写真とはちょっと違ったキーキャップがささっていて、自分で油性ペンで適当に "[] \ ⬆" などの記号を書き足したりしてある。

おまけ

Ergo42パーツが全部揃って、さあやるかといったときにIrisのPCBも届いて大変なことになっているけど、またやろう。ロープロファイルを作りたい。Kalihの キースイッチはAliExpressにあるんだけど、果たしてこれはOKなやつなんだろうかとか、キーキャップたけえなあ ( Kailh Low Profile Keycaps - Blank – NovelKeys, LLC , Kailhロープロ無刻印キーキャップ | 遊舎工房 SHOP )… ってなってる。