フォースカーブ測定機を自作した

キーボードのスイッチの荷重 vs 押下位置のグラフ、いわゆるフォースカーブを測る装置の自作についての記事です。自作キーボードの沼に足を踏み入れた人ならフォースカーブを測りたいと思った人は多いはず。そんな願望をかなえてくれる装置(のはず)です。

 

動機

2021年現在、自作キーボード界では様々なMX互換スイッチが市場に溢れている。タクタイルスイッチは本当にいろんな感触のものがあるが、世の中で好まれているのはバンプが大きいスイッチみたい。一方、自分の好みはどちらかというと控えめのバンプ。そう、だいたい自分の欲しいものは世の中にないという悲しい事実。

 

無ければ作ってしまえ、となるのだが、スイッチをゼロから作ることはできる気がしないので、異なるスイッチのパーツを組み合わせるフランケン(キメラ)スイッチによって好みの打鍵感を実現しようと考えた。ただ、いざやってみるといろんなスイッチをどう比較するか、という問題に行き着く。単純にはそのスイッチの感覚を記憶したまま別のスイッチの感覚を確かめるか、あるいは打鍵時の印象を文字化して記録することになる。打鍵感については特にタクタイル感の強弱が重要なパラメーターとなるが、強い・弱いなどの定量性のない記録ではなかなか比較が難しい。

 

フォースカーブはスイッチの感触を数値化・可視化したものであり、最も客観的で比較のしやすいデータといえるだろう。ただし販売されているすべてのスイッチのフォースカーブが公開されているわけではないし、フランケンスイッチについてはもちろん全然情報がない。ということで自分でフォースカーブを測定するための装置を自作することにした。

 

参考にしたサイト

フォースカーブ測定機をゼロから自分で作れるわけはなく、先人から学ぶことになる。もともとフォースカーブ測定機の存在を知ったのはこのサイトだと思う。

www5f.biglobe.ne.jp

自分が自作キーボードの存在を知る何年も前は、市販されているキーボードを店頭で触ってどれが自分の好みなのか調べていた。そんな中このサイトの存在を知り、同じようにフォースカーブを測定したいと思ったもの。使用されている測定機は定盤とはかりと高さゲージを組み合わせたもの。なるほどこれでいいのかと思ったが、定盤+手動はハードルが高くて、真似するのはあきらめていた。

 

自作キーボードの沼に足を踏み入れてしばらくたったころ、きっかけが何だったか忘れたが、こちらのやり方を知った時はとてつもない衝撃を受けた。

sites.google.com

これこそまさに自分が長年欲していたもの!使われている部品を調べてみると、次のパーツで構成されていることがわかる。

  • 荷重を測定するロードセル
  • モーターがついていて上下移動ができるリニア機構
  • スイッチが押されたことを検知する基板がついているスイッチホルダー
  • これらを制御する何か

ロードセルというもので荷重を電気的に取得できることがわかった。これが自分にとっては一番の発見。ラズベリーパイで遊んだ経験があったので、頑張れば自動的に測定するものを自分で作れると思った。ということで長年欲しいと思っていたフォースカーブ測定機の自作にチャレンジしてみることにした。

 

構想

3Dプリンタは持っていないので、どうやって複数のパーツを組み立てるかが課題だった。リニア機構が悩ましかったが、ステッピングモーターとリニアガイドがはじめから組み合わさったものを手に入れることにした。駆動部分のしなりのために正確に測れないというのをどこかで目にしたので、結構ごっついもののほうが良いのかもと考えた。ロードセルの読み取りやモーター制御、スイッチのON/OFFの検知は少し経験のあったラズベリーパイで行うことにした。アクリル10mm厚の材料が自作キーボードのケース製作の余りであったので、それを使って各パーツを固定することにした。図は各パーツの選定後に雑に描いた組み立て図。

f:id:kgnwsknt_chef:20210811220234p:plain

フォースカーブ測定機の設計

リニア移動機構

ステッピングモーターとリニアガイドが一緒になっているものをAliexpressで調達。ねじのピッチが狭くて精度が出そうなものを選んだつもり。ちょっと高いかもとも思ったが、ここが測定の精度・信頼性を決めるかなと考えてポチった。記事書いてるときは30%OFFでだいぶ安くなっている。

ja.aliexpress.com

このモーターを制御するためのL298NドライバとACアダプタ12Vを組み合わせる。ドライバは確かアマゾンで購入。制御するためのライブラリはここのものを利用。

github.com

ドキュメントを参考にしてステッピングモーターとドライバの配線と制御の仕方を学ぶ。はじめ、ラズパイとドライバのGNDをつないでおらず、モーターをうまく制御できなかった。ちゃんとGNDもつなぎましょう。

 

荷重測定

荷重の測定はロードセルで行う。秋月電子で売ってる。

akizukidenshi.com

いくつか種類があるが、フルスケール500gに対して精度が0.05%なので、0.25gの精度ということかな?これなら十分。このロードセルの抵抗値の変化を読み取るためにHX711基板も秋月電子で入手しておく。

akizukidenshi.com

ラズベリーパイと組み合わせるやり方はたぶんここを参考にしたと思う。

qiita.com

 

ロードセルのリニアレールステージへの固定は、家に余っていたアルミアングルを使って固定。剛性が十分かちょっと不安だったけど測定している荷重の範囲では問題なさそう。ロードセルの先端にはスペーサーをねじ止め。この先っちょがキーキャップ天面を押すことになる。

f:id:kgnwsknt_chef:20210812155632j:plain

ロードセルの固定

キースイッチの検知

測定されているスイッチのON/OFFを検知すれば、アクチュエーション点も測定できる。ここを真似すればスイッチの検知ができる。

denkisekkeijin.com

TALPKEYBOARDで販売されているSU120基板にソケットをつけ、それとラズパイとをケーブルで配線する。そうすることで測定するスイッチの着脱が容易になる。

talpkeyboard.net

キースイッチホルダー

測定するスイッチをちゃんと固定しないと再現性の良い測定にならない。なので、スイッチのホルダーをアクリルで作成。レーザーカット加工をEmerge+に依頼。 

f:id:kgnwsknt_chef:20210812155603j:plain
f:id:kgnwsknt_chef:20210812155615j:plain
f:id:kgnwsknt_chef:20210812160044j:plain
キースイッチホルダー

ホルダーはアクリル5mm厚の部品を3枚重ねてねじ止め。ホルダー底面には丸形スペーサーを取り付ける。これがぴったりはまるように本体底板に電動ドリルで穴をあける。ホルダーのスペーサーをこの穴にはめることで常に同じ位置で固定・測定できるようにした。

 

また既製品のキーボードなど、スイッチがキーボードについた状態で測定するときは、ホルダーを取り外す。ホルダーは嵌めているだけでねじ止めしているわけではないので、簡単に着脱ができる。

組み立て

全部のパーツを組み合わせたのがこの写真。

f:id:kgnwsknt_chef:20210812155148j:plain

全体の写真

家にあったはざいのアクリル10mm厚の板を2つに切断し、ホームセンターで売っているアングルで直角に組む。リニアレールは立てたほうのアクリルにねじで固定。これで結構しっかりした構造になる。10mm厚のアクリルの切断はアクリルカッターで行ったがだいぶ大変だった。この厚さはのこぎりで切るのが正解だろう。

 

直角に立てたアクリル板には、モータードライバ基板とHX711基板を固定。HX711基板の固定は結構やっつけ仕事なのでしばしば外れる。

 

また制御ボタンを3個つけた。測定前にロードセルの高さを調整するための上下ボタンと、測定開始ボタン。これらのボタンはMX互換スイッチで構成し、余っていたキーキャップにそれっぽいシンボルを自家昇華印刷をしたものを取り付け。制御スイッチのホルダーは上記のスイッチホルダーと併せてEmerge+に依頼した。

 

基板やスイッチはケーブルでラズベリーパイと配線する。これのために40ピンのコネクタをはんだづけした基板を作った。これはラズベリーパイを他の用途に利用したくなった時に簡単に切り離し・再接続をできるようにするため。失敗だったのはケーブルのとりまわし。基板底面側をケーブルが通るので、コネクタを挿すときにケーブルに気を付けないと奥までコネクタがささらない残念な感じ。

f:id:kgnwsknt_chef:20210813164022j:plain

40ピンコネクタ基板



 

測定機の較正、精度の確認

とりあえず動くものができたわけだが、果たして本当に正しく測れているのか?以下の点を確認した。

  • 荷重の較正・確認
  • 位置測定の確認(較正)
  • フォースカーブ測定の再現性

まずは荷重の較正。写真のように電子はかりを押したときの電子はかりとロードセルの読みが一致するように較正を行う。

f:id:kgnwsknt_chef:20210812193108j:plain

電子はかりを用いたロードセルの較正の様子

較正に用いた電子はかりの精度がどんなもんか気になったので念のために分銅を買って確認。電子はかりは10、20、50、100gの分銅に対して0.1gまでぴったり一致する。全く問題ない。一方、較正した後に逆さまにしたロードセルに分銅を載せて確認すると、1g未満のずれ。さらに、ロードセルに負荷をかけた状態で様子を見ると徐々に荷重の読み取り値が減っていき、1分くらいで落ち着く。この減少は5g以内なので、まあ数g程度の精度は出ているかな、というのが結論。

 

次に位置測定の確認。位置はステッピングモーターをどれくらい回転させたかで計算することができる。例えばモーターを7.2度回転させると、ねじのピッチが1mmなので7.2/360 x 1mm=0.02mm変位することになる。なので何回転させたかでどれくらい変位したがわかる。ただし自分がステッピングモーターを思った通りに制御できているのか、Aliexpressで手に入れたものがスペック通りで十分精度がでているのかなど、いろいろ不安だったので次の方法でチェックした。

 

写真のようにノギスで厚さを測っておいたアルミのブロックに対してフォースカーブ測定(後述の測定シーケンス)を行う。すると測定スタート位置からどれくらい低い位置にブロック上面があるかがわかる。写真では厚さが10.70mmと20.40mmのものを組み合わせているが、20.40mmだけ、10.70mmだけとすると、異なる高さ3点を測定していることに対応する。この3点の間隔があっているかで変位の確認ができる。

f:id:kgnwsknt_chef:20210812193955j:plain
f:id:kgnwsknt_chef:20210812164613p:plain
位置測定の確認(較正)方法とその結果

結果は0.4%程度長めに測定されているみたい(ただしブロックの厚さを測定しているノギスの精度と同程度)。キースイッチのストロークは4mmくらいなので、0.4%のずれは0.016mmに相当し、これは十分無視していいレベル。まあせっかくなのであとで補正することにした。

 

あとは再現性の確認。同じスイッチを3回測ってみるとほぼ同じ結果を与える。かなり再現性は良い様子。また違う個体を測ってみるとスイッチ製造のバラつきがあることがわかる。個体差がわかる程度の精度はあるみたい。

f:id:kgnwsknt_chef:20210812184625p:plain
f:id:kgnwsknt_chef:20210812184640p:plain
Gateron Silent Brownの測定結果。同じ個体を3回測定した場合と、異なる3つの個体を測定した場合。

 

測定シーケンス

 最終的な測定シーケンスは以下のようにした。

  1. 測定開始スイッチのONを検知。
  2. ロードセルのゼロ点を補正。
  3. 0.02mm下に移動し、荷重を測定。キースイッチがONかOFFかを読み取る。
  4. ステップ3を繰り返し、荷重が150gを超えた(=スイッチを底まで押した)ら変位の向きを反転。
  5. 同様に上に0.02mm移動し、荷重測定・キースイッチのON/OFFのチェックを繰り返す。これを測定開始位置まで続ける。
  6. 測定値をファイルに出力
  7. ファイル出力された生データ読み込み、位置のゼロ点(荷重が0.1gを超えたところをTravel=0とする)を補正。また変位の0.4%のずれも補正。補正後のデータをファイルに出力
  8. 補正後のデータファイルを読み込んでmatplotlibを使ってフォースカーブのpngファイルを作成

これで測定とデータの補正、図の作成を自動化することができた。ボタン一つでフォースカーブの図ができる!

 

得られたフォースカーブはどれくらい正しいのか?

じつはこれが一番悩ましい点かもしれない。Majestouchから取り外していたCherry MX Brownスイッチを測定してメーカーのフォースカーブと比較してみる。自分の測定結果は以下の通り。

f:id:kgnwsknt_chef:20210812185431p:plain

Cherry MX Brownの測定結果

これをCherryのページのフォースカーブと比較すると、形はかなり似ている。ただ、タクタイルの山の位置が0.4mm程度ずれている。また重さも少し違う。ストローク長は同じ?

 

別のレファレンスはここ。

input.club

タクタイルの山の位置は一致するが、アクチュエーション点がすこし違う。ストローク長はこちらのほうが少し短め。

 

自分が取得したフォースカーブの形はどちらとも近く、荷重もそれほど大きくは違わないので、結構いい感じに測定できていると思う。

 

もともとこのフォースカーブ測定機は、自分の感触を可視化して記録するというために作ったようなもの。同じ測定機で取得したフォースカーブからキースイッチの相対的な違いがわかれば十分役割を果たしていることになるのでOK。荷重やストローク長の絶対値などを議論しようと思うとより精度を上げる必要があるだろう。

 

作ってみて、使ってみて

リニアガイド付きステッピングモーターの位置精度と再現性、またロードセルを固定するアルミアングルの剛性を心配していたが、満足のいく精度の測定結果が得られた。

 

このフォースカーブ測定機はスイッチ単体だけでなく、既製品のキーボードのフォースカーブ測定もできる(ただしケースの端に近いキーのみ)。下図は昔愛用していたLibertouchの測定の様子とその結果。

f:id:kgnwsknt_chef:20210812192436p:plain
f:id:kgnwsknt_chef:20210812192500p:plain
Libertouchの測定の様子とフォースカーブの測定結果

 

フォースカーブが測定できるようになると、感覚に頼っていたフランケン(キメラ)スイッチによる自分好みのスイッチの探求を客観的データに基づいて行うことができる。おそらく自分が求めているタクタイル感はこのLibertouchに近い気がしているので、このフォースカーブと近い形を示すフランケンスイッチを作ることができればよいはず。

 

フォースカーブのギザギザ(滑らか)具合はスイッチの滑らかさを反映しているのではないかと考えている。実際ルブのあるなしである個体のフォースカーブを比較すると、ルブしたほうがカーブが滑らかになる。ただし、ステムのぐらつきも影響している可能性もあるので、異なるスイッチの滑らかさを比較するのは難しいのではないかと思う。滑らかさも数値化できるといいんですけどね。

 

課題・願望

キーボードにスイッチがついた状態でも測定できるのは良い点だと思う。このおかげで、例えばガスケットマウントの柔らかさなども評価できるはず(やってないけど)。ケースの端に近いスイッチしか測定できないのが少し残念なところ。改善の余地あり。

 

フォースカーブの図を作るのは自動化できたが、例えば複数のスイッチの比較はいまだにExcelに頼っている状態。まあちょこっとpythonのプログラム書けばいいだけなんだけど…。理想はデータベース化して簡単に比較できるようになること。ただ、フォースカーブを測るのは楽しいけど、データの整理と管理が一番大変なのよね。

 

最近は本当にいろんなスイッチがたくさん市場に出まわっている。選択肢が多いのは何よりだが、販売サイトで得られる情報は素材とストローク長と文字による説明に限られている場合が多い。そのために購入して触ってみるまでは結局のところはわからないというガチャ感がある(だから皆新しいスイッチを際限なく買ってしまうのかもしれない)。いろんなスイッチのフォースカーブを測定してまとめサイトみたいなものを誰か作ってくれないかなー。