さいきん一部の界隈でアツい自作キーボード。人間とコンピューターの境界で重要な役目を果たしているキーボードの自作なんて楽しいに決まってる!ということで、未経験者がはじめて自作キーボード「Orthodox」の制作に奮闘した記録(build log: ビルドログ)です。同じ境遇の人の助けになれば。
自作キーボードが流行っているという噂は何となく聞いていたものの、MacBookのキーボードに満足していた自分には縁遠い話だと思っていました。そんな日常が、この写真を見て一変します。
えっ…かわえええ?!!!キーボードって綺麗に整列するだけで、こんなにもかわいらしくなるものなんだ…尊い…。
「Ortholinear」というのが、この綺麗に配置されたキーボードの総称のようです。キーボードのキーは少しずつずれているものだという先入観があったので、これを知ったときの衝撃はかなりのものでした。
自作キーボードの世界はとても広くて、その種類は星の数ほどあるうえに、どんどん新作が生み出されています。たいていは個人かそれに近い規模で開発されており、共同購入(GB: Group Buy)、つまり「人が集まったら一気に調達・まとめて購入するけど、集まらなかったら解散!」という形式で参加者を募っていることが多いです。
今回は、オフィスで同じフロアの花村さん(自作キーボードの師匠!)からお誘いをいただき「Orthodox」というキーボードの共同購入に参加。はじめて自作キーボードの世界に足を踏み入れることになったのです。
「Orthodox」は、上3段のOrtholinearな配列に加え、親指部分に5つのキーが斜めに配置されている少々変わり種のキーボード。
格子感はやや薄まるものの、親指部分の異質感もそれはそれで愛らしい。不定期に開催される共同購入を外野から眺めているだけでは一生縁なしだ!と思い購入を決意しました。
(このOrthodox、はじめての自作キーボードには正直不向きで、のちのち大いに苦しむことになるのです…)
すべての土台となるプリント基板は「PCB (Print Circuit Board)」と呼ばれています。基板だけ購入できるモデルもありますが、ダイオードなど他の部品をすべて自前で調達する必要があるので玄人向け。未経験者は大人しく、もろもろの部品がセットになったものを購入しました。現在はこちらのサイトから購入できるようです。
先の購入ページで「Switch Type」と書かれているのは、各キーの土台となるスイッチの種類のこと。「Gateron」はメーカー名で、色は軸の種類を表しています。軸には押すときの重さやクリック音のあり/なしなど、さまざまなパラメーターが存在します。詳細なスペックについては他にまとめているサイトがたくさんありますので、検索してみるとよいでしょう。
仕様は頭で理解できても、触ったことのないスイッチの感触などわかるはずもなく、どれを選べばよいのか判断しかねるのが困りもの。スイッチは基板にはんだづけしてしまうのでチャンスは一度きり。後からの交換はできないと考えたほうがよいでしょう。
それではどうすればよいかというと、周囲のキーボード沼の住人に現物を触らせてもらうか、いろいろな軸を試せる「Switch Tester」なるキットが各所で売られているので購入して確かめるか、あるいは賭けてえいやで注文するか。自分は師匠にテスターを触らせてもらった結果「やっぱりわからん」と感じ、もっとも一般的と言われる茶軸を無難に選択しました。
キーボードの指が触れる部分を「キーキャップ」と呼びます。キーキャップは目立つゆえに個性の出しどころであり、その種類も豊富です。別途自由に選んでくださいねという意図(たぶん)で、セットに含まれていないことも多いです。
キーキャップを安定供給しているサービスはそれほど多く存在しません。有名どころの「Pimpmykeyboard」あたりを利用して、お気に入りのキーキャップを探してみるのがよいでしょう。
さて、ここで気をつけなければならないのは2点です。
Pimpmykeyboardでキーキャップを見ていると、「DSA」「SA」「DCS」など謎の接頭辞がついてることに気づきます。これらはキーの形状を表していまして、段ごとのキートップの高さや傾きなどの形状が異なります。こちらのページでとてもわかりやすく解説されています。
今回はすべてのキーが均一に並んでいてほしいので、「DSA」のついているものを選べばよいわけです。
さらに、一般的なキーボードにあるような横長のキー(「1.25 space」のように呼ばれます)は不要なので、なるべくそういったキーが含まれていないセットを選びたいところです。
ものによっては「Ortholinear Kit」のような切り口で、正方形キーを中心にセットを組んでくれていることもありますので、ありがたく利用していきましょう。自分が今回購入したのは「DSA “QUARTZ” KEYSET」でした。
送料も輸送時間も結構かかりますので、誰かと共同か大人買いするのがよいでしょう。また、多様なキーマップ楽しむためにも、汎用的なキー(記号系や無刻印)を多めに確保しておくのがおすすめです。
もうひとつ、キーキャップとの出会いは一期一会です。画像検索で見つけたカッコイイあれもこれも、もう世に出ていない…なんてことはよくある話。ビビッとくるものに出会ったら、迷わず購入しておくことをおすすめします。
さて、部品が揃ったらいよいよ組み立てです。…なのですが、ここでいきなり大きな問題が。
「Orthodoxにはまともな説明書がない!!」
どうやらこのOrthodox、左右分離型の自作キーボードで有名な「Let’s Split」というモデルと共通している工程が多いということで、公式の組み立てガイドが存在しないようなのです。なんてこった…!中上級者にとっては些細な問題かもしれませんが、右も左もわからない初学者にとっては致命的です。
この点が、はじめての自作キーボードにOrthodoxをおすすめしない理由のひとつであり、自分がこうして詳細なビルドログを残そうと決めた理由でもあります。
制作にあたり、参考にした文献を記しておきます。
基板は左右とも共通ですので、左右で鏡写しになるように面を使っていきましょう。まずは基板の D##
(##
は数値)が印字された部分に、ダイオードをはんだづけしていきます。
ダイオードには極性があるので注意が必要です。黒い側が四角い穴の側になるように念入りに。後半でケースの取りつけがかなりシビアになるので、はんだは控えめにギリギリをカットします。
左右のキーボードを接続するイヤホンジャックのような端子の受け口です。ダイオードと同じ側にはんだづけしましょう。
手前の三角形が並んだVCCとGNDも接続しておきます。
お次は、USB入力を司るPro Microの土台となるヘッダーピンです。ダイオードと同じ側にPro Microを配置するので、長い側(黒いプラがついている側)をダイオード側に向け、裏の短い側をはんだづけしましょう。
Pro Microは左右で裏表逆に配置するのですが、右手側はPro Microの部品で凸凹している側がキーボード底面になるため、このままはんだづけするとケースに収まらなくなってしまいます。右手側だけ、下の写真のように黒いプラを除去しておきましょう。(この作業がまたやっかいで、ペンチとニッパーを駆使して何とか外しました。何かよい道具でもあるんだろか…?)
上の写真に写り込んでいますが、基板に PRO MICRO
と印字された4 * 2のペアもはんだづけしておきましょう。(反対側には TEENSY
と書いてあって、別のパーツを使うときはそちらをはんだづけするようです)
⚠️ここが一番注意すべきステップです!!Pro Microの裏側には、スイッチを取りつける場所が2つあります。Pro Microを取りつける前に、ケースの上面を挟みこんでからスイッチ2つをはんだづけしてください。
ケースの上面を挟み忘れたり、裏面スイッチのはんだづけを忘れたままPro Microをはんだづけしてしまうと、すべてのはんだを外さねばならないという最高の地獄をみることになります。(ちなみに自分は両方経験しました。電子工作向いてないのでは…?)
スイッチはぐいぐいと力を入れて、底面が基板につくまでねじ込みます。ここが甘いとケースが浮いてしまうので気をつけましょう。Pro Microの裏側が終わったら、残りのスイッチについてもはんだづけしていきます。
ここまで来たら、次はいよいよPro Microです!左右裏表を間違えないよう気をつけながらはんだづけします。左手側のPro Microは裏向きでつるつるですが、はんだの盛りが高いとケースに当たってしまうので、はんだづけする前に足を切っておきましょう。
以上ではんだづけはおしまいです!ここからは、Pro Microにキーマップを書き込んでいきます。
「qmk/qmk_firmware」にOrthodoxをはじめとする自作キーボード群のファームウェアがありますので、この資産をありがたく利用していきましょう。
ビルドの環境を整えましょう。自分が使っているのはmacOSですから、該当するセクションを参考に必要なパッケージ群をインストールします。そこそこ時間がかかるので気長に待ちましょう。
% brew tap osx-cross/avr
% brew tap PX4/homebrew-px4
% brew update
% brew install avr-gcc@7 dfu-programmer gcc-arm-none-eabi avrdude
環境構築が終わったらいよいよ書き込みです。Orthodoxの手順はkeyboards/orthodox下にあるので、ここを読みながら進めていきます。
まずはデフォルトのキーマップをビルドしてみましょう。今回制作しているのはOrthodoxの「rev 3.14」なので、readmeに記載されているコマンドとはrevの数字が異なる点に注意が必要です。
% cd qmk_firmware
% make orthodox/rev3:default
QMK Firmware 0.6.60
WARNING:
Some git sub-modules are out of date or modified, please consider runnning:
make git-submodule
You can ignore this warning if you are not compiling any ChibiOS keyboards,
or if you have modified the ChibiOS libraries yourself.
Making orthodox/rev3 with keymap default
avr-gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: keyboards/orthodox/matrix.c [OK]
Compiling: keyboards/orthodox/i2c.c [OK]
(中略)
Compiling: lib/lufa/LUFA/Drivers/USB/Core/USBTask.c [OK]
Linking: .build/orthodox_rev3_default.elf [OK]
Creating load file for flashing: .build/orthodox_rev3_default.hex [OK]
Copying orthodox_rev3_default.hex to qmk_firmware folder [OK]
Checking file size of orthodox_rev3_default.hex [OK]
* File size is fine - 18918/28672
エラーなく完了したら、お楽しみの書き込みタイムです!左右のキーボード同士はまだ接続せずに、片側ずつコンピューターに接続して進めていきます。
左右いずれかのPro Microを接続した状態で、以下のコマンドを実行して書き込みを実行しましょう。
% make orthodox/rev3:default:avrdude
qmk_firmware% make orthodox/rev3:default:avrdude
QMK Firmware 0.6.60
WARNING:
Some git sub-modules are out of date or modified, please consider runnning:
make git-submodule
You can ignore this warning if you are not compiling any ChibiOS keyboards,
or if you have modified the ChibiOS libraries yourself.
Making orthodox/rev3 with keymap default and target avrdude
avr-gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
text data bss dec hex filename
0 18918 0 18918 49e6 ./.build/orthodox_rev3_default.hex
Compiling: ./tmk_core/common/command.c [OK]
Linking: .build/orthodox_rev3_default.elf [OK]
Creating load file for flashing: .build/orthodox_rev3_default.hex [OK]
Checking file size of orthodox_rev3_default.hex [OK]
* File size is fine - 18918/28672
Copying orthodox_rev3_default.hex to qmk_firmware folder [OK]
Detecting USB port, reset your controller now...........
待機状態に入ったあと、ここで待っているだけではいつまで経っても先に進みません…。よくよく調べてみると、このタイミングでPro Microの GND
と RST
を一瞬だけ、物理的にショートさせてあげる必要があり、このユーザーの作業を待っている状態なのでした。ジャンパー線などでちょいとつないであげれば、あとは自動的に認識して書き込みに進んでくれます。
途中、OS側で新しいキーボードを検出した旨のダイアログが表示されますが、特に操作せず無視して問題なかったようです。
左右のPro Microに対して書き込みが完了すれば、これで晴れてキーボードとして動作するようになりました!!ヤホーーーイ!!
ああ…本当に動いている…!本筋ではないのでこの記事では書きませんが、何度も大きな失敗を重ねてしまい、一時は諦め半泣きでごみ袋に包んだキーボード。周囲の支えのおかげでようやく辿りついた、自分で作ったものが動くというこの感動…!なんて素晴らしいのだろう。泣ける。
ここまでの手順で最低限キーボードとしては使えるようになりましたが、キーマップを手に馴染むように調整していくのも醍醐味のひとつですよね。
まずは keyboards/orthodox/default
に置かれたデフォルトのキーマップを、ディレクトリごと複製します。ディレクトリ名がそのまま自分のマッピングの名前になりますので、ここでは cocopon
としました。
あとは中身の keymap.c
を編集すればOKです。難解なコードだったらどうしよう…と心配しながら開きましたが、一目見れば構造が理解できる親切なものでした。
キーマップの編集が終わったら、再び左右のPro Microに書き込みます。キーマップの名称が default
ではなく独自のもの(ここでは cocopon
)になっているので、そこだけ気をつけてくださいね。
% make orthodox/rev3:cocopon:avrdude
ちなみに、キーキャップを手で外すのはとても難しいです。変な力をかけて壊してしまいそうで怖い…。素直に工具を買うのがよいと感じたのでこちらを購入しました。
これがキーボード沼か…ズブズブ…。
どんなにうまいこと組み立てても、ケースとTRRSジャックが干渉してうまく収まらない予感がしています。(設計の問題なのでは…?)
ここは大人しく、ケースの側をやすりで削る必要がありそうです。(やすりを持っていないため未実施。買わねば)
その後、ブログやコードを書く過程で調整を重ねていきながら、現在はこのような形に落ち着きました。
さりげないVim愛を散りばめてみました。自分の手で苦労して作り上げた、自分だけのキーボード…めちゃくちゃ愛おしい!!
以上、未経験者が自作キーボード「Orthodox」を組み立てた記録でした。自作キーボードはいいぞ…。
よかった😭🎉 ちなみにPro Micro触らなくてもRESETってキーコードでリセットできます(自分はAdjustのZに割り当ててる)。Helixとかはリセットスイッチ付いてて便利… https://t.co/W3Km8Eeg9Phttps://t.co/wTNXBSIp3F
— - (@hanamura) July 17, 2018
keymap.c
のキーコードで RESET
を割り当てておくと、押したときにショートさせるのと同じ効果が得られます。デフォルトでは ADJUST
レイヤー(LOWERとRAISEを同時押しすると使えるレイヤー)上の微妙な位置に割り当てられているので、使いやすい位置に移動しておくとよいでしょう。
これで安心してケースのネジを締めることができました。
ずっと見て見ぬ振りをしていたのですが()、噂どおりスレーブ側、つまりUSBケーブルを直接繋いでいない右側の入力を取りこぼす状態が続いていました。花村さんのビルドログを参考に、I2C用の抵抗を右手側にはんだづけ、 I2C
と書かれたジャンパーも左右それぞれ接続して解決しました。すっきり!
キーマップと同じディレクトリにある config.h
もI2C用に変更して再書き込みしましょう。
/* Use I2C or Serial, not both */
// #define USE_SERIAL
#define USE_I2C