YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

3年越しにLet's Splitを完成させた #レツプリ #letssplit

はじめに

こんにちは、StackdriverあらためGoogle Cloud Operations担当者です。

ここ最近、キーボードを作りまくってますが、そもそものきっかけはLet's Splitでした。しかも3年前に作ろうとして挫折したもの。

品名 個数 備考
PCB 1セット MEHKEEで購入
上下プレート 1セット アクリル板を買って自分でレーザーカットしてあった
スイッチングダイオード 50個 秋月電子で購入
ProMicro 2個
Cherry MX互換キースイッチ 50個 Gateron Clear
キーキャップ 1セット 適当に購入
タクトスイッチ 2個 秋月電子通商で購入
TRRSジャック 2個 マルツで購入
TRRSケーブル 1本 なんでもよい}
microUSB-USB-Aケーブル 1本 なんでもよい
M3x10mmスペーサー 8個 西川電子部品で購入
M3x8mm ネジ 16個 西川電子部品で購入

2017年末、Let's Splitを作ろうと試みる

2016年ころからErgoDox EZを使い続けていて、快適に使い続けていたのですが、筐体サイズの大きさとあまり頻度の高くないキーの多さに疑問を感じ始め、別の解決策はないかと探し始めたのが2017年頭でした。その頃にLet's Splitの自作の話をちらほらTwitterで見かけるようになり、自分も組んでみたいと思いはじめ、MEHKEEで購入したのでした。*1

そして材料を揃え学生時代の演習以来ぶりにはんだ付けをしました。

ここで「動いたぞ!!」とか書いてますが、動いてません。「動いた!!」と思ったら1列動かない列があったのでした。導通確認もせずに組み立てた結果ですが、その後テスターもろくに使わずに、そこで挫折し、そのまま箱にしまわれ、お蔵入りに...

2020年夏に発掘、再度挑戦

コロナ禍で在宅時間が増え、夜飲みに行くこともめっきりなくなった結果、できた時間で取り組んでみようと、再び封印されていた箱を取り出しました。Let's Splitの制作に挫折はしていたものの、来る日のためにHelixのGBにも参加し、foobarやMinidoxのPCBも用意されていました。これらに取り組む日がくるとは....

発掘する直前で別途購入したGherkinは途中失敗したものの、SMKIJの皆様のサポートもありなんとか復旧し、その経験もあってHelixやfoobarは滞りなく完成しました。2017年当時と違ったのは、家に電子工作用の工具が一通りあることでした。2017年当時は会社の工作室にあるもののみでやろうとしたため、ハンダも健康に配慮し無鉛はんだのみ、ハンダ吸い取り器なども同僚に借りたもの、などいろいろ制約の中でやっていましたが、いまはもう腹をくくって道具を全部そろえたので、道具を買い足すのにもまったく抵抗はありません。そのおかげでGherkinも復旧できました。

Gherkinを復旧したことで自信を取り戻し、やる気が復活したのでいよいよ途中で匙を投げていたLet's Splitに取り組むことにしました。

テスターで確認

f:id:ymotongpoo:20200817213105j:plain

前回と違ってテスターをちゃんと使うようになったのでとにかくテスターで導通確認をしてみます。すると該当するキーが一列、ProMicroのつながっているはずのピンと結線されていません。Gherkinのときと違ってショートしているのではなく、導通していないのではんだ付けが怪しいんですが、ProMicroとピンヘッダは特に問題なさそう。

ProMicroを外して、再確認

f:id:ymotongpoo:20200818140529p:plain

念の為ProMicroを外してから、ピンヘッダだけの状態でも同様になるか確認します。やはり同様の状況で、ProMicroの裏側に隠れていた部分もきちんとキースイッチのピンがきれいに切られていたので、怪しいのは基板上側のピンヘッダを付けてる側のランドのハンダ付け。しかしそれを確認するためにはキースイッチを全部はずす必要があります。

scrapbox.io

ここにあるトラブル例のように、やはり特定の列や行は大元のProMicroと基板の接触が不良とのことで、ますます基板上面が気になります。

キースイッチをすべて外してランドを確認

仕方なくすべてのキースイッチのハンダを取って、基板と上のプレートを外すと、3年ぶりに基板上面と対面しました。早速該当のピンのハンダを吸い取ってみると、ランドが剥げていました。それを見た瞬間に、3年前に作ったときにピンヘッダを基板の逆側につけてしまったので外した記憶が蘇ってきました。あのときにランドを剥いでしまったのか...

f:id:ymotongpoo:20200818163655p:plain

ところで、このハンダ吸い取り器は本当に良かったのでめちゃくちゃオススメです。先日買った「はんだシュッ太郎」はコテ先の熱が高まりすぎるので基板上などには良かったのですが、ピンヘッダだとプラスチックの部分が溶けかけたりしてやばかったので、このハンダ吸い取り器を導入しました。

動画を見たら「やらせだろ?」って思ってましたが、気持ちいいくらいに吸えました。キースイッチ全部外すのもこれと、しつこいものはハンダ吸い取り線を追加で当てたらきれいに取れました。

再び相談

ランドが剥げていたので、代替手段でその先のシルクが結線している場所に通電させてあげればよいはずです。今回の場合は該当のピンは、本来導通が取れているはずのキースイッチのピンの部分のランドまでつながっていました。このピンからビニル線やエナメル線で直接つないであげればよいはず!しかし確証が持てなかったでSMKIJのdiscordで相談しました。

なるほど。もし(今持っている基板がv2と)同じであれば、想定されているように結線してあげれば直ると思います。試すだけなら半田付けせずともピンセットみたいな導体を使えるので、それでよさそうなら適当なワイヤを半田付けしてください。

すでに自分が基板を手に入れたときからLet's Splitの基板のバージョンも進んでいるので、そこから確認という感じだったんですが、@shelaさんにも結線について確認をしてもらって、上の提案をいただいたのでその方向性で修正することにしました。

キースイッチとProMicroのはんだ付け、結線

一度すべて外したキースイッチとProMicroを再度付け直すというのはなかなかにうんざりするものですが、単純作業なのでやっていきます。ProMicroまで付け終わったら、さらにランドが剥げていたピンから基板のシルクがつながっているキーソケットのピンに対してビニル線で結線します。

f:id:ymotongpoo:20200818212237j:plain

この状態で再度テスターで導通確認を行い、今度はすべてのキーが期待通りにつながっていることを確認しました!!高まる期待!

完成

PCに接続し、キー入力してみると見事すべてのキーで入力できました!早速キーキャップを付けて完成です。

f:id:ymotongpoo:20200818234631j:plain

一回諦めた分、こうやって動くようになると嬉しいですね。

おわりに

本記事はLet's Split v2 (Gateron Clear)を使って書かれました。Let's Splitが流行った頃から比べると公開されているキーボードの数はすごく増えて、公開されている情報も増え、新規に制作される基板の実装のしさすさも改善され、いまではダイオードやICのはんだ付けがないものも出てきています。また部品の調達も遊舎工房さんやTALP KEYBOARDさんを始めとする店舗が必要なものをまとめて取り扱ってくれているため、自分で必要な部品を探す手間も減りました。

こうしたすべては自分で部品を時間をかけて調達し、試行錯誤して、失敗して挫折した、という経験があった自分にはより大きく感じます。いまとなってはクラシックな部類に入るであろうLet's Splitですが、初めて取り組んだ自作キーボードで一度諦めかけただけに、三年越しに使えるものになって嬉しい限りです。

しかしここ最近作ったキーボードがすべて重め(Kailh Speed Burnt Orange、Kailh Box Black、Kailh Low Profile White)だったので、Gateron Clear (リニア35g) は軽すぎて逆に疲れますね....

関連記事

ymotongpoo.hatenablog.com

*1:予備として余っていた方からもう1セットPCBを安く譲ってもらいました

foobarを作った

はじめに

こんにちはStackdriverあらためGoogle Cloud Operations担当者です。最近、3年ほど前に一度自作キーボードを始めようと思って材料だけ集めたあと放置されていたパーツを回収したので、作っていなかったり作りかけのものを直したりしはじめています。その中に知人から安く譲ってもらったfoobarのPCBと上下プレートセットが2組でてきたので、とりあえず1組作ってみたのですが、検索しても細かなビルドガイドがなかったので自分の記録用に残しておきます。

ここ2ヶ月くらいでキーボード本当に作り過ぎなんですが、これは積みキーボードなので仕方がないですね...

材料

公式サイトには何を揃えたらいいかなどは書いていないのでメモしておきます。

品名 個数 備考
PCB & 上下プレート 1セット 知人から購入
ProMicro 2個
Cherry MX互換キースイッチ 30個 Kailh BOX黒を遊舎工房より購入
Cherry MX用キーキャップ 30個 DSAプロファイル
スイッチングダイオード (1N4148) 30個
タクトスイッチ 2個
TRRSジャック 2個 秋月電子通商で購入
TRRSケーブル 1本 なんでもよい
microUSB-USB-Aケーブル 1本 なんでもよい
M2x15mmスペーサー 8個 西川電子部品で購入
M2x6mm ネジ 16個 西川電子部品で購入
LEDテープ(オプション) WS2812B 60LED/m IP65 5個x2
ビニール線(オプション) 適当 秋月電子通商より購入

価格はまとめ買いしたり送料がかかったものは1個あたりの単価に戻してからこの表の個数で計算し直しています。たとえばネジは40個まとめ買いとかになるので払ったお金は実際もっと高いです。*1

TRRSジャックに関しては、マルツにドンピシャの商品があるのですが、入荷未定で過去に作られた方々のコメントなどを見ると、1ヶ月くらいかかることがあるらしいので、足の形だけ違うものを秋月電子通商から購入しました。

LEDとビニール線はアンダーグローをしない場合には必要ありません。

ビルドログ

写真はこちらからも確認できます。

photos.app.goo.gl

材料の確認

これを作るのに並行してGherkinを作っていたのだけれども、特定のキーがショートしていたのを知り本当に反省したので、今回はかなり慎重めに作業を進めました。まずダイオードの導通確認から。

f:id:ymotongpoo:20200807215759j:plain

テスターでダイオード30本の導通を確認。問題なく導通していることが確認できた。片手でテスター反応させながら、もう片手で撮影するの難しい。foobarは左右共通の基板を片側を裏返して使うので、混乱しないようにマスキングテープで左右と裏表の印を書いておきます。

f:id:ymotongpoo:20200807215415j:plain

ファームウェアの書き込み

ProMicroのはんだ付け後すぐにテストができるようにあらかじめファームウェアを書き込んでおきます。公式は tmk_keyboard のほうを参照しています。しかし qmk_firmwareがそれも内包してビルドを便利にしてくれている上に、自作の他のキーボードでも利用しているので、foobarでもこちらを利用します。

f:id:ymotongpoo:20200807220809j:plain

とりあえずテスト用なのでデフォルトのキーマップをそのまま書き込みます。書き込みはDocker環境が設定済みのUbuntu 20.04で行いました。

$ cd /path/to/qmk_firmware
$ ./util/docker_build.sh 40percentclub/foobar:default:avrdude

GNDとRSTをピンセットでショートさせてリセットさせ、無事に書き込み完了。

ダイオードのはんだ付け

他のキーボードと同じようにランドが四角い方にカソード側(黒い帯があるほう)を半田付けします。 

f:id:ymotongpoo:20200808221731j:plain

リードベンダで曲げておいてから裏面から差し込みます。foobarの場合は裏表どっちにつけても大丈夫ですが、表面はキースイッチなので少しでも邪魔にならないように裏面に配置。はんだ付けまで裏面でやれば表面がきれいになってよかったんですが、家にツールクリップが無いため、楽をするために半田は表面側で行いました。

f:id:ymotongpoo:20200808222258j:plain

雑にこういう感じでマスキングテープでダイオードを固定してひっくり返してはんだ付けしました。左右両方ともはんだ付けが終わったら、ProMicroを載せる位置の各スルーホールと各キースイッチ間で導電確認をしておしまい。

TRRSジャックのはんだ付け

マルツで売っているSparkFun PRT-12639を使う場合にはまったく必要のない工程ですが、脚が折れていないTRRSジャックを使う場合には、ラジオペンチなどで折り曲げたあとに、基板のランドの位置に合うように少しだけニッパで先端を切っておきます。

f:id:ymotongpoo:20200808225735j:plain

左が切ったもの、右が切ってないものです。切りすぎるとはんだ付けが難しくなるので気をつけました。

TRRSジャックは表面実装になるため先に盛り半田をしておいてから、上からジャックを乗せて、ジャックの脚をコテ先で暖めながらジャック全体を上から押し込むとうまくいきました。

f:id:ymotongpoo:20200808231017j:plain

ピンヘッダのはんだ付け

次にProMicroを載せるピンヘッダをはんだ付けします。ピンヘッダを基板に挿しProMicroを載せた上でマスキングテープで基板に固定します。(ダイオードのとき同じ要領)裏返してピンヘッダをはんだ付けします。

f:id:ymotongpoo:20200808235354j:plain

タクトスイッチのはんだ付け

これも脚が折れていて長さが基板に合ったタクトスイッチを使う分には必要ない工程ですが、自分が買った安いタクトスイッチは穴にはめ込むように作られているものだったので、脚を伸ばしたり曲げたり切ったりして調整してからはんだ付けしました。

f:id:ymotongpoo:20200809000211j:plain

これも表面実装で地味に面倒でした。

キースイッチの取り付け

上下プレートがあったので、まずキーを上プレートにはめ込みます。意外と硬かったのでPCBを割らないように気をつけながら片側15個、両側で計30個をはめ込みます。

そのあと基板のキースイッチ用の穴にハマるように乗せてあげて、ズレがないか確認し、確認ができたらはんだ付けします。はんだ付けが終わった後はProMicroが載る位置のキー2つのピンをしっかり切り落とします。上からProMicroをかぶせてみて下からキースイッチのピンが当たっていないかを確認します。

f:id:ymotongpoo:20200809005737j:plain

ProMicroのはんだ付け

はんだ付けの最後としてProMicroをピンヘッダにつけます。

f:id:ymotongpoo:20200809011731j:plain

左右でProMicroの載せ方が表裏逆向きになっていることに注意してはんだ付けします。はんだ付けが終わったら、片側ずつPCに接続してみてそれぞれ片手だけで反応しているか確認をしたあと、両手をTRRSケーブルで繋いで全体としてキーボードとして機能しているか確認します。

下プレートのネジ止め

アンダーグローを実装しない場合はこれで必要な機能は実装されているので、下プレートをスペーサーを使って上プレートに取り付けします。M2のスペーサーとネジで固定。西川電子部品にはM2のスペーサーが10mmより長いものだと15mmしかなかったので妥協。12mmのものをAliExpressで買ったので届くのを待っています。

f:id:ymotongpoo:20200816231600j:plain

AliExpressからWS2812BのLEDテープがまだ届かないので、あとではんだ付けするということにして一旦ここで完成。

f:id:ymotongpoo:20200818094226j:plain

追記

LEDテープが届いたのでアンダーグロー化しました。

ymotongpoo.hatenablog.com

おわりに

Gherkinでの失敗があったので、今回は一つ一つゆっくり確認して作ったので、安心して制作できました。今後もゆっくり着実に作りたいものです。

参照

他にもビルドの報告は見かけましたが、本当に完成したことの報告だけだったりしたので、ここでは材料やビルドの際にこれらの写真や記録があったおかげで組み立てられた、というものを並べておきます。

*1:勝手な思い込みで家にあるM3のスペーサーとネジが使えると思っていたら、実際はM2だったことに後で気が付きました。他の秋葉原に行ったときに西川電子部品に寄れば良かったのに忘れたので2度秋葉原に行くことになりました。

Gherkinを作った #Gherkin

はじめに

こんにちは、StackdriverあらためGoogle Cloud Operations担当者です。Caravelle BLE、Claw44、Helixと立て続けにキーボードを作っていますが、Helixのキットをサルベージする前に30%キーボードを作ってみたいと思いGherkinを発注していたのでした。Helixのほうが公開が先になっているので先に取り組んでいたと見せかけて、実はGherkinのほうが先に取り組んでいたのですが、トラブルがあり順番が前後してしまいました。

用意したもの

品名 個数 備考
Gherkinキーボードキット 1セット TALP KEYBOARDから購入
ProMicro 1個
Cherry MX互換キースイッチ 30個 Kailh BOX黒を遊舎工房より購入
Cherry MX用キーキャップ 30個 DSAプロファイル
microUSB-USB-Aケーブル 1本 なんでもよい

キットなので細かい部品のことを考えなくて済むのが楽ですね。コロナ禍に入る前は会社のメイカースペースを使ってアクリル板とかを切れたので、これくらいのキーボードであればPCBだけの注文にしていたのですが、いまはアクリル板を切るのすらいちいち発注しないといけないのでキットで買えるものはそうしています。

ビルドログ

TALP KEYBOARDの商品紹介ページにリンクしてあるこちらのビルドガイドを参考にしながら組み立てました。ここに書いてある工程は基本そのまま行ったと思ってください。ここに載っている写真は主に補足的なものです。

blog.bomberowl.org

また工程の写真はこちらのアルバムに残しています。

photos.app.goo.gl

ダイオードのはんだ付け

まずスイッチングダイオードを基板に取り付けます。リードベンダで予めリードを曲げておいてから基板の上側からダイオード用の穴に通します。カソード側(黒い帯がある方)が四角いランドになるように確認しながら挿し込みます。ダイオードを穴に通したら、マスキングテープで固定して、基板の下側からはんだ付けします。

f:id:ymotongpoo:20200805211203j:plain

基板の導通確認

上のビルドガイドにあるようにダイオードのはんだ付けが終わった時点で導通確認をします。ProMicroを載せる部分のピンにテスターの黒いプローブ、キースイッチに赤いプローブを当て、正しくピンが導通しているかを確認します。

(上のビルドガイドより転載) f:id:ymotongpoo:20200814002736p:plain f:id:ymotongpoo:20200814002748p:plain

ProMicroのピンヘッダをはんだ付け

写真は残してないですが、ProMicro付属のピンヘッダの脚が短い方を基板に挿した上でProMicroを載せ、その状態でProMicro含めピンヘッダをマスキングテープなどで基板に固定します。その状態で基板を裏返し、ピンヘッダをはんだ付けします。この基板はコンスルー非対応のようなので使えませんでしたが、使える基板であれば万が一失敗したときのことを考えると確実にコンスルーが良いなと思いました。他の方法としては次点としてProMicroのソケット化などがあると思います。

コンスルーyushakobo.jp

何かあってもProMicroをピンヘッダから引き抜くためにハンダを頑張って吸い取る、というような手間が発生しないのは本当に素晴らしいですし、事故があってProMicroを引き抜く際にProMicroを破損することを考えたら絶対に安いので保険だと思ってこちらを使うことをおすすめします!(実際に事故ったので悲痛な気持ちでコメント)

キースイッチの取り付け

アクリルプレートにキースイッチを挿し込んだあと、ひっくり返してピンが天井を向く状態にしてから、基板を載せます。ProMicroが載る側(下側)が見える状態にして載せます。

f:id:ymotongpoo:20200806164259j:plain

買ったキースイッチだと真ん中の突起があまり出ていないため穴の奥まで刺さらず、そのためそのままだと固定が難しいので、マスキングテープで上プレートと基板を固定します。その状態でキースイッチをはんだ付けします。

ProMicroのはんだ付け

キースイッチのはんだ付けが終わったらProMicroをはんだ付けします。

f:id:ymotongpoo:20200806222109j:plain

はんだ付けする前に、ProMicroと基板の間に隠れてしまうキースイッチやダイオードのピンはできる限り切り取っておきます。さらに、その上からカプトンテープで仮絶縁したあとに、プラ板や紙テープなどで確実に絶縁します。これを怠ったがために、あとでものすごい手間の手戻りが発生しました。

ファームウェアの書き込み

ここまで来たらキーボードとして動作するか確認します。QMK Toolboxやqmk_firmwareを使ってProMicroにファームウェアを書き込みます。とりあえずテストなので、QMK Configuratorを使ってデフォルトキーマップのファームウェアを落としてきて、QMK Toolboxで書き込みました。試してみると、W、I、F、Space、Escが反応しない。よくよく調べてみるとどうもそれらのキーが押されっぱなしの状態になっているような印象。そこでそれらのキーを数字の1、2、3、4、5に割り当てたファームウェアを焼き直し、ふたたびPCに接続してみると、

$ 12345555555555555555555555555555555555555555555555555

と押し続けられる様子が確認できました。(ビルドログのアルバムにある動画でその様子が確認できます)はんだ付けを一通り確認してみるも、見えているものに関して言えば問題はなさそう。困った...自分では原因が思いつかないのでSelf-Made Keyboard in Japanの皆さんに相談してみました。

問診中

これまでのビルドログや写真を見てもらって、様々な懸念点を指摘してもらいました。

  • 「ケーブルを接続しただけで入力されてしまうということは、基本的には半田付け箇所かピンの足がどこかとくっついてしまっていると考えられます。そのあたりに注意して見ると良さそうです。」
  • 「このタイプの実装方法だとメイン基板から出ているキースイッチの足でPro Microの内部配線が短絡してる、とかいう可能性もあるかもしれない」
  • 「写真から分かる範囲のProMicroの半田付けは綺麗なように見えますね」「ええ、写真から見える範囲は問題なさそうなので、あとは裏側か実はレジストがずれてて運悪く入力される方にショートを起こしてるか…ですね」「外すの大変だと思うので、とりあえずショートしてないかテスタで確認してみるとか?」

とりあえずショートした箇所がないか、テスターで確認したところ、ProMicroのRST側とGNDと、押しっぱなしの症状がでているキーがいずれもショートしていました。はんだ付け箇所は特に怪しい部分もなさそうだし、やはりいちばん怪しいのはProMicroで隠れている部分。仕方がないので、ProMicroを取り外すことを決意しました。

ProMicroの取り外し

ProMicroの取り外しには「はんだシュッ太郎」とハンダ吸い取りリボンを使いました。

シュッ太郎のコテ先は温度調整ができないうえに結構高温になるため、あまり押し付けすぎるとピンヘッダのプラスチック部分まで若干溶け出してなかなか加減が難しかったです。またハンダ吸い取り機能に関しても、真空にできるわけではないので吸い込みも思うようにはいかず。1時間半ほど格闘してようやくProMicroを引っこ抜けたのですが、ProMicro側のスルーホールが完全に剥がれました...

f:id:ymotongpoo:20200814140057p:plain

無残なProMicroさん...

f:id:ymotongpoo:20200814141727p:plain

仕方がないですね。ProMicroは替えれば済む話ですが、ここにある基板は一枚しか無い!というわけでProMicroを外した状態を見てみると、隠れていたピンが明らかに怪しい。きれいに出っ張ったピンを切って低くした上で、絶縁のためにカプトンテープを貼ります。

f:id:ymotongpoo:20200814141935p:plain

この状態で再度各ピンヘッダと対応するキースイッチの導通確認をして、かつショートしていたGNDと各ピンがこの状態ではショートしていないことを確認しました。ProMicroを抜いた状態でショートが起きていたということはやはりProMicroと基板が接触していたせいとしか考えられないため、今回のようにカプトンテープで絶縁した状態なら再発しないであろうという自信の元に再度ProMicroをはんだ付けします。(キットに付いてきたProMicroはご覧の通りピンがだめになってしまったので、家に予備として置いてあった代替品を載せます)

f:id:ymotongpoo:20200814143236p:plain

はんだ付けしてしまったあとでコメントを頂いて「確かにそのとおり....!!!」とおもったのは

カプトンテープを過信すると同じことになりそうなので厚みが大丈夫そうなら紙か適当なプラのシートをいれたい

TALP KEYBOARDさんにはお手間だと思いますが、ぜひプラシートも同梱していただき私と同じような事故に遭う人を減らしてほしいです!さてこれで再度ファームウェアを焼いてPCにつなぎ入力テストをしてみると....

無事に正常に入力できました!!!多くの皆様からの助言を頂いたおかげでめげずに復旧できたので、SMKIJの皆様には感謝です。

最終組立

無事入力できることがわかったので、ケースをネジ止めして、キーキャップを取り付けて完成です。

f:id:ymotongpoo:20200814143709p:plain

f:id:ymotongpoo:20200814143812p:plain

リセット用のタクトスイッチをつけるか迷いましたが、ケースを付けてみると基板裏側につけてしまった場合結局ケースを外さなければならなくなるため、ファームウェア側に RESET のキーコードを入れる方向で対応することにしました。

反省点

今回の反省点と学びは以下のとおりです。

  • ピンはちゃんと切る
  • 絶縁はちゃんとする
  • テスターはとても便利
  • 可能な限りProMicroはコンスルーを使うかソケット化して載せる

書くと当たり前のことばかりなのですが、やはり身にしみて実感できると理解度が全然違いますね。ここでの反省があったので、Helixを作ったときは非常に慎重になり、結果として早く作ることができました。

ymotongpoo.hatenablog.com

キーマップ

30キーしかないということは、アルファベット26文字+4キーしかないということで、かつ普段アルファベットと同じか、下手するとそれ以上に入力しているSpaceやEnterも入れると、もう2キーくらいしか遊びがありません。それだけでShiftやCtrl以外も入れようとしても無理なので、レイヤーを多用することになります。

GherkinのデフォルトのキーマップはQWERTY風にしていつつ、最下段がbが右側に来ていたり、レイヤー遷移に多少の無理が見られるので、このあたりをチューニングしていくのはかなりの試行錯誤が要るなと感じます。foobarも今後組み立てていくことですし、気長にやっていきます。

おわりに

はじめての30%キーボードとしてGherkinをなかば洒落で作ってみたわけですが、意図せずに多くの学びを得ることができる作業となり、今後も自作キーボードを楽しんで作っていくための良い苦労となりました。次は積みキーボードとなっている、同じく30%キーボードのfoobarを作ろうと思います。

また今回はSMKIJの多くの皆様の助言に支えられました。この場を借りて改めて感謝いたします。

本記事はGherkinを使って書かれました、と書きたかったところですが、全然うまく入力ができず、まだキーマップを考えているところなので、取り急ぎ本記事の大半はHelixを使って書きました。キーマップのところだけ意地でGherkinで書きました。

Helix 5行ステンレスプレートを作った #Helix祭り

はじめに

こんにちは、StackdriverあらためGoogle Cloud Operations担当者です。一部の人はご存知のとおり、最近は家でキーボードを作るのにはまってます。

ymotongpoo.hatenablog.com

ymotongpoo.hatenablog.com

しばらくこれらの40%キーボードを使っていて快適に過ごしていて、実際に普段もこれらをメインとして使っているのですが、紆余曲折あって積みキーボードとなっていた各種キーボードキットがサルベージされました。

  1. Helix 5行のステンレスプレートのフルキットとKailh Low Profile白軸とキーキャップが必要個数分
  2. Helix PCB 1セット(予備)
  3. foobarのPCBと上下プレート 2セット
  4. MinidoxのPCB 1セット
  5. Let's Splitの作りかけ(はんだ付けミスで動かなくなったまま)

これらを動作させようと思い、まずはフルキット揃っているHelixを組み立てることにしました。このHelixのフルキット、なんと2年半前のHelixの共同購入(GB)の際のもので、自作キーボード界隈で「#Helix祭り」として盛り上がっていたものですが、そこからずっと眠らせていたと思うと申し訳なくて仕方がない....!!!

品名 個数 備考
PCB+ステンレスプレートセット 1セット GBで購入
SMDダイオード 70個 GBで購入
OLED 2個 GBで購入
スプリングピンヘッダ 2個 GBで購入
ProMicro 2個 GBで購入
Kailh Low Profileスイッチ 70個 白軸をGBで購入
Kailh Low Profile用キーキャップ 1セット GBで購入
TRRSケーブル 1本 なんでもよい
microUSB-USB-Aケーブル 1本 なんでもよい

というわけで早速組み立てていきます。

ビルドログ

photos.app.goo.gl

Helixには素晴らしいビルドガイドがあるのでそれを見れば手順はわかるのですが、自分が心配したのはこの2年半の間に遊舎工房実店舗が開店し、Helixの販売も定常的にされるようになったので、改善が多数行われビルドガイドが古くなってしまっているのではないか、という点です。

github.com

ありがたいことにHelixのビルドガイドはGitHubで公開されているので履歴が分かります。見てみると多少の改善があるものの2年半前からほぼ変わっていない!とりあえずこれを読み進めれば良さそうということで一安心です。

構成の選択

まず最初のセクションである構成の選択です。Helixは行数とバックライトのLEDの種類で手順や基板の形が変わるので、そこを再確認。

  • 行数: 5 (すでに5行用のステンレスプレートを買ってしまっている)
  • LED: アンダーグロー

LEDに関してはステンレスプレートなのでバックライトはちょっともったいないかなと思ったのと、アンダーグローであれば基板下面にあとから追加可能なこともあってこの選択にしました。アンダーグロー用のLEDテープはAliExpressで購入してまだ手元に到着していないのですが、その到着を待たずに使えるという利点もあります。GBの際に買ったSMDのLEDは予備用のPCBをアクリルプレートで作る際に使おうと思います。

ダイオード

ステンレスプレートなので内側は見えないからリードダイオードでも良かったんですが、どうも自分がGBしたときにSMTにしたかったらしくチップダイオードがたくさんあったのでSMTすることにしました。が、やはりSMTが本当に苦手なので、最初は大変苦労しました。

f:id:ymotongpoo:20200811003527j:plain

慣れてきたらスッスッとつけられるようになりましたが、部品がある一定上の小ささになると厳しいです。ハンダゴテのコテ先は2Cを使っているのですが、どうもランドを温めるのがやりづらい、というのが感想です。一通り実装できたのでよかったのですが、@mteiさんがS9のコテ先がつけやすいと動画をアップされてるのを見かけたので、ちょっと気になっています。

白光 こて先/S9型 T18-S9

白光 こて先/S9型 T18-S9

  • メディア: Tools & Hardware

SMTの際は片側のランドにフラックスを塗った後に、コテ先にハンダを盛っておいて、ペタペタと判子を押すようにランドを触っていったらうまく盛りハンダができました。

基板上での導通確認

導通確認をしないで失敗したことが何度かありSelf-Made Keyboards in Japan (SMKIJ)のdiscordで皆さんに助言をいただきながらテスターで確認をすることの大事さを痛感しているので、都度チェックです。ダイオードのはんだ付けがきちんとできているか確認します。

f:id:ymotongpoo:20200813181355p:plain

ProMicroが載る部分のオレンジの丸の部分にテスターの黒いプローブ、キースイッチのオレンジの丸の部分に赤いプローブを当てて導通ができてるかを確認し、上の段ではProMicroで1つ上のピン、その上の段ではProMicroでもう一つ上のピン、という具合に一段ずつ調べていき、すべての段で導通の確認を取りました。

TRRSジャックとOLEDソケットとタクトスイッチ

TRRSジャックとOLEDソケットとタクトスイッチは基板にマスキングテープで固定して普通にはんだ付け。

f:id:ymotongpoo:20200811222520j:plain

OLEDピンヘッダも、OLEDにマスキングテープで固定してからはんだ付け。

f:id:ymotongpoo:20200811223500j:plain

ProMicroのコンスルーへのはんだ付けとファームウェア焼き

これはコンスルーを基板に甘挿しした上でProMicroをコンスルーに載せてはんだ付けをすると楽でした。

f:id:ymotongpoo:20200811221928j:plain

ありがたいことにHelixではデフォルトキーマップでのビルド済みファームウェアをビルドガイドと同じレポジトリ内に公開してくれているので、QMK Toolboxを使ってサクッと書き込み。

ProMicroを搭載した上で入力テスト

ダイオードをはんだ付けした状態での導通確認ができているので、ProMicroのコンスルーへのはんだ付けとTRRSジャックの はんだ付け、コンスルーと基板の接触がすべてきちんと行われていれば、キースイッチの足の部分をショートさせるだけでキー入力ができるはずなのでその確認をします。

f:id:ymotongpoo:20200811233459j:plain

まず片手だけの状態でパソコンにつないで入力確認を行い、確認が取れたので、次は両手をTRRSケーブルでつないだ上で確認します。この状態ですべてのキーでの入力が確認とれたので、あとはキースイッチだけきちんとはんだ付けすれば完成です。

ステンレスプレートの絶縁

ステンレスプレートのキットには絶縁シートがついていたはずなのですが、どこを見ても見つからないので、無くしてしまったか手違いで入っていなかったか、もう2年半前なのでわかりません。いずれにせよ上のプレートが基板に触ってショートしなければいいので、絶縁をします。

念の為同じ絶縁シートがあればそれを購入しようと思いSMKIJで聞いてみたのですが特定には至らず、カプトンテープで絶縁するのが良さそうという話で、自分も代案がなければそうするのがいいだろうと思っていたので素直に地道にテープを貼っていきました。

f:id:ymotongpoo:20200812223241j:plain

とりあえず全部金属部分が隠れるようにテープを貼った後にデザインカッターで穴の部分を切り取っていくという作業はSMTと同じくらい面倒でした。地味に時間を食った作業です。

キースイッチのプレートへのはめ込み

いま絶縁したばかりのプレートにキースイッチをはめ込んでいきます。これがまた大変ではめ込むにはキースイッチ横の爪の部分を押し込みつつ上から抑えて嵌めるという力の要る作業にも関わらず、キースイッチの足の部分から押すと簡単に外れてしまうので気を遣いました。

f:id:ymotongpoo:20200812222127j:plain

キースイッチの基板へのはんだ付け

プレートの下側からキースイッチを押してしまうとプレートから外れてしまうので、プレートを上下逆さまにして置いた上で、基板を上からはめていく形にしたらうまく嵌められました。

f:id:ymotongpoo:20200812232041j:plain

ただそれでもOLEDやProMircoの部分が出っ張っていて、上から力いっぱいに押し込むわけにはいかないので、ある程度の数がはまったら指でキースイッチと基板を挟むようにしてはまりが浅いところをきちんと固定していきます。

それが終わったらあとはキースイッチのピンをはんだ付けするだけです。多くのキースイッチに対応するために結構キースイッチのピン用の穴が細かいので他のランドまでハンダが流れてしまわないよう、必要以上にハンダを付けず手早く行いました。

キースイッチはんだ付け後の導通確認

理論上はこれではんだ付けが必要な工程はおしまいです。*1この状態でキー入力が認識されるか再度確認します。

f:id:ymotongpoo:20200812235619j:plain

普通にキーボードとしてつないで、1つずつキー入力を行って確認完了。

最終組立

ビルドガイドにあるようにまずOLED用カバーをつけた後に上下プレートを固定し、キースイッチをつけて完成。キースイッチは傾斜が緩やかな方が手前側です。

f:id:ymotongpoo:20200813000338j:plain

完成です!この薄さでできたことは本当に満足です。

f:id:ymotongpoo:20200813000740j:plain

ホームポジション用突起

無刻印のキーキャップですべてのキーが同じ形のものだとホームポジションを目視なしで確認するのが難しいので、ホームポジション用の突起を付けます。これも2年半前に買っていた点字シールから突起一つ分を切り取って貼り付けました。

f:id:ymotongpoo:20200813142450j:plain

さすが点字用だけあって突起の大きさが完璧と感じられるくらい違和感の無いサイズです。

おわりに

作ってみて、やはりHelixは突起部をなくそうと思えばSMTができ、実装が難しいと思えばリードダイオードが使え、4行でも5行でも使える、LEDはチップでもテープでも使える、OLEDが使える、とGB当時に手に入れられたキットの中では制作のしやすさと拡張性の高さで群を抜いていたと思います。その拡張性に惹かれ当時GBに参加したことを組み立てながら思い出しました。いろいろあって伸ばし伸ばしになっていたけれど、ようやく完成できてよかったです。*2

40%キーボードをしばらく使ってからHelixを使ってみるとかなりキー数が多く感じます。PCBがもう一組あるので、アクリルプレートを発注して、次は4行でかつバックライトで実装しようと思います。

本記事はHelixを使って書かれました。

*1:LEDテープは後日届いてから付ける予定

*2:LEDテープが届いたらアンダーグロー化しますが、とりあえず完成ということで

Google Compute Engineのインスタンスに自動でGoogle Cloud Operationsのエージェントがインストールされるようにする

はじめに

こんにちは、StackdriverあらためGoogle Cloud Operations担当者です。今回は担当分野の新しい機能について紹介します。本記事はGoogle Cloud LoggingやGoogle Cloud Monitoringというものがなにかをすでに理解されている方向けに書いています。

TL;DR

Agent Policyを使うことで、Google Cloud LoggingとGoogle Cloud MonitoringのエージェントをGCEインスタンス作成時に自動でインストール&起動させられるようになる。

Google Cloud Logging + Google Cloud Monitoring on Google Compute Engine

Google Cloud LoggingGoogle Cloud MonitoringGCPが提供するログとメトリクスに関するマネージドサービスです。Google Cloud Platform上の各種マネージド・サービスやインスタンスのシステムログ、監査ログ、システムメトリクスなどはバックエンドで自動で取り込まれ、これら2つのサービスで確認できます。またGoogle App EngineGoogle Kubernetes Engineを始めとするランタイムではアプリケーションログやアプリケーションメトリクスなども自動で送られるように設定されています。

しかしGoogle Compute Engineのインスタンスではその性質ゆえに、アプリケーションログやアプリケーションメトリクスの取得のためにはGoogle Cloud LoggingやGoogle Cloud Monitoringの各種エージェントをインスタンス作成後に追加でインストール&起動する必要がありました。

今回の新機能はその手間をAgent Policyという機能を使って無くそう、というものです。

Agent Policyの管理

cloud.google.com

本記事の内容は上の公式ドキュメントにあるものをそのままなぞっているだけなのですが、現時点でドキュメントが少しわかりにくい部分もあるので補足しながら追っていきます。

本機能は本記事執筆時点でAlpha版なので gcloud components ではalphaをインストールしておいてください。

$ gcloud components install alpha

権限周りの設定

まず下準備として権限周り(IAMなど)の設定をするのですが、いくつもの権限を設定しなければいけないので、それを一気に行ってくれる便利シェルスクリプトが用意されていますのでこれをダウンロードして適宜オプションを指定して実行します。

ドキュメントにも書いてありますが、このシェルスクリプトを使って行うことは

  1. Cloud Logging、Cloud Monitoring、OS Configの各APIの有効化
  2. GCEのデフォルトサービスアカウントへの必要なロールの追加
  3. OS Configメタデータの有効化
  4. 指定したosconfigのIAMロールを指定したユーザーまたはサービスアカウントに付与

次の例は agent-install-test というプロジェクトで admin@example.com というユーザーに roles/osconfig.guestPolicyAdmin の権限を付与する場合の例

$ bash set-permissions.sh --project=agents-install-test --iam-user=admin@example.com --iam-permission-role=guestPolicyAdmin

Agent Policyの作成

上の準備ができたら Agent Policyを作成します。次の例は ops-agent-debian というAgent Policyを作成する例です。 ルールとしてDebian 10のイメージでGCEインスタンスを作成する場合に、Cloud LoggingとCloud Monitoringのエージェントをインストールするよう指定します。

$ gcloud alpha compute instances ops-agents policies create ops-agents-debian \
  --agent-rules="type=logging,version=current-major,package-state=installed,enable-autoupgrade=true;type=metrics,version=current-major,package-state=installed,enable-autoupgrade=true" \
  --os-types=short-name=debian,version=10

これで Debian 10 のイメージでインスタンスを新規作成すると自動でCloud LoggingとCloud Monitoringのエージェントがインストールされ起動されるようになります。ほかにもGCEインスタンスに特定のタグが付いた場合の条件を設定するには --group-labels を指定すれば良いです。

cloud.google.com

テスト1: Debian 10のインスタンスを作成する

早速GCEインスタンスを作ってみます。まず条件に一致するDebian 10のインスタンスです。

$ gcloud compute instances create test0 \
  --image-project debian-cloud \
  --image-family=debian-10 \
  --zone=us-central1-a \
  --preemptible \
  --boot-disk-auto-delete
Created [https://www.googleapis.com/compute/v1/projects/agents-install-test/zones/us-central1-a/instances/test0].
NAME   ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
test0  us-central1-a  n1-standard-1  true         XX.XX.XX.XX   XX.XX.XX.XX  RUNNING

$ gcloud compute ssh test0 --zone=us-central1-a
Writing 3 keys to /home/ymotongpoo/.ssh/google_compute_known_hosts
Enter passphrase for key '/home/ymotongpoo/.ssh/google_compute_engine':
Linux test0 4.19.0-10-cloud-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ymotongpoo@test0:~$ sudo service google-fluentd status
● google-fluentd.service - LSB: data collector for Treasure Data
   Loaded: loaded (/etc/init.d/google-fluentd; generated)
   Active: active (running) since Tue 2020-08-11 08:50:36 UTC; 1min 17s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 110 (limit: 4373)
   Memory: 66.9M
   CGroup: /system.slice/google-fluentd.service
           └─2128 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd --log /var/log/google-fluentd/goo

Aug 11 08:50:36 test0 systemd[1]: Starting LSB: data collector for Treasure Data...
Aug 11 08:50:36 test0 google-fluentd[2106]: Starting google-fluentd 1.7.1: google-fluentd.
Aug 11 08:50:36 test0 systemd[1]: Started LSB: data collector for Treasure Data.
ymotongpoo@test0:~$ sudo service stackdriver-agent status
● stackdriver-agent.service - LSB: start and stop Stackdriver Agent
   Loaded: loaded (/etc/init.d/stackdriver-agent; generated)
   Active: active (running) since Tue 2020-08-11 08:50:42 UTC; 1min 32s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 13 (limit: 4373)
   Memory: 6.2M
   CGroup: /system.slice/stackdriver-agent.service
           └─2470 /opt/stackdriver/collectd/sbin/stackdriver-collectd -C /etc/stackdriver/collectd.conf -P /var/ru

Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "write_gcm" successfully loaded.
Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "match_regex" successfully loaded.
Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "match_throttle_metadata_keys" successfully loaded.
Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "stackdriver_agent" successfully loaded.
Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "exec" successfully loaded.
Aug 11 08:50:42 test0 collectd[2469]: plugin_load: plugin "aggregation" successfully loaded.
Aug 11 08:50:42 test0 stackdriver-agent[2449]: .
Aug 11 08:50:42 test0 systemd[1]: Started LSB: start and stop Stackdriver Agent.
Aug 11 08:50:42 test0 collectd[2470]: Initialization complete, entering read-loop.
Aug 11 08:50:42 test0 collectd[2470]: tcpconns plugin: Reading from netlink succeeded. Will use the netlink method

Cloud LoggingとCloud Monitoringのエージェントがインストールされて動いてますね!

テスト2: CentOS 8のインスタンスを作成する

今度は条件に合致しない、CentOS 8のインスタンスを作成してみます。

$ gcloud compute instances create test1 \
  --image-project=centos-cloud \
  --image-family=centos-8 \
  --zone=us-central1-a \
  --preemptible \
  --boot-disk-auto-delete
Created [https://www.googleapis.com/compute/v1/projects/agents-install-test/zones/us-central1-a/instances/test0].
NAME   ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
test1  us-central1-a  n1-standard-1  true         XX.XX.XX.XX   XX.XX.XX.XX  RUNNING

$ gcloud compute ssh test1 --zone=us-central1-a                                                                  Writing 3 keys to /home/ymotongpoo/.ssh/google_compute_known_hosts
Enter passphrase for key '/home/ymotongpoo/.ssh/google_compute_engine':
[ymotongpoo@test0 ~]$ sudo service google-fluentd status
Redirecting to /bin/systemctl status google-fluentd.service
Unit google-fluentd.service could not be found.

[ymotongpoo@test0 ~]$ sudo service stackdriver-agent status
Redirecting to /bin/systemctl status stackdriver-agent.service
Unit stackdriver-agent.service could not be found.

こちらは各エージェントがインストールされていないことが分かります。

おわりに

本機能はまだAlphaですので、まだまだ変更の可能性が十分あります。たとえば、現状作成した ops-agents のポリシー一覧やその詳細は gcloud コマンドでしか確認できず、UIはありません。

cloud.google.com

また本機能がサポートされているのは Cloud Logging Agent と Cloud Monitoring Agent がサポートされているLinuxディストリビューションのイメージが使用された場合のみです。もし本機能を利用されていてなにか不具合や要望がありましたら ops-agent-policy-feedback@google.com まで直接連絡するか、もしくは @ymotongpoo まで連絡してください。