前書き
兼ねてより自作キーボードに興味はあったのですが静電容量無接点式スイッチ(東プレスイッチ)の分割が実現できそうになるまでやらないと公言しておりました。以前より Custom Topre Guide など指針になるものがちらほら出てたようなのですが,今年の春先ごろ 銀鮭(@sorojake)さんが Booth で『真の静電容量キーボードを作る本』というものを出しているのを見掛け,どうやら PCB 設計勉強したり発注しなきゃいけないかなあと思っていたのですが,ありがたいことに Helix ベースのキットを出して貰えるということで,今回β2 版のテスターとして購入・製作しました。
長くなりましたが,次から実際に製作した過程とそのメモです。
実は初自作キーボード。
disclaimer
β2 版のビルドログなので正式版とは異なる可能性があります。ご了承ください。ビルドログ
道具・機材
- 静電容量Helix ラバードームタイプ(β2)キット
- NiZ のハウジングと軸×100
- 東プレ OEM キーボードのジャンクから剥いだラバードームと円錐型スプリング
- Hitachi 2050 という 80 年代ぐらいのワークステーション付属のものらしい。
- いまならビットトレードワンさんが製作しているものを買うほうが簡単だし安いはず。遊舎工房にも置いてあった。これを買う場合はハウジングや軸もセットだから NiZ から何か買う必要はなし。
- キーキャップ ENJOYPBT ABS Doubleshot Dolch
- 遊舎工房実店舗で購入したけど,KBDFans で自分で買うほうが安いかも(ただしその場合届くまでのタイムラグがある)
- Pro Micro×2,OLED×2,LED (SK6812mini)×54,M2 スペーサー 8mm(OLED 保護アクリル用)
- いずれも遊舎工房の実店舗にて購入
- アクリルプレート Helix 向け 2mm 厚(押し出し・クリア)
- ジャンパ用銅線,絶縁テープ
- うっかり買うの忘れてたので製作直前で適当にホームセンターで購入
- はんだこて先 (HAKKO T18-S9),フラックス (HAKKO FS-200),フラックスクリーナー(Sunhayato FL-L15),高密度集積基板用糸はんだ (goot SF-B1004, 0.4φ)
- いずれも秋葉原の千石電商にて購入
- こて先は遊舎工房で聞いたおすすめなのだけれども,SOP のチップ実装には D 型ではなく K 型のほうがよかったのでは?と後で友人に指摘された。
- ソルダーアシスト (goot SA-10)
- これも千石で購入。チップ押さえとかめっちゃ役立った。後述。でも今考えるとヒートクリップとかでも良かったね。
- はんだこて (HAKKO FX-600),はんだこて台 (HAKKO 633),はんだ吸い取り線 (HOZAN No.3793),デジタルマルチメーター (SANWA CD771)
- どれも以前から所有して利用していたもの。新しく買うならたぶん吸い取り線はもっと細いやつとか買うほうがいいです。
ドキュメント類
- オリジナル Helix の公式ビルドログ
- オリジナル Helix のビルドログで参考にしたログ(id:hano_tea 氏によるもの)
- 銀鮭さんの EC Helix 設計者によるビルドログ
製作
注意点
チップ部品や LED の実装は取り立てて難しくないし,もし不安ならオリジナル Helix のビルドログを再確認すれば良いけれども,ふたつほど SOP パッケージのチップ(ピンのピッチが 1.27mm)があって,とくにマルチプレクサが一片あたり 8-pin あるので失敗しやすい。一度だめにしていい基板と SOP のチップを用意して,素振りしておくと良いと思った。たぶん一度練習すればじゅうぶん。
はじめ
まず部品の種類や点数を確認しましょう。でないと私みたいに動作確認のために Pro Micro を開封してから「あれ,コンスルーが入ってない?」とか言って秋葉原に駆け込むハメになります。確認だいじ。
Pro Micro 実装予定場所のジャンパ・絶縁(左手側のみ)
基本的に銀鮭さんのビルドログ通り。ジャンパさせるのは左手側かつ表側です。
スルーホールに銅線を 13 本すべて通してから,裏側からはんだ付けして,余った足はニッパーで切断しました。
あとビルドログにはないですが,OLED 使う予定の人は絶縁テープ貼る前に Pro Micro 実装予定場所の下側のランドもジャンパさせてしまったほうがいいです。私はうっかり完成してからジャンパしてないことに気付きました。
本家 Helix と違って OLED 実装のためにジャンパさせる場所に文字のシルクはありませんが,本家と同じ場所を同じやり方でオッケー。
表面実装
PCB をひっくりかえして,実装していきます。本家と違ってキーひとつごとにパーツを実装する必要はなく,Pro Micro 実装予定場所の裏側にチップ部品が密集しています。
さきに SOP パッケージチップ 2 つ(マルチプレクサ,OP アンプ)を実装したほうがこて先を動かす空間が確保しやくて失敗したときのリカバリーもしやすいと思います。
SOP
SOP を実装するときは,フラックスを PCB にたっぷり塗っておいて,ランドひとつだけ予備はんだをしておき,ピンセットでチップを持ったらまず足一本だけ予備はんだをくっつけておいて,次に対角線の足もはんだで固定します。このときソルダーアシストセットに含まれていたチップ押さえがおおいに役立ちました。
次に,一辺にフラックスを塗ってから,こて先の直線になっている部分をランドと端子の境界にあて,はんだを流しながらこて先もこの直線部分をチップの辺と平行に滑らせていきます。複数の足にまとめてはんだ流すかんじです。
このときわりと大きな確率でチップのピンとピンの間がはんだブリッジしてしまいますが,多少はんだが多めに盛ってあるほうがかえってはんだ吸い取り線で吸い取りやすいので,それで綺麗にしてしまいます。はんだを吸い取るときもフラックスを付けておけば,たぶんいい感じに必要量だけ残るはず。
一度失敗してから,こういう動画とかサイトとか眺めてイメージトレーニングしてからはんだ付けに臨みました。 これは SOP より一際ピンのピッチが狭く (0.5 mm) さらにピンが四辺から出ている QFP ですが。
吸い取るときは私はこて先温度を 320~370 のダイヤルにしていました。利用した吸い取り線が 3.8mm だったのもあって多少温度を大きめにしないとそもそも吸い取れませんでした。このぐらいの温度でもチップはたぶん大丈夫です。
このとき,極めて少量だけがうっかりピンの根本とかでブリッジしてしまったなどの場合,へたに掻き出したり吸い取ろうとしたりせずいちどはんだを盛ってしまったほうが私はラクに感じました。
私の場合は最初それに気付かず,また,吸い取り線に対する温度が低すぎるのにも気付かなかったため,ニッパーでピンを切ってから余計なはんだを吸い取ってリカバリーしよとして,かえって取り外したチップとともにランドとパターンが剥離してしまったため PCB のお代わりを銀鮭さんから送ってもらうという失態をしました……。
(ひとつダメにしたのはマルチプレクサでしたが,こっちは予備がキットにひとつ入っており,なんとかなりました。しかし既に実装していた OP アンプのほうは余りパーツもなく,また,SOP を取り外せる自信もなく,これまた銀鮭さんに OP アンプをひとつ都合してもらいました。大変感謝です!)
ルーペは持っていませんでしたが,幸いなことにチップ抵抗表面の印刷や SOP のピンとピンの間ブリッジしてないかとかはギリギリ肉眼で視認できたためなんとかなりました。
その他チップ部品
私の場合の実装順ですが,まず 200 Ω 抵抗を全て実装し,次にマルチプレクサのすぐ下側のチップコンデンサ,10k Ω 抵抗,そしてトランジスタ,トランジスタ脇の 10k Ω 抵抗,その下側の 1k Ω 抵抗,51k Ω 抵抗,OP アンプ脇の 10k Ω 抵抗,そして最後に 100k Ω 抵抗を全て実装,という手順で実装しました。このへんの順番はどうでもいいのですが,チップとチップの間隔が狭いのでこて先を動かしやすい順番を気をつけると良さそうです。
LED
LED を実装したい人はここで実装するとよいでしょう。すでに LED 実装の注意点は本家 Helix のビルドログで語られ尽くしているのであまり多くは書きません。私はこての温度ダイヤルを 270 度にし,こて先に溶かしたはんだをたっぷり盛ったうえで,PCB と LED にフラックスをたっぷり塗り,左手はソルダーアシストセットのチップ押さえで LED 動かないよう上からしっかり抑え,右手は PCB と LED のそれぞれのランドを始点・終点にした直線を引くつもりですっとコテを動かしてピンをひとつ固定してから,あとは糸はんだ片手に残りのピンを付けていきました。注意点
ここまでの実装を終えたらたぶん焦げたフラックスで PCB 裏面はやや茶色くなっている場所がちらほらあったり,べとべとしたりしていると思いますが,ここでフラックスクリーナーで綺麗にすると茶色いのが消えてべとべとが取れていいカンジです。また,フラックスを落とさずそのままにすると基板が腐食する可能性もあるそうで……。
表側部品
PCB をまたひっくりかえして,リセットスイッチ,TRRS ジャック,OLED のためのピンソケットを実装します。部品の足をスルーホールに通したらはんだは裏側から。
ProMicro/OLED
どちらもコンスルーやピンヘッダを PCB ではなくそれぞれ ProMicro 側と OLED 側にはんだ付けする必要があります。ProMicro にはコンスルー以外に普通のピンヘッダも同梱されており,また,コンスルーには向きがあるため,本家 Helix の公式ビルドログを見ながら注意深く実装しましょう。
ファームウェアビルド
ビルドの前に AVR アーキテクチャ向けの gcc, binutils, libc
をインストールしておかなければなりません。
ただしこれを Alpine Linux でやったらビルドの最後の最後でリンカーがリンカスクリプト (avr5.xn
) を発見できずにコケました。実際はファイル自体はパッケージからインストールされていたので,パッケージのバグだと思われますが,誰も Alpine なんかで AVR 向けのコンパイルをしたりしないんですかね。普通の Hello, World! を gcc -mmcu=avr5
でコンパイルしてもコケました。まあメンテナンスされていないだけだとは思いますが,素直に Ubuntu とか使っておきましょう。
ちなみにこれは Gentoo では解決されているらしい https://bugs.gentoo.org/530786
気を取り直して以下が具体的なビルド手順
git clone https://github.com/orumin/qmk_firmware
cd qmk_firmware
git submodule update --init --recursive
qmk compile -kb ec_helix -km default
上記ではなぜか脱落してる submodule を手動で追加していますが,将来的には git submodule add ...
の三行ぶんはやらなくて良くなるんじゃないかな。修正作って pull-request を送ろうと思っているので。 force push とか必要そうかつかなり巨大な差分になる修正だったので pull-request を出すのは諦めましたが,銀鮭さんに問題解決の対応をして頂きました。現在は git submodule add ..
とある 3 行ぶんのコマンドは不要です。
もともと ginjake さんの repository を参照したビルド例を記載していましたが、現在 QMK 0.22 に対応した版を私の repository で作成したので以後 firmware 関連の記載修正しました (2023-11-19)
現在 qmk_firmware/keyboards/ec_helix/rule.mk
の OLED_DRIVER_ENABlE
がもし yes
になっているのならば,完成して動作確認終えるまでは no
にしておいたほうがキー入力の確認とりやすいと思います。ただし OLED の動作確認をさきにしておきたい場合はそれを行なってから書き換えると吉。
あとキーレイアウト変えたければ
qmk new-keymap -kb ec_helix
cd keyboards/ec_helix/keymaps/<your git user name>
を実行したのち、keymap.c
を書き換えます。ビルドの最後の手順も qmk comile -kb ec_helix -km default
から qmk -kb ec_helix -km orumin
のように作ったキーレイアウトの名前に書き換えて実施しましょう。
作ったファームウェアファイルは以下のように書込みます。このとき avrdude
とやらが必要なのでこれもパッケージから入れておいてください。
avrdude -c avr109 -p m32u4 -P /dev/ttyUSB001 -U flash:w:ec_helix_default.hex
このなかの /dev/ttyUSB001
のところは環境依存です。数字の部分が環境によって違うだけでなく,たとえば Windows だと COM1 とか COM7 とかの COM Port になります。
作成したファームウェアを書き込むときは、
qmk flash -kb ec_helix -km default
のようにコマンドを実行した後、基板上の ProMicro の近くにあるタクトスイッチを押して DFU mode に切り替えます。ここで、両手ぶんそれぞれに書き込むことを忘れずに。
ただし WSL 上の場合、実際 Windows の COMn としてシリアルポートが接続されるのに反して WSL 内の Linux が /dev/ttyUSB0
などに新しいシリアルデバイスが接続されることを期待して待ち受けてしまうため、うまいくいきません。この場合は次のようにすると良いでしょう。
# qmk_firmware ディレクトリに居ると仮定します
cd ../
git clone https://github.com/qmk/qmk_toolbox
cp qmk_firmware/ec_helix_default.hex .
qmk_toolbox/windows/QMK\ Toolbox/avrdude.exe -C qmk_toolbox/common/avrdude.conf -c avr109 -p m32u4 -P COM10 -U flash:w:ec_helix_default.hex
こちら、コマンドを忘れがちなのと、コマンド実行した後に新しく接続されてくるシリアルデバイスを検知してから実際に書込みモードに移行するような挙動であってほしいので、こういうヘルパースクリプトを用意してみました。 https://gist.github.com/orumin/26e4840fd8aa23cbaac9fdf11e3df01f
動作確認
これは完成後動かないキーを修正してるとき気付いたのですが,この時点で LED だけじゃなくキーの動作確認もしてしまったほうがいいです。やりかたは,ボトムプレートの上に M5 スペーサー(黒いわっかです)をのせてその上にファームウェア焼き込み済み ProMicro を搭載した PCB を載せます。そして,キーひとつぶんだけに切られたラバードームとスプリングひとつ,そしてハウジングと軸もひとつずつ用意しましょう。最後に,PCB 上のテストしたいキーの位置の円のシルクがあるところに,スプリング,ラバードーム,軸,ハウジングの順番でのっけて,これでテストします。別のキーを試したければ,このスイッチ一式をそのまま別のキーの位置に滑らすだけです。
クソ雑動作確認 pic.twitter.com/ezGeY0Q2OO
— まちカドおるみん (@kotatsu_mi) October 11, 2020
注意点としては,この方法だとノイズが防げないため,確実と言っていいほど入力が暴走します(チャタリング)。メモ帳を開いてカーソルを合わせておくなど,不意のキー入力でも困らないようにしておいてください。
またこの方法ではあくまでキーがまったく読みとれない不具合がないかどうかだけ確認するなど割り切った確認として,実際にチャタリングが起きないかなどは完成後にあらためて確認しましょう。
ところで静電容量無接点方式でバネの具合やノイズなどで静電容量が微妙に閾値を超えて入力状態と誤判定される,のはチャタリングと表現して良いのでしょうか。正しい用語ではないかもしれない……。
スイッチとケース(アクリルプレート)の実装
もうここまで来るとはんだごても要らなくなりあとはやるだけです。手順も銀鮭さんのビルドログ通り。
ポイントとしては,ハウジングはトッププレートに嵌めるんですが,このとき工作精度の都合上たまにゆるゆるなハウジングが居たりします。どうせ NiZ から買うと 100 個も届いて余るので,微妙そうなハウジングは除けて別のハウジング使うといいと思います。
また,ハウジングと軸をトッププレートの裏側に嵌めたところで,スムーズに軸が動くかテストすると良いかと思います。たまにハウジングのプレートに嵌めるためのツメが内側に曲がってて軸の動きを邪魔しているやつが居ました。
あと,これは一目で見ればわかるのであんま書かなくてもいいとは思いますが,NiZ のハウジングと軸は向きがあります。軸を嵌める向きがおかしいとユルユルになります。
この場合は後者は間違った向き。
一度完成してから PCB だけ取り出してはんだを直そうとかすると写真二枚目のようにハウジングや軸もバラバラに取れちゃいがちなので,気をつけましょう。万一 PCB の修正が要るなら腹括ってください。
あと,私が使ったラバードームのせいなのかキットの低頭ネジだとボトムプレート留めるのにやや長さが足りなかったので,元の Hitachi 2050 キーボードで内部の基板を留めるのに使われていたネジを流用しました。
完成
ということでおめでとうございます。ここまで来ればおおむね大丈夫でしょう。わたしはこの時点で右手側の特定列が入力できない(チップ抵抗がはんだ不足),OLED のジャンパ忘れなどで多少のやりなおしが発生しました。
一般にはんだは多すぎても少なすぎても,そして温めすぎてもダメですが,仕事ではなくホビーなので,動くこと優先で多少はんだが常に多めでも問題ないかと思います。動かないほうが怖いです。
余談ですがフルカラー RGB LED なものを持つのが初めてなもので,完成した最初の夜(昨夜ですね)寝ようと布団に入ったら天井がパーリナイな感じに綺麗に照らされてて笑ってしまいました。
おわりに
使ってみて
この記事は EC Helix (NiZ) で作成しています。おおむね問題はないんじゃないでしょうか。ただ,作った直後たまにスペースが効かなくなることがあったのですが,キーキャップを全て付けた時点で再発しなくなりました。ですが,OLED のジャンパ忘れを直し,この記事を書いていて,終盤になってからまたたまにスペースが効かなくなり,USB 抜き差しでリセットされるのか直るんですが,再発の間隔がどんどん狭くなっています。もしかしたら OLED はやめておいたほうがいいのかもしれません。仮に OLED は関係なかったとしたら,おそらく私の実装の問題でしょう。
追記:しばらく使ってたら OLED 付けていても安定するようになっていて、上記のような不具合は起きなくなっていました。
基本的にはかなりちゃんと動作するし,タイプ感も静電容量無接点式そのもので,とても良いです……。テンションガン上げ。
私が現在利用しているキーレイアウトは次のようなカンジです。 https://github.com/orumin/qmk_firmware/blob/ec_helix_orumin/keyboards/ec_helix/keymaps/orumin/keymap.c
最後の注意事項
キーレイアウトを変更したとき,左手側だけ書き換えても動くには動くんですが,ちゃんと両手どちらもファームウェア書き換えをしないと,右手側で取り零したり遅延が起きたりしました。両手どちらも書き換えたらちゃんと動作して,しかも入力はスムーズで最高です。
謝辞
こんな素敵なキットを作ってくれた上に壊れた PCB の都合や私の実装ミスによる不具合の解決のサポートまで色々してくださった銀鮭さん,大変ありがとうございました。