PCB・スイッチプレート一体型ホットスワップキーボードの自作

打鍵音エンドゲームを求めてキーボードを自作していますが、スイッチプレートとPCB(キーボードの回路部分)を一体化したらどうだろうか、という考えが浮かびました。その考えに至る経緯や設計・製作について記事にまとめました。

最高の打鍵音を求めて

底打ち時の高音が抑えられた柔らかい感じが自分の好み。打鍵音に影響を与えるのはスイッチの選定やルブ、キーキャップの選択が大きく影響するが、打鍵音を柔らかくするには加えて以下がポイントではないかと考えている。

  1. スイッチプレートやPCBの素材はスイッチの位置を固定するためにある程度の硬さが要求されるが、この硬い物質の量を減らしたり、できるだけ柔らかくする。
  2. フォームの量を増やす。
  3. スイッチを固定している素材にフォームを密着させる。

1番目の項目はスイッチプレートの無いPCBガスケットマウントで実現できる。さらにガスケットマウントにしてケースと音響的に分離することでスイッチと一体となっている硬い素材の量を減らすことになる。

 

また2の要素は吸音の効果もあるかもしれないが、振動する物質のダンパーとしての効果が大きいように思う。そのためには量だけでなく3にあるように密着させることが重要ではないかと思う。

 

これらの要素を取り入れて自作したキーボードのタイピング音はこちら。

www.youtube.com

これこそまさに自分が求めていたもの。2022年に最も使ったキーボードだった。

 

最高の打鍵音の維持にはメンテナンスが必要

打鍵音エンドゲームのキーボードの完成から数か月後、どうも完成したての時の打鍵音と印象が違うと感じ始める。自分の音の好みが変わったのかとか思ったりもしたが、いやいや、バネ鳴りも聞こえる。自分が成長して違いの分かる人になったのかとも考えたが、ルブをし直すと明らかに打鍵音が変わり好みの音になる。これは自分の感覚が変わったのではなくて、ルブの具合が変わっているのだと思う。

 

これらのスイッチはだいたい1年前くらいにルブしている。1年くらいでルブ具合が劣化するということか?あるいは使用頻度かもしれない。実際打鍵音が気持ち良すぎてタイピングテストやりまくっていたし…。いずれにせよルブ具合が劣化したものは、もはやエンドゲームにはなり得ない。

 

最高の打鍵音を維持するためにメンテナンスが必要ということみたいだ。でもこのキーボードはスイッチをPCBにはんだづけしている。その状態でスイッチをあけるのは市販されているオープナーではできない。さてどうしたものか…。

 

こうなると心地よい打鍵音でホットスワップなメンテナンス性の良いキーボードが欲しくなる。ホットスワップなら簡単にスイッチを外すことができるのでルブしなおすのもやる気が起こる。また気になるスイッチを試すのも気軽にできる。

 

柔らかい打鍵音を得るためのアイデア

そこで以前思いついたこのアイデアを真面目に考えてみることにした。

スイッチプレートとPCB一体化のアイデア

 

スイッチプレートとPCBのキーボード回路部分を一体化することによって硬い物質の量を最小化できる。この時はMillmaxソケットを使うことを考えていたが、これだとスイッチを交換するときに裏側からソケットをスイッチピンに抜き挿しすることになる。ケースからPCBを取り出さないといけないので、これではメンテナンス性が悪い。

 

そこでKailh製のスイッチソケットを使用して空中配線する。これがある程度強度を持つ導体で基板にはんだ付けされてあれば良い。家にあったキーボードパーツで試しに作ったのが下図。

ゼムクリップを細工して試作

 

ソケットにはんだ付けされているのはゼムクリップを細工したもの。強度は問題なさそう。普段使いとして65%くらいのサイズのキーボードが欲しいのだが、このやり方だとゼムクリップの細工を100個以上しないといけない。2個作るだけでも長さや角度などの調整が面倒だったので、65%サイズはちょっと現実的ではない。何か既製品で代替できるものはないかと頑張って考えたけれど、良案が思いつかずにしばらく放置していた。

 

テスト基板

2か月くらい経ったころ、ふとL字型のピンヘッダ―が使えそうであることに気づく。これなら強度も行けそうな気がする。やっぱりアイデアは一生懸命考えた後に時間を置くと降りてくる。KiCadで作業を始めるとパーツの干渉などいろいろ心配になってきたので小さめの基板を作ってチェックしてみることにした。

 

さて、こういう作業をする前にまずキーボードの名前(=ファイル名)を決める。スイッチプレートとPCBを一体にしているところから、unityという名前にすることにした。

テスト基板の設計

下図はKiCadで設計したテスト基板。

テスト基板

ここではいくつかのことをテストする目的があった。

  • ピンヘッダー用スルーホールを含むフットプリントが問題ないか
  • プレートマウントのスタビライザーの穴の寸法や打鍵音のチェック
  • ピンヘッダーの強度
  • FFCコネクタ・ケーブルのテスト

ピンヘッダーのピンの長さとソケットの寸法でスルーホールの位置が決まるので、データシートにある寸法を参考にしてフットプリントを作成した。ピンヘッダは秋月電子で売っている細ピンヘッダーを使用。スルーホールを小さくできるので、配線スペースを稼げる。一方で細めなので強度が少し心配。基板の端にあるキーやスタビライザーがあるキーでは基板のスペースの問題からスルーホールの位置を変えた。これらが問題なければ本番用の基板設計で同じフットプリントを使えばいい。

 

はじめはUSBレセプタクルと一緒にMCUをのせたドーターボードを作って、キーボード回路が載っているスイッチプレートとFFCケーブルでつなぐことを妄想していた。このテスト基板ではそのコネクタのフットプリントがある。ただ、ドーターボードにMCUをのせると場所を取ってケース設計がやりづらいので本番の基板では採用しないことにした。

 

テスト基板で試しにはんだづけしてみる

テスト基板が届いたら早速試しに作ってみる。もともとピンヘッダーの黒い四角いやつ込みで設計していたが、ピンはこれから抜きとることができることに気づく。余計なものはないほうが良かろうと思い外すことにした。ラジオペンチを使えばピンを抜くことができる。失敗して曲げてしまうこともあるけれど慎重にやればほぼミスなくできる。

ピンヘッダのピンをラジオペンチで抜く

はんだ付けをするときは適当なスイッチを基板にはめ、ソケットもスイッチにつけておく。この状態でピンをはんだづけしてソケットを固定したいのだがこれが難しい。このときほど3本目の手がほしいと思ったことはない。あれこれ試行錯誤して何とかはんだ付けしたものが下の写真。

テスト基板での試作(左)基板表面(右)基板裏面

 

少し心配していた細ピンヘッダーの強度は大丈夫そう。前後方向の力に弱いが、丁寧に扱えば問題ないだろう。

 

試作してみるといろいろ気づくことがある。キースイッチの上面側にはスイッチプレートの14mm角の穴よりも少し大きい箇所がある。左の写真に写っている左の2キーはその部分とスルーホールが少しだけ干渉してしまう。またスタビライザーのところもスルーホールが干渉している。これらのスルーホールの位置は修正する必要があることがわかった。試作って重要!一部はピンヘッダーをそのまま使うと長さが足りなくなるが、ピンをラジオペンチで少し曲げて対応することにする。

 

また試作しているときにTwitterでKailhソケットの形状が新しく変わるという情報を得る。新しいソケットでははんだ付けする電極の形状が変わって、横からみた形状がコの字からロの字になるらしいのだが、ロの字になったらはんだづけ作業がすごい困難になる。コの字形状のやつを慌てて入手した。

 

キーボードunity69の製作

テスト基板による試作で原理的には大丈夫そうであることが確認できたので実際に使用するつもりのキーボードの製作にとりかかる。

キー配列

普段使いとして慣れているRaw staggeredで矢印キーがあるのが基本。そのうえでこれまでいくつか自作したキーボードの体験から以下のようにする。

  • 四角いケースにおさまるようなレイアウト(ケース設計を楽にする)
  • 矢印キーの左の隣にFnを置いて、これと矢印キーでHomeやPage Upなどとする
  • 右Shiftは矢印の上キーよりも右にあると打ちづらいので/キーのすぐ隣に配置
  • スペースキーは打鍵音を好みにするために分割、キーキャップが入手しやすそうな2.25uと2.75uにする
  • DelをDefault layerに配置する
  • 右Altは全く使っていなかったのでなしで良い

この条件の下で手前のRowを調整すると以下のようになった。

キー配列

最前列のModifierや右端のPage Up/Downは全然真面目に考えていないが、スペースを埋めるためにとりあえずで配置しておく。全部で69キーとなったので名前はunity69とする。

 

基板の設計

USBコネクタはいつものようにドーターボードとして別基板にする。これにMCUも実装してしまおうかと考えていたが、ケース内での収め方が難しかったので結局スイッチプレートに実装することにした。そうするとスイッチプレート上である程度スペースを取ることになる。右上の1キーの位置にMCU(ATmega32U4)を配置し、ケースにブロッカーorバッジなどを配置してこれを隠すことにする。

基板

基板設計では上面のスイッチ穴の前後すぐの位置には配線しないようにした。スイッチプラーでスイッチを引き抜くときに引っ掻いて配線を切ってしまう恐れがあるからだ。そのためにRowの配線は裏面を通す。そうすると自然とCol側はおもて面になる。

 

このようにするとColの配線をMCUまで引くためのスペースが必要になる。ビアをたくさん使えばRowの配線と同じようにスイッチの間に通すことはできるが、それはなんだか美しくない。PCBの外形を前後方向に大きくし、Colの線を通す。

 

ケースとの兼ね合いで、USBコネクタのドーターボードを固定するためのアクリルをつけるスペースが必要だったので、その部分に切り欠きを入れる。

 

今回はElecrowに基板を発注。ケース用の一部のアクリル部品(後述)は透明で良いので、そのレーザーカットも合わせて依頼した。

 

ケース設計

ケース設計は以前自作したPCBガスケットマウントキーボードのrelief64と同じようにアクリル箱組ケースにすることにした。ただしスイッチプレートにガスケット用のタブを伸ばしてそこで支えるというよりは、スイッチのついたプレート全体を下からフォームで支えるようにする(スタックマウントって言うのかな?)。下図はケースの構造。

ケース断面図

実際はPCB底面側のダイオードやソケット部分は少しフォームを潰さないといけないとか細かいことがあるが、それは気にしないことにする。加工の都合上フォームは3mmを3枚とした。図ではキーボード部分がケース底板に乗っかっているだけだが、PCB上面を抑えるためのフォームはあとから現物合わせで入れる。チルト角度は5.7度。

今回は背面の板厚を2mmにし、USBレセプタクルのコネクタがぴったり通るサイズの穴を空ける。USB Type-Cケーブルのコネクタ外装の寸法は様々だが、レセプタクルの先がケース面とほぼ一致することになるのでどんなケーブルでもつなげられるはず。USBコネクタがついたドーターボードを固定するためにアクリル部品をケース背面の板に接着する。

 

ケースの底板はアクリル3mmとし、ケース側面に接着したアクリル部品でネジ止めできるようにする。このアクリル部品は分割キーボードを自作したときに思いついた構造を採用。ネジが通る穴は後ほど自分で空けることにし、M2ナットを入れる穴をレーザーカットで加工してもらう。上のドーターボード固定用のアクリル部品と合わせてElecrowに発注した。

 

エンドゲームを目指しているので、ケース外観もこだわる。以前製作したrelief64ではケース手前の上面をアルミ板で作ったが、きれいな鏡面にはできなかった。今回はステンレスにしてピッカピカの鏡面を目指してみる。ただ、以前アクリルとステンレスを接着して作った別のキーボードケースの接着剤が剥がれて残念な感じになっていたので、それをできるだけ避けるためにのりしろを大きく取る。そのためにステンレス板の下にもアクリル板を入れる。これはケースの剛性を高める効果もあるはず。

 

なんとなく曲線・曲面が自分のツボのような気がしているので、側面の板はカーブをつける。これはキーボードを左右で持ち上げやすくするという意図もある。レーザーカットならきれいな形になるけれど、費用が高くなりそうなので台形に切ってもらってそこから自分で加工して曲線を作ることにした(でもこれは大変で後悔した)。

 

ケース外観

見た目にこだわると、右上のMCUを隠すブロッカーorバッジもなんかいい感じにしたい。アルティザンキーキャップをつけられるようにとか、ロゴを考えて入れるとかあれこれ考えたけれど、いいアイデアが浮かばなかった。とりあえず両面テープを駆使して適当にバッジを作ってつける。これなら後で変更できるので未来の自分がきっともっといい感じにしてくれるはず。

 

Elecrowに頼んだ部品以外のメインのアクリルパーツはいつものようにはざいやに依頼した。手前のステンレス板はシャーリング切断だと変形して面が出なさそうなので、レーザーカット加工できる業者を探し、かねよしに依頼した。

 

基板の組立

まずはMCUとその周辺をはんだ付けし、ドーターボードを接続してPCで認識されることを確認。ファームウェアーを書き込んですべてのキーが問題ないことを確認したら、いよいよソケットのはんだづけを行う。

 

これが地獄だった…。やり方をいろいろ模索したが、一度ピンをソケットに仮ハンダし、そのあとピンセットでつまみながら位置を微調整して固定、その後基板側をはんだ付け、というのが最適解になった。はんだづけ作業がとっても大変だったが、地獄を乗り越えて出来上がったのが下の写真。

完成したPCB・スイッチプレート一体基板

 

フォーム

フォームはスイッチ部分の四角い穴だけでなく、ピンやソケット部分もカットしないといけない。これは手作業でまともにできる気がしないので遊舎工房のレーザカットサービスを利用することにした。図面引くのがとても煩わしかったので、Keyboard Layout Editorから得られるjsonをもとにdxfを半自動生成するスクリプトを作った。それについてはこちらの記事

 

65%サイズなら、遊舎工房のレーザーカットサービスのフォームカットで一番大きな500x300から3枚取れる。ただし一部は分割する必要があるけれど。テンプレートに3枚のフォーム+αを入れたのが下の図。

フォームカット依頼用図面

テンプレートでカットする順番を色で示せとあり、どうするのが良いかわからなかったが、図のようにスイッチの穴などを1番目、外形部分を2番目としておいた。これでいいのか不安だったが後日チェックが通ったと連絡がきたので問題ないみたい。

 

フォームはスイッチ、ソケットの部分を切り取るだけでなく、ソケットにはんだ付けされているピンを通すための切り込みを入れておいた。おかげでかなりぴったりになった。下はスイッチのついた基板に取り付けた図。このぴったり感が気持ちいい。

完成したフォーム

 

ケース組立

はざいやでアクリル部品のほとんどをカットしてもらうが、一部は自分で加工することにしていた。USBコネクタが付く背面の板は、あらかじめ空けてもらっていた丸穴x2をつなげてやすりで形を整えるということをした。これは厚さ2mmということもあってそれほど苦労しなかった。

 

最も苦労したのは側面の板。レーザーカットで外注すると高くつくだろうと思って、はざいやでノコカットできそうな形状(下図左)で調達し、それを削って下図右のように整形した。アクリルだし削って形を整えるのは大したことはないだろうと高を括っていたが、これは大きな間違いだった…。

 

初め、ヤスリだけで形を整えようとしたが、永遠を感じたのでドリルを使うことにした。電動ドリルで穴を空け、それをニッパーで切断して大まかな形を作ったら、あとはやすりでひたすら削る。この作業を左右両方の板で同じにできるように2枚をマスキングテープで貼り合わせて行った。修行のごとくヤスリがけをしてようやく右図のような形状に整形。手で持つ曲線の部分は、手に馴染むような3次元的な曲面にしようかなとぼんやり考えていたけれど、やすりがけ作業に嫌気がさしたので頑張らないことにした。

 

ケース側面の板、(左)加工前(右)加工後

形が整ったら、他のアクリル板も含めて面取りするとともに目につくところのカット面をきれいにする。600、1000、2000番のやすりをかけた後、ピカールケアーで仕上げる。

 

レーザーカットされたステンレス板のカット面は結構粗いので鉄ヤスリできれいにする。また前面となる部分は角を落とす。RをつけるというよりはC面取りに近い感じで角を丸めた。ステンレスくらい硬いと、削りすぎになりにくいので結構思った通りの角の落とし方ができたと思う。その後、320、600、1000、2000番のやすりで磨いていき、仕上げにピカールケアーで磨いてピカピカに。

 

この研磨の作業を楽にしたいがために、電動ドリル+フェルト+赤白緑棒を試してみたが、いまいち上手くできなかった。緑棒で研磨しても、研磨跡が結構残る。これは緑棒に移る前に削りカスをきれいに除去するとかをさぼったせいかもしれない。結局ピカールケアーで手で磨くのが一番きれいになった。

 

ケース底板やドーターボードを固定するためのアクリル部品はElecrowに基板と一緒に事前に発注していたが、後日ケースの設計に問題があることが発覚。

 

PCBに切り欠きを入れておけばよかったが、気が付いたときにはPCBとアクリルのナットホルダー部品はすでに発注済み。PCBは配線もあって削れる箇所が限られているので、底板固定用のナットホルダー部品を変更する。これはもともと8mm厚で設計していたが、これを5mm厚にするとぎりぎりPCBを取り外せることがわかったので、のこぎりでカットして対応することにした。カット後、φ2.4mmの穴をドリルであけた。8個加工するのはだいぶ面倒だった。

 

アクリル部品の下準備が終わったら接着。セロテープで箱状に仮組みした状態でアクリル接着剤で接着する。背面の板を2mmと薄くしたために仮組み時はちょっと不安定かもという不安があったが、接着したら割としっかりした箱になった。

アクリル接着後

接着後、パーツ接合部の面が出ていない部分をヤスリで平らにしようとしたが、きれいにできる気がしなかったので諦めた。表側にアクリル接着剤が垂れて見た目が悪くなってしまった部分を磨いて目立たなくする。

 

上のナットホルダー部品8mmから5mmの修正のためにケース底板の穴も自分で空ける羽目になった。これは穴位置が端に近すぎるため業者ではやってくれない。底板をケースにはめた状態でケース側の穴位置に合わせてピンバイスで少しだけ穴空け、それをセンターポンチ代わりにして電動ドリルでφ2.4mmの穴を空ける。1か所だけ少しアクリルが割れてしまった。業者が端に近い穴を空ける加工をやりたがらない理由がよくわかった。

 

いまいちなところはあるが、最終的には問題なく組み立てられるケースとなった。残念なのはナットホルダーの8mmから5mmの変更のために、組立時にナットが落ちやすい。また頭の大きいネジだとケース側面と干渉してしまう。メンテナンスがちょっと億劫になってしまうかも。

 

ケースを組み立てられることが確認できたら、最後にステンレスの化粧板を接着する。以前同じ構造のケースを作った時には、側面の板との間に少し隙間ができてしまったり、接着剤がはみ出してしまったりと、ちょっと残念な仕上がりとなってしまった。今回はその反省を活かし、下の写真のように固定することで隙間なくぴったりに接着できた。また接着剤も少なめにしたのではみ出なかった。強度がどうかはちょっと不安だけれど、仕上がりは完璧。

ステンレス板の接着

その後、足となるアクリル部品を側面の板に接着し、ウレタンクッションを貼り付ける。最後に右上の1キー空いている部分にとりあえずで作ったバッジを両面テープで固定してケースが完成。

 

キースイッチ・キーキャップをつけて完成

あらかじめ購入してルブしておいたBanana Splitを基板に取り付け、IFK 4800Kのキーキャップを取り付けたら完成。キーキャップの白地+太めの印字のはっきりくっきりな印象とケースの組み合わせでモダンな雰囲気となった。いい質感に仕上がったけれど、この色の組み合わせはなんだか機動戦士っぽさがある。

完成!

ケースの他の部分の写真はこちら。普段目につかないケース底面は手作り感満載。

ケース側面、背面、底面

 

完成したキーボードの打鍵音

完成したキーボードの打鍵音はこちら。

www.youtube.com

 

打鍵音エンドゲームを目指して作っていたのだが、ほぼ静音キーボードが完成した。高音がかなり抑えられているのに対し、打鍵時の低音が少し気になる(録音音源ではよくわからない)。これは木製の机のせいかもしれないし、あるいはケース底板のアクリルの剛性が低いためかもしれない。

 

使用したスイッチはBanana Split。このスイッチははなり打鍵音が抑えられている。底打ち音が抑えられているだけでなく、戻ったときの音もおとなしくて静音化に大きく貢献している。多分ステムが上に戻ったときのスプリングが自然長の状態に近い(=上に押す力が小さい)ので、戻ったときの音が抑えられているのだと思う。

 

悪くないのだが、自分の求めていた打鍵音とは少し違う…。

 

打鍵音エンドゲームに向けて

打鍵音エンドゲームを目指してPCB・スイッチプレート一体型ホットスワップキーボードを製作しました。その結果ほぼ静音のキーボードが完成しました。悪くないのですが、求めていた打鍵音ではありません。もう少し音が鳴る感じが好みなので、今後いろいろいじって打鍵音をチューニングできないかなと考えています。考えいているのは以下のこと。

  • キースイッチを変更
  • キーキャップを変更
  • フォームのつぶし具合で打鍵音が変化するのか
  • ケース底板の素材を変える?
  • ケース内のフォーム3mmx3を一部別の硬い素材などにしてみる?

音を消すのは難しいですが、音が鳴るようにするのはそれよりは易しいと思います。上の要素をうまく調整して組み合わせることで、いい感じの打鍵音にできないか試してみるつもりです。

 

この記事はunity69で書きました。