ミームの死骸を待ちながら

We are built as gene machines and cultured as meme machines, but we have the power to turn against our creators. We, alone on earth, can rebel against the tyranny of the selfish replicators. - Richard Dawkins "Selfish Gene"

We are built as gene machines and cultured as meme machines, but we have the power to turn against our creators.
We, alone on earth, can rebel against the tyranny of the selfish replicators.
- Richard Dawkins "Selfish Gene"

パーツ買い集めてキーボード (Ergodox) 組み立てるのがめっちゃ楽しい話

先月 Ergodox を組み立てたのだけど,プリント基板を発注したりはんだ付けしたりと,なかなか楽しい体験だったので記録を残そうと思う.

f:id:Hash:20191224180445j:plain
キースイッチはんだ付け作業途中の図

先にでぃすくれいまー書いとくと,自作キーボードのガチ勢な方々は基板設計から始まるっぽい*1から,僕がやった「パーツ買い集めて組み立てる」というムーブはプラモを説明書通りに作っただけで,エンジョイ勢レベルになると思う.技術的にすごいことをやっているわけではない.そこをご理解頂いた上でお読みください.

久々にブログ書くんで戯言欲を持て余し,クソ長く,いらん無駄話も入るけどまぁよかろ.

Ergodox ってなんじゃいな

Ergodox についての詳しい説明は省くが,僕が 2016 年頃から愛用している,オープンソースのセパーレト式メカニカルキーボードである.

f:id:Hash:20200103144457j:plain
こんなの

キーボードがオープンソースとはどういうことかと言うと,キーボードのプリント基板 (PCB) が GitHub に公開されていたり,マニュアル*2をもとに有志が組み立て手順をネットに上げていたり,キーボードファームウェアとしてこれもオープンソースqmk_firmware を採用していたり,みたいな.PCB にキースイッチを初め諸々のパーツをはんだ付けで接続していくことになるのだが,必要なパーツは秋葉原や通販で揃えることができて,あっちこっち探し回るのが RPG みたいでわくわくする.

ファームウェアは C 言語で書かれていて,自分好みにキーレイアウトをカスタマイズすることが出来る*3.僕のキーレイアウトは qmk_firmware を fork して自分のレポジトリに置いているのでよかったら見てみてください.QWERTY ベースなので基本フツーだけど.

f:id:Hash:20200103054255p:plain
僕の Ergodox キーボードレイアウト (layer #1)

見たとおりキーの数が多くて(片手 38 キー x 2 = 76 キー),特に親指周りが充実しているのが嬉しい.基本的に US キーボードレイアウトで使っているが,もちろんあらゆるキーボードと同様に Karabiner-Elements と組み合わせることで Mac 純正日本語キーボードのように左右親指で英数/かな切り替えを実現するなどの拡張も可能.そもそも qmk_firmware 上の定義だけでもわりと色々できてびっくりする.たとえば音量やマウス操作も特定キー組み合わせに割り当てることができるし,僕は Copy/Cut/Paste や Ctrl+F1 (Mac のアプリケーションウィンドウ切り替え) を親指ワンストロークで発行できるようにしている.

さらに Layer を切り替えることでレイアウトをがらっと変えることも出来る.僕は Layer #2 はメールを流し読みして削除フラグ立て等のアクションが片手でできるモード,Layer #3 は数値と記号だけのテンキー状態にしている.

ただ充実しすぎて,正直五段目のキーや親指島,多段レイヤーを 100% 活用しきれてないと思う.なんか面白いアイディアあったら教えてください.詳しい説明は省くとか言いながら割と語ってしまった.

Ergodox 組み立てに至る経緯

さて.Ergodox はオープンソース...だけど,僕は軟弱者なので,Ergodox EZ の組み立て済バージョンを購入して三年半ほど使っていた.三万円くらいしたけど毎日仕事に遊びに活用してきたから完全に減価償却済である.

それが昨年,ついに壊れた.というかキーがいくつかチャタリングを起こすようになってきて,僕が構造をよく理解しないまま,はんだ付けされたキーを外そうと基板を無駄に焼いて動かなくしてしまったので純然たる自爆であるとも言える.

で,軟弱者なので次の Ergodox EZ を購入した.旧 Ergodox EZ は基板だけがダメになってることが予想できたので,購入ついでに Ergodox EZ 販売元である ZSA Technology Labs に「基板だけって売ってないの」と聞いてみた.基板だけ買って復活させれば,自宅と会社,両方に Ergodox のある生活が送れるためだ.すると,

f:id:Hash:20200103063121p:plain
やさしい

返信で CEO Erez さんが直々に「オープンソースだから基板 manufacture すればよくね」とメールくれたので「確かに.そうするわ!」とお返事.Best of luck! :) とのこと.利益にならないのに親身になってくれてやさしい.

なるほど製造業者に基板を発注して新しいやつを入手しつつ,旧 Ergodox EZ を分解してケーブルやケースを流用すればいいだろう.他の人の組み立てブログを読んでケース結構高ぇなと思った記憶がある.他の電子部品はどうだろう? 理想的には基板だけ新しくして既存のパーツは旧 Ergodox EZ から desoldering して回収すれば動かなくもないと思う.でもきれいにはんだ付けを取り外せるスキルは無いし,せっかくだから電子部品は新しく買い集めて作ってみるか.

ようやく始まりである.

基板の発注

まずは何はともあれ PCB の発注.調べたところ,Ergodox の PCB 元データは確かに GitHub 上にあるが,どうやらガーバーファイルという形式で発注しなければならないらしい.そこで,KiCad をダウンロードして Ergodox PCB ファイルを開く.最初混乱したんだけど,面白いことに Ergodox は 1 枚の基板の両面がそれぞれ左手用と右手用になっている.だから,2 枚同じ基板を発注すればいい*4.セパーレト式キーボードだとよくあるのかな.

f:id:Hash:20200111043133p:plain
シンプルで美しい

で,これをガーバーファイル形式で出力する(参考: ガーバーファイルを出力する方法 – Feedback & Ideas for seeed).これでよし.

次に,発注.選んだ製造業者は,Speeed というところが運営する Fusion PCB なる基板製造サービス.個人利用の小規模スケールで基板作ってくれるサービスけっこうあるっぽい.

f:id:Hash:20200103061924p:plain
Fusion PCB 発注画面

これまた「ガーバーファイルたくさんあるんすけど... どれ渡せばいいんですか (´・ω・`)」とメールで担当者に泣き付きながら教えて頂き,無事発注完了.担当者は中国の方だったみたい.世界はやさしい.

以下のファイルを zip にまとめて web から基板製作を依頼.送料込みで $73.2 (=~ ¥7900) くらいかなぁ.

f:id:Hash:20200103154929p:plain
Ergodox 基板製造に必要なガーバーファイル

人生をやっていると,確か一週間くらいで中国から基板が届く.結構速い.

f:id:Hash:20200103064125p:plain
片面が左手用,裏返すと右手用

ちなみに発注後,実はガーバーファイルも GitHub レポジトリに存在することに気が付いたので KiCad のくだりは完全に無駄足であった.でもまぁ基板設計 CAD いじくり回すとかいい経験だろう.KiCad 回路図のネットワーク配線情報が一部 S 式? で書かれているようで脳の配線がバグる.

f:id:Hash:20200103064906p:plain
KiCad 回路図定義における S 式らしきもの

なお本件は総じてこのような無駄足による経験が積めて最高だった.仕事だと,なかなか知識欲ドリブンの無駄な遠回りを楽しめない.

パーツを揃える

Ergodox 基板をゲットしたので,その上にはんだ付けしていくパーツを揃える.公式サイトによると全パーツリストは以下の通り.

f:id:Hash:20200103124726p:plain
知らん単語ばかりでググりまくった

整理する.

個数 値段小計 英語名 解釈 入手場所
1 ¥7900 Pair of pcbs (one for each hand) PCB 基板 1 組(左右の手で計 2 枚).先の段落で発注したやつ Fusion PCB にて最小発注枚数の 5 枚で注文
1 ¥1200 Teensy USB Board, Version 2.0 Teensy なる USB マイコン Teensy 2.0 USB Keyboard Mouse AVR for arduino ISP Board - AliExpress からゲット
24 ¥0 Teensy header pins, male (unless pre-installed) Teensy を基板から浮かせる形で指すトゲトゲしたやつ ↑で Teensy 2.0 買ったら付いてた
1 ¥635 MCP23018-E/SP I/O expander 最大 16 本の I/O を I2C プロトコルを使って 2 本で読み書きできるようにしてくれる IC I/O EXPANDER I2C 16B 28SDIP MCP23018-E/SP - マルツオンライン *5
76 ¥8500 Cherry MX switches 各キーに一個一個つけるキースイッチ*6.好みは無数だけど僕は Cherry 赤軸を選択 10ケセット Cherry MXキースイッチ(赤軸) メカニカル押しボタンスイッチ ジェイダブルシステム を 8 個注文
76 ¥200 1N4148 diodes, SOD-123 package (Surface mount) or DO-35,(0.3” pitch) (through hole) 76 個のダイオードを全キーにちまちまと付ける.ダイオードは電流を一方向にしか流さない.最初にエンドレスはんだ付けで心を折ってくる 秋月電子で 50 個セットのを 2 パック
2 ¥100 2.2k Ω resistors (red, red, red) 抵抗.そうそう抵抗値によって線の色が違うんだった.中学の授業でやったな 秋月電子で最小単位 100 本
3 ¥0 3mm T1 LEDs これ結局買ってない.なんか基板上に付ける場所なくない? USB 挿した時に光らせる部分だと思う --
3 ¥100 220 Ω resistors, or match to LED. (red, red, brown) ↑の 2.2k とは違う 220 抵抗.線の色が赤・赤・茶だ 秋月電子で最小単位 100 本
5 ¥0 Short jumpers (You can also use the clipped off legs from your resistors) これなんだかよくわからずに秋月で「ジャンパワイヤ」みたいなの買っちゃったんだけど,不要だった.抵抗はんだ付けして切り取ったゴミ...じゃなくて足部分を使えば OK --
1 ¥100 0.1 µF ceramic capacitor (marked “104” for 10*104 picofarad) セラミックコンデンサカイガラムシみたいな形してやがる.必須じゃないけどあればベター*7とのこと.電圧を安定させる効果があるらしい? 秋月電子
1 ¥110 USB mini B connector WM17115 USB mini B のメス.お使いの PC から繋ぐ口 千石電商 (秋月電子にはなかった (間違えて表面実装のモデルを買ってしまったため through hole モデルを買い直すという二度手間が発生))
1 ¥256 USB mini B plug with short cable (such as H2955) これ意外と難関.作り進めてようやく何のことか理解したのだが,USB mini B ケーブルをご用意してUSB ケーブルを切ってほぐして繋ぐという外科手術を行う必要がある.分解するのけっこう大変なので,もしかすると USB mini B オス側を買って,自分でケーブル繋いだほうが良いかも知れない エレコム USBケーブル 【miniB】 USB2.0 (USB A オス to miniB オス) ノーマル 0.5m ブラック U2C-M05BK
1 ¥0 USB cable male A to male mini B これは要はあれです.お使いの PC とキーボードを繋ぐやつ 旧 Ergodox EZ についていたやつをそのまま利用
2 ¥700 3.5 mm TRRS sockets, CP-43514*8 左右のキーボードを接続する際の受け口.調べて驚いたんだが,TRRS って イヤホンを差し込むあの丸いジャコっとした手応えのやつの規格らしい.不思議! CONN JACK 4COND 3.5MM R/A SJ-43514 - マルツオンライン
1 ¥0 Cable with two 3.5 mm TRRS plugs 左右のキーボードを繋ぐ線.↑の TRRS sockets 間を繋ぐよ 旧 Ergodox EZ についていたやつをそのまま利用
1 ¥0 Ergodox Keyboard case 見た目を左右するやつですね.キーボードケース.僕は旧 Ergodox EZ のケースが流用できるぜと気楽に考えていたんだが,後述するようにこれが大変だった. 旧 Ergodox EZ についていたやつをそのまま...いや,一部加工して利用
76 ¥0 MX Keycaps キースイッチの上に被せるやつ.僕は Ergodox EZ 無刻印の黒が気に入ってるのでそいつを流用.無刻印であるとはすなわちノーヒントで組み立てる必要があるということ 旧 Ergodox EZ についていたやつをそのまま利用

実物写真などは,はんだ付けしていく段階で改めて乗せる.

値段(通販の場合は個々の送料含む)を合計すると ¥19800 程になる.一方で組み立て済 Ergodox EZ を買うと,付属パーツ等を含めて $325 (=~ ¥35000) くらい*9.自作すると Ergodox EZ で買う時と比べて 60 % 程度の価格で入手できるが,激安!ってほどじゃないし時間もかかるので,組み立てプロセス自体に楽しみを見いだせる人向けの選択肢かなぁやっぱり.細々した電子部品は誤差レベルの安さなので,基板をもっと安価に作る手段があれば,ほぼキースイッチの値段だけで作れそうな気もする.あ,あと僕は特殊だったけど,ふつうはこれに加えてキーボードケースも何らかの方法で入手する必要があるな.

秋月電子千石電商は通販もやってるみたいだけど,僕が買ったのは秋葉原にある実店舗.秋月電子千石電商に足を運ぶついでに,秋葉原から歩いて行ける自作キーボード専門店 遊舎工房 にも寄ってみたり.

f:id:Hash:20191019174651j:plain
遊舎工房にて.どうしてキーボードはこうも俺たちの心を躍らせるのか

楽しい.

はんだ付けの素振り

そもそもはんだ付け自体がたぶん学生時代以来*10だしあのへんの所作 (?) がよくわかっていないので,いきなり貴重なパーツをダメにする悲劇を避けるべく,まずは安い工作キットを買って,なんとなく素振りをしておいた.

HiLetgo® 5個セット NE555 + CD4017 流水ランプ ライトLEDモジュール DIYキット 電子プロダクションスイート [並行輸入品]

HiLetgo® 5個セット NE555 + CD4017 流水ランプ ライトLEDモジュール DIYキット 電子プロダクションスイート [並行輸入品]

できた.

楽しい.

はんだ付け

まずは道具を買いましょう

何はともあれはんだごて.僕は一度よくわからん安いの買っちゃったんだけど,最初から白光 (HAKKO) の温度調節機能付きのやつを買ったほうが間違いないと思う.

白光 ダイヤル式温度制御はんだこて FX600

白光 ダイヤル式温度制御はんだこて FX600

  • 発売日: 2012/01/18
  • メディア: Tools & Hardware

はんだ付けは 270 ℃,はんだを溶かして除去する時は最高の 500 ℃でやっていた.以下,その他に僕の買ったもの.

以上の仲間たちを使ってはんだ付けしていく.

組み立て手順は何度も言及している Ergodox 公式サイト のほか,旧 Massdrop のページ がわかりやすい (archive だけど).まぁでも,実際の作業をイメージするためには動画がベストかも.

www.youtube.com

難しいパーツがある場合は ErgoDox Assembly Part 7: Soldering the MCP23018 I/0 Expander - YouTube この人のシリーズがいいと思う.個々のパーツをはんだ付けする手順を丁寧に解説している.

ダイオード * 76

最初のステップがダイオード付けなんだけど,最初の最初で「ダイオードの陰極・陽極」と「基板の表・裏」をちゃんと理解してスタートするところがちょっとハードル高い(気がする).

そもそもダイオードとは,という説明を Wikipedia のダイオード項目 から引用する.

アノード(陽極)およびカソード(陰極)の二つの端子を持ち(この用語は真空管から来ている)、電流を一方向にしか流さない。すなわち、アノードからカソードへは電流を流すが、カソードからアノードへはほとんど流さない。このような作用を整流作用という。

f:id:Hash:20200106040932p:plain
電圧をかける方向が反対になるとダイオードが電子を流さなくなる

つい先日会社で低レイヤー勉強会があり,ちょうど量子力学のバンド理論半導体,PN 接合ダイオードあたりを勉強した所なのでタイミングがよかった.

さて,まず実際のはんだ付け作業における「ダイオードの陰極・陽極」について.ダイオードを付ける穴は各キーの下部にあるんだけど,よーーーく見ると,はんだ付けの穴の周りの金属が「丸」と「四角」で微妙に差が付けられている.ダイオードのカソード(Cathode/Kathode: 陰極)側には黒線などで印が付けられているものらしい.

f:id:Hash:20191215223531j:plain
方向を間違えないようにメモ

f:id:Hash:20191217020950j:plain
ダイオードの黒い線がある側(カソード)を四角で彩られた穴に突っ込む

ところで,ダイオードには "through hole (足を基板にぶっ刺すやつ)" vs "surface mount (表面実装)" という区別がある.ダイオードにはというか,割とよくある分類っぽい.僕は深く理解せず through hole を選択したから足をぶっ刺して裏からはんだ付けする形で作業を進めたけど,surface mount の方が(ちまちまとして難しくなりそうだけど)すっきりまとまって良かったかも知れない *11

次に「基板の表・裏」について.未来の話をすると,ダイオードを付け終わったら基板をひっくり返すことになる.別の表現をすると,ダイオードより後のはんだ付けは,すべて「ダイオードとは逆側に付けていく」.だから右手用に使う基板であれば "LEFT HAND" と印刷されている側にダイオードを 38 個つけて,左手用に使う基板として "RIGHT HAND" とある面にダイオードを 38 個付けるのである.

f:id:Hash:20191217030904j:plain
これを 76 回繰り返す!

気合.ちなみに全キーにダイオードが必要な理由は Keyboard Matrix Help8. Getting Rid Of Ghosting and Masking に書いてる.

先に「ダイオードを付け終わったら基板をひっくり返すことになる」と書いたとおり,このタイミングで基板を裏返す.次の電子部品「抵抗」以降のはんだ付けは,すべてダイオードとは反対側にやっていく.

抵抗 (2.2k Ω * 2 / 220 Ω * 3)

ダイオード地獄を終えたら抵抗.こいつは楽チン.はんだ付けぐあいもちょうど良い.ダイオードづくしの中ですっごく爽やかな存在だ.

f:id:Hash:20191218223315j:plainf:id:Hash:20191218224520j:plain
これをこう

基板上,左側にはんだ付けされたやつが 赤・赤・赤 すなわち 2.2k Ω 抵抗で,中央と右側にはんだ付けされているのが 赤・赤・茶 こと 220 Ω 抵抗.

ここで一点,気をつけるべきことがある.先の部品リストで Short jumpers * 五本というものがあったのだが,You can also use the clipped off legs from your resistors とあるように,はんだ付けを終えた抵抗たちの足をパチンと切ったら,それを捨てずに取っておく.

そんなもん何に使うのかというと…

f:id:Hash:20191218233712j:plain
お前がジャンパになるんだよ!

見えるかな.切り取った抵抗の足を使って,左右基板 3.5 mm TRRS ソケット取付箇所のまわりにある白い丸で囲われたニ穴を連結させてやる.色んなことするんだな.

3.5 mm TRRS ソケット

じゃあ次は二穴連結によってお膳立ての終わった 3.5 mm TRRS ソケットをはんだ付け.

f:id:Hash:20200103201203p:plain
左右キーボード繋ぎ口なので両方にある

そろそろはんだ付けにも慣れてきた.

Teensy 2.0

Teensy 2.0 は Ergodox の頭脳であり,Ergodox を "programmable" にしてくれている立役者だ*12.Teensy 2.0 は ATmega32U4 プロセッサ が乗っている 8bit マイコンボードで,キー入力をコンピュータに送るシグナルに変換する.ATmega32U4 は Arduino シリーズの一部にも使われているものらしい.

Teensy のバージョン 2.0 は少々時代遅れだったりする?のか,入手経路が乏しくてちょっと困った.スイッチサイエンスは v3.x+ 系からしか売ってないっぽい千石電商にそれらしきパーツも見つけたが,確か Teensy 2.0++ だった.結局 Teensy のために Aliexpress アカウント作ったよ...

f:id:Hash:20200111034032p:plain
トゲトゲしたのは header pins.一緒についてきた

これをこうして

f:id:Hash:20191219200957j:plain
トゲトゲを合体させて自立させた様子

こう(はんだ付け)じゃ

f:id:Hash:20191219202105j:plain
ちょうど裏が I/O Expander 部分なのね

ところで Ergodox はメカニカルキーボードの一種である.メカニカルキーボードのメカニカルたる所以は,各キーが物理的なスイッチとして機能するところ,と理解している.知らんけど.すなわち,メカニカルキーボードのキーが押されて通電して,それが Teensy への入力 (I/O) として現れる.

でも,Ergodox のキーは全部で 76 個,片手でも 38 個.Teensy はそんなに沢山のキー I/O を受け取れるものだろうか?Teensy and Teensy++ Schematic Diagrams から,Teensy 2.0 のスキーマを見てみよう.

f:id:Hash:20200111132640g:plain
Teensy 2.0 のしくみ

右側の F0, F1... B0 と並んでいるところが I/O ピンのはずで,せいぜい 20 個かそこらといったところ.1 I/O を 1 キーに割り当てるためには全然足りない.

ここで Ergodox はどうしているかというと「組み合わせ」を使っている.Ergodox はキーの配置が独特だけど,配線としては片手あたり 6 x 7 のマトリックスで定義されている.6 x 7 の組み合わせでキーを特定するから,受け取る I/O としては片手 6 + 7 = 13 個の I/O を割り当てれば事足りる.先述の回路図で "ROW", "COLUMN" 系のラベルを繋いでやれば,以下のような図が現れる*13

f:id:Hash:20200111133151p:plain
Row x Column でキーを特定する

これで 6 x 7 (以下) のスイッチ ON/OFF を 13 個の I/O で賄うことが出来た.Teensy は受け取る I/O からプログラムにもとづいて,どのキーが押されているのかという情報を逆算することが出来る.

この"プログラム"が qmk_firmware であって,先に僕の GitHub レポジトリを例としてあげたように,勝手にカスタマイズしてビルドすることが可能.ビルドされたファイルは Teensy Loader というアプリケーションを使って Ergodox に送り込むとラク.その後 Teensy 2.0 上の物理的なボタン (リセットボタン) を押すと,送り込んだプログラムが有効になる.

右手はこれでいいが左手はどうするの,という疑問が浮かぶかも知れないがそれは後で.

USB mini B の工作

これが意外な難所.本件のゴールは単純で,はんだ付けの方向の都合上 Teensy に付いてる USB mini B の口がキーボードに対して「ヨコ」を向いちゃうので,ケーブルを継ぎ足して「タテ」というか上っかわに口を開けたい,というだけのもの(と理解している).

f:id:Hash:20191219202414j:plain
mini B がぜんぜん mini に見えないサイズ感

ところが単純に mini B ケーブルを突っ込むと,上の図からわかるように,もう根本の"持ち手"だけでサイズオーバーしてしまう.だから...

f:id:Hash:20191219202518j:plain
ケーブルぶった切って

f:id:Hash:20200111040530p:plain
ほぐして

f:id:Hash:20191223045417j:plain
ニッパーでひん剥いて

f:id:Hash:20200111041341p:plain
はんだ付け!

あとは...

f:id:Hash:20200111040914p:plain
USB mini B の受け口をはんだ付け

最後の USB mini B の口は穴にぶっ刺してはんだ付けする必要があるので「基板実装」型じゃなくて「through hole」型を選ぶこと.以上.電子工作に慣れていないこともあってか,このフェイズが結構面倒だった*14

MCP23018-E/SP I/O Expander

さて次は I/O Expander だが... 僕はこれの存在意義が今ひとつピンとこなくて,ずっともやもやしていた.でも今回組み立てを機に調べてみて,なんとなく自分なりに腑に落ちたので,ちょっと整理してみようと思う.

右手キーボードには Teensy 2.0 がいて,キー入力をシグナルに変換してくれていた.右手側のキー入力をわずか 13 個のピンに繋ぐだけで捌き切ることができた.ありがたい.でも左手はどうするの?という疑問が宙ぶらりんになっていた.左手のキー入力は誰が面倒を見てくれるのか?左手にももう一個 Teensy 2.0 を配置する?それとも,全キーからの出力を何本ものケーブルで右手側に繋ぐ?...どれもうまくない.そこで,ヒーローの如く颯爽と登場するのが MCP23018-E/SP I/O Expander である.

僕は Teensy 2.0 を右手側の基板にくっつけた.一方で MCP23018-E/SP I/O Expander は左手側にある.これは偶然ではない.

MCP23018-E/SP I/O Expander のデータシート から仕組みを読み解いてみよう.まず MCP23018-E/SP の E は temperature range であり,E = -40°C to +125°C を表す./SP は Package を示しており,SP = Skinny Plastic DIP (300 mil Body), 28-Lead だそうだ.SPDIP package とも記載される.アーキテクチャとしては MCP23018 の箇所だけ気にすればいい.以下の通り.

f:id:Hash:20200114224704p:plain
MCP23018 アーキテクチャ

大切なのは,Open-drain と記載されている右側の「GPA0-GPA7, GPB0-GPB7 の計 16 本」と,I2C と書かれているボックスから出ている「SCL (Serial Clock Line), SDA (Serial Data Line)の 2 本」.MCP23018-E/SP I/O Expander を使うと,最大 16 の GPIO (General Purpose I/O) を,わずか 2 本の SCL, SDA ラインで読み書きすることが出来るようになる.16 I/O あれば Ergodox 片手分である 6 + 7 = 13 本の I/O をカバーできる.これで左手 38 キーを賄う I/O 13 本をわずか 2 本に集約して,I2C と呼ばれるシンプルなプロトコルTRRS を介して「右手側 (Teensy が存在する側)」に送ることが出来る.だから,PC から Teensy の存在する右手側のみに USB ケーブルを繋げば,両手分のキー入力がゲットできるという戦略なのでした.

そして各ピンの名前.

f:id:Hash:20200114230838p:plain
MCP23018 各ピンの対応

というわけで,MCP23018-E/SP I/O Expander をはんだ付けしていく.

f:id:Hash:20191218224934j:plain
予備含めて 2 個買ったの忘れてて開封時に「えっ長」ってなった

f:id:Hash:20200103191104p:plain
印字が上下逆さまになる向きが正しい

ところで,MCP23018-E/SP I/O Expander では,上の画像の黄色で囲った 3 穴だけ穴の周辺にはんだ付けする金属部分がない. これどうするの? と迷ったけど ErgoDox Assembly Part 7: Soldering the MCP23018 I/0 Expander - YouTube を見ると飛ばしていいらしい.INTA, INTB, NC を利用していないっぽい.

次に,MCP23018-E/SP I/O Expander の謎の場所にセラミックコンデンサキャパシタ)を追加する.

f:id:Hash:20191218231327j:plainf:id:Hash:20200103194645p:plain
これをこうじゃ

参考に General Purpose I/O: How To Get More | Hackaday らへんを読んでいると,カウンターチップ CD4017 が言及されている.これは,先の "はんだ付け練習台" として作ったおもちゃに使われていた電子部品だ."CD" は CMOS Decade counter IC の冒頭から来ている.閑話休題コンデンサキャパシタ)は電荷を蓄え安定させる電子部品(ref: コンデンサとは? | 村田製作所 技術記事).何故 I/O Expander のこの足にくっつけるの? 先の足の配置と対応させると何か見えるかなと思ったが,これもともと裏側で Teensy のはんだ付けに使われてた穴だし何の意味あるのかよくわからない.電圧を安定させる効果があるらしい,というところまでしか理解できていない...

ケースをめぐる困難・分解編

さて.基板にパーツをはんだ付けして作っていくのはいいが,最終的に剥き出しのまま使うわけにも行かない*15.キーボードケースが必要になる.実は Ergodox GitHub レポジトリにはキーボードケースの設計図も入ってるから,これをどうも 3D プリンタで出力すればケースが出来上がるっぽい.

僕の場合は幸いというか何というか三年半使ってきた旧 Ergodox EZ のケースがあるので,これを流用すりゃ楽勝じゃん,と.

これが地獄の始まりだった.

ネジを外して分解していっても,一向に古い基板がケースから外れてくれない.よくよく構造を観察すると,下から「基板 - ケース - キースイッチ」の順になっていて,キースイッチでケースの枠を挟み込んではんだ付けされている.つまり,全部の取り付け済キーのはんだを一個一個溶かし(desoldering)て基板から取り外し切らないとケースがフリーにならない.まじかよ.

というわけで...

f:id:Hash:20191217235533j:plain
はんだ吸い取り器でキーを外して行く

f:id:Hash:20191218005516j:plain
うおー

最初は goot はんだ吸取り線 CP-30Y を使っていたんだが,吸い取り器の方が効率良かった.はんだごてで溶かしたところをすかさず吸い取る.単にバネじかけで空気を吸っているだけでけっこうギミックがチャチだから,数をこなすと割とすぐヘタる.

無駄に時間をかけて全キーを desoldering,ケースを入手.

f:id:Hash:20191218011312j:plain
分解完了

一番簡単と思っていたケースの分解が一番大変だったという.まるで人生のようだ.

ケースをめぐる困難・合体編

ケースが分解できたらあとは被せるだけ... と思いきや,いくつか問題に遭遇.どうやら Ergodox EZ はオープンソースの PCB ボードをそのまま使っているのではなく,たぶん組み立ての効率のためだと思うが,いくつかカスタマイズしているようだった.

f:id:Hash:20191224161823j:plain
Ergodox EZ,地味にカスタマイズしてる

たとえば↑のような違いがある.ケースを被せると出っ張りがぶつかったりするので

f:id:Hash:20191224155709j:plain
ケース被せるとぶつかる

これを削ったり,

f:id:Hash:20191224155841j:plain
出っ張りを雑に削った図

f:id:Hash:20191224155922j:plain
よしハマった

ケースの穴が Teensy RESET 物理ボタンの場所からずれていて,

f:id:Hash:20191224161759j:plain
Teensy RESET スイッチが押せない

はんだごてで開通 (& カッターで削る) したり.

f:id:Hash:20200115001510p:plain
プラスチックの焼ける匂い

色々苦戦しましたが,なんとか収まる.

キースイッチ

ようやくクライマックス.僕は Cherry MX 赤軸 が好み.

f:id:Hash:20200115002744p:plain
Cherry MX 公式サイトより

こいつを下から「基板 - ケース - キースイッチ」の順になるようにケースを挟み込んでぶっ刺して,はんだ付け.76 キー全部!

f:id:Hash:20191224160706j:plain
台にされるタネンバウム先生の本

f:id:Hash:20191224161027j:plain
よこから

f:id:Hash:20191224160842j:plain
キースイッチと基板でケースをはさむ

f:id:Hash:20191224182416j:plain
キースイッチをはんだ付けした様子

ゴールが近いのと,キーをひとつひとつ付けているという実感から楽しさがマックス.

f:id:Hash:20191224184346j:plain
どんどんいくよ

f:id:Hash:20191224193423j:plain
できたああああ!

いえーい

ジグソーパズルのキーキャップ

キースイッチがついたので,この時点で USB ケーブルを接続して,ちゃんとキー操作が検知されることを確認.おk.

いよいよ最後はキーキャップを被せていくだけ.無刻印を選んだので,どのキーがどのキャップかわからなくてほぼジグソーパズルでしたね.

f:id:Hash:20191224200324j:plain
ここまではわかる

f:id:Hash:20191224201803j:plain
横一列の高さをあわせて...

完成!

f:id:Hash:20191225151315j:plain
やったぜ

いまのところ問題なく動いてます.なんか嬉しい.

いじょ

途中でけっこう語るべきことは語ってしまったのでシメに書くべきことは特段... まぁ,ぼくも社会に出て働き始め 2020 年でまる 10 年になります.早々に世界からフェイドアウトするかと思いきやしぶとく楽しく生きています.やっていきましょう.

*1:自作キーボード設計入門 は僕も買わせていただきました.KiCad の使い方なんかは特に参考になった

*2:先述の公式サイト 2.2 ASSEMBLY GUIDE が一応公式なものになるだろうか

*3:まぁ別に C の知識は必要ないけど

*4:でも最低発注枚数が 5 枚だったので,左手と右手に使ったあと 3 枚余ってるんだよな

*5:秋月電子に MCP23017 はあったが MCP23018-E/SP がない

*6:標準 Ergodox レイアウトだと 76 個だと思うんだけど,公式ページでは 76-80, depending on your layout との記載.80 個使うレイアウトもあるの?

*7:Not strictly necessary but suggested

*8:FC68129 will also work if its extra pins are snipped off

*9:Ergodox EZ は台湾からの発送となり,送料無料.ありがとう台湾

*10:大学院時代に生体分子の質量計測器を自作する研究室にいたのでちょっとだけやった記憶があるが,もうその前といえば中学校とかに遡ってしまう

*11:Ergodox EZ を分解してみたところ surface mount タイプのダイオードでした

*12:たぶん

*13:図は https://kandepet.com/dissecting-the-ergodox-the-ergonomic-programmable-keyboard/ より拝借

*14:ニッパー捌きに自信がないから予備のために無駄に mini B ケーブル買っちゃって余ってる

*15:こんなふう引用元)に裸で使うのも,それはそれでカッコ良さそうだけど