キースイッチの研究 3

軸の直進性、軸のがたつきはしばしばスイッチの特性として話題になりますが、 フォースカーブ的にはどう現れるのでしょうか。 中心を押した時、中心から上下左右に3.5mmズレて押した時の5点をグラフ化しました。

f:id:eswai:20220115174338j:plain

まず、ZealのTealious。 プレス側はあまり変わりませんが、 リリース側は中心(青)とズレている時で、差が現れていますね。 Tealiousは軸がぶれないことで有名でしたので、 こんなものかもしれません。

f:id:eswai:20220116120041p:plain

もう一つ、Gateron Clearを計測してみました。 こちらも比較的、安定した結果ですね。

f:id:eswai:20220116154720p:plain

Gateron Red。

f:id:eswai:20220116202741p:plain

Kailh/NovelKeysのCreamスイッチ、 これは他のスイッチと違って、リーフスプリングが外れてから、 押す位置で大きな違いを見せました。 青が中心ですが、それに比べて上下にプレスとリリースで分かれます。 プレスとリリースのカーブが一致しないのは摩擦力の向きが行きと帰りで変化するからだと思いますが、 CreamスイッチはPOM素材で自己潤滑性に優れると言われているので、 この結果は意外です。

f:id:eswai:20220116162119p:plain

キースイッチの研究 2

キースイッチ間の個体差を見てみたいと思います。 まずはGateron BOX INK V2を3個、測定してみました。 軸がリーフスプリングに当たっている2mmまでの部分は、5gf程度のばらつきがありますね。 リーフスプリングから離れる2mm以降は、ほぼ同じような荷重を示しています。 actuation point(原点補正なし)も0.15と0.1625のものがありました。

f:id:eswai:20220116082904p:plain

次に、Gateron BOX INK V2 Pinkを3個。 こちらも同様に、5gf程度のばらつきがあるようです。 荷重変化の直線性という意味でも、優劣がありそうですね。 actuation point(原点補正なし)も0.125と0.15までばらつきました。

f:id:eswai:20220116082835p:plain

フォースカーブはスイッチを1個測って、それでそのスイッチを代表する、 というのは、少し無理があるかもしれません。

追加: Tealiousを8個

f:id:eswai:20220116095817p:plain

キースイッチの研究 1

Romlyさん作の「軸の秤」を購入しました。 これは、キーボードのキースイッチのフォースカーブを測定する装置です。 フォースカーブとはキーを押した時の荷重vs変位曲線で、キースイッチの特徴を表しています。

キースイッチはCherry MX互換だけでもたくさんあって、 しかもバネを変えたり、ルブしたり、カスタマイズしてようやく自分に最適なスイッチになるわけですが、 どうにも感覚的で技術者としては定量化したくなります。

そこで、過去に私もステッピングモーターとロードセルを買ってフォースカーブテスターを作ろうと思ったことがあるのですが、 モーターが動いて、ロードセルで荷重測定できるところまでで頓挫し、 フォースカーブを測定するところまでは辿り着けませんでした。

それと比べたら、軸の秤は本当に完成度が高くて、 初めて計測した時は感動しました。 ファームウェアもよく考えられていて、 市販の測定器みたいです。 ハード的にもHIWINの高級リニアガイド使ってるし、 専用のPCBを起こしていて、 はっきり言って、キーボードを作るより、こっちの方が100倍くらいは難しそうです。

f:id:eswai:20220115200926j:plain

Romlyさんの「軸の本2」も持っていて、こちらも驚くべきクオリティで、 商業ベースだとあり得ないですよ。 「軸の秤」もなるほどという感じで、Romlyさんの熱意には驚かされます。

さて、組み立てた軸の秤を使って、これまでキースイッチについて疑問に思っていたことを調査していきたいと思います。 とりあえず、デフォルトの設定を使っています。 本当はもっと細かなピッチで測定したいのですが、 そうするとプレス側の測定が終わった後に、リリース側の測定が始まらずに完了してしまうことが多くて、 あきらめました。 ファームウェアの課題だと思いますので、 将来的には解決されるでしょう。

キーがONになるActuation pointも測定したいので、 スイッチをセットして、ソケットから配線を出して軸の秤に接続する台座を作りました。 スイッチの軸にプローブをあてますが、十字型の軸に当てるのは安定しないので、 測定用キーキャップ(0.2〜0.3g、測定にほぼ影響なし)も作ってみました。

f:id:eswai:20220115174338j:plain

最初に、何度測定しても同じ結果を返すのか、を確認しておきたいと思います。 下は同じスイッチを5回測定して、結果を重ねてみました。 問題はなさそうですね。 これなら、何度も測定して平均化するという作業は不要そうです。 急激に荷重変化するところではばらつきますが、 これは測定ピッチが粗いからでしょう。 ファームウェアの問題が解決したら、ピッチを変えてやり直してみます。

f:id:eswai:20220115185923p:plain

ここで測定したのはGateron BOX INK V2 Blackというお高いスイッチです。 スペックは以下のようになります。

  • Total travel:3.4±0.4mm
  • Pre-Travel: 1.2±0.3mm
  • Operating pressure: 60±10gf

f:id:eswai:20220115201744j:plain

軸の秤の測定結果は原点のオフセットを修正すると、 Pre-travel 1.3、Total travel 3.3、Operating pressureは53gfでした。 公差内に入っているので、軸の秤の測定結果は確からしいですね。 十分、スイッチ研究に使えそうです。

PRK Firmwareをbuildする

この記事はPRK Firmware Advent Calendar 2021の12月22日のエントリです。

PRK Firmwareをbuildしたいのですが、M1 Macだと以下のエラーがでて、どうして良いのかわかりません。

ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[7]: *** [all] Error 1
make[6]: *** [compiler.o] Error 2
make[5]: *** [libpicorbc] Error 2
make[4]: *** [host-production/alloc_libc_libs] Error 2
make[3]: *** [src/mrubyc/src/mrblib.c] Error 2
make[2]: *** [lib/CMakeFiles/picorbc] Error 2
make[1]: *** [lib/CMakeFiles/picorbc.dir/all] Error 2
make: *** [all] Error 2

PRK FirmwareにはDockerfileが同梱されているのですが、 これは特定のキーマップを含んだファームウェアを作成するためのものということです。

そこで、それをちょっと修正して、キーマップなしのファームウェアを作成するDockerfileを作ってみました。 docker -o . .とすると./prk_firmware/build/にuf2ファイルが出来上がりました。

さて、PRK Firmwareを少しずつ触っていきたいと思います。

gist.github.com

きゅうり改キーボードを作る

この記事はPRK Firmware Advent Calendar 2021の12月11日のエントリです。

Ruby界では、まつもとさんが「きゅうり改」という方式でローマ字かな入力されているのが有名ですが、 これはCannaの辞書定義で実現しているそうです。

きゅうり改以外にも、入力配列の試みはたくさんあって、 配列沼へのお誘い: 大岡俊彦の作品置き場 などを参照ください。

私は薙刀式使いで、最終的にはPRK薙刀式をファームウェアで実現するのが目標なんですが、 PRKの今のapiでは難しそうなので、 まずはきゅうり改にトライしてみました。

英字入力とカナ入力で配列を切り替える

「G」のキー(実際にはアルファベットのQキー)を押してから「U」のキー(アルファベットのJキー)を押すと「ぐ」が入力されます。

日本語入力モードではQWERTYではなく、 専用の配列になるのですが、 これは英字と日本語でレイヤーを切り替えることで、 きゅうり改用の配列に切り替えることができます。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L17-L24

ついでに、レイヤー切り替えとかなON/OFFを同時にやれば、 1アクションでOS側とキーボード側を切り替えられます。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L47-L58

1キーで複数文字を入力する

「きゃ」のように拗音(ようおん)を含む文字は、子音キーの後に「ゃ」キーのような拗音(ようおん)キーを打ちます。 ローマ字入力であいまいになりやすい「ん」と「っ」は独立したキーが割り当てている

マクロ機能を使います。 やゆよは1キーでya, yu, yoと2キー分出力します。オリジナルのきゅうり改ではxya, xyu, xyoを出すべきですが、子音とのつながりからya, yu,yoとしました。

複数文字入力はいくつかやり方を考えたのですが、 %i[KC_Y KC_A]で渡すと連続ではなく、同時押しになります。 Kbd.send_keyは最初の1キーしか出力されないようです。 macroしかなさそうですね。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L76-L80

キーの組み合わせで入力を変える

それ以外の小文字は「小」キーを使い、「H」「小」「A」→「ふぁ」というように入力します。

小キーは単純では機能しません。 あいうえおの前に小キーをおしたらxaとかxiと出力、しかし「H小A」ならfaと出力です。 前にどのキーを押したかで処理を変えなくてはいけません。 ここでは入力したキーを保存して、小キーを押したときに前の文字がHだったら、 バックスペースでHを消してからFを入力するようにしてみました。 前の文字がHでないときはXを出力します。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L63-L73

まとめ

Cannaの定義ファイルをみるとわかる様に、きゅうり改は実は非常に複雑です。 ここでは、本当に基本的入力のみ実装してみました。 きゅうり改を完全に実装するところまではできていないのですが、 基本的な機能は作れそうです。

2021の自作キーボード活動

この記事は キーボード #2 Advent Calendar 2021 - Adventar の12月8日のエントリです。

自作キーボードも2018年から始めて、4年目に入りました。 去年作成したOrtholinearの分割キーボード GitHub - eswai/742_keyboard を日常的に使用しており、 道具としては満足していますが、 相変わらずキーボードを作りたい欲は続いているようです。

カスタムキーボード SPACE65:CyberVoyager

自分の好きなように物理配列を設計したい、という欲求から始めた自作キーボードですが、 一方、カスタムキーボードも味わいたくて一つ組み立てみました。

比較的リーズナブルな価格で、見た目もかっこいいし、カスタムキーボードを触ってみたかったので、GraystudioのSPACE65:CyberVoyagerを購入しました。 塗装の品質も高いし各部品の合わせもよく、満足できる品質です。 打ち心地も確かにボトムマウントやPCBサンドイッチ構造よりもいいことは感じられました。 ガスケットマウントなんかも試してみたいな。

仕様は

  • スイッチ Gazzew Boba Gum サイレントリニアキースイッチ、SPRIT 30gスプリング
  • スタビライザー DUROCK V2
  • キーキャップ PBT Double Shot Keycap BoW

典型的なロースタッガードは好きではないので、将来的にプレートとPCBを自作して入れ替える予定です。

f:id:eswai:20210503155616j:plain

X60 MCU直のせPCB

ProMicroを使わずに、全ての部品を1枚のPCBに載せるのは自キ設計者の目指すところと思います。 GH60互換というケースやPCBがあって、マウントの位置やUSBコネクタの位置を守れば互換ケースに収まります。

ちょうどBLADE60というアルミ削り出しのケースをみて、一目惚れしました。 GH60互換のPCBがのるボトムマウントのケースです。 変則的な面で構成された形状がかっこいい。 MCUを直のせする練習にはちょうどいいと思って、TS配列っぽいPCBを設計した。 ai03さんのJP60のKiCADデータをベースにさせていただき、 手ではんだ付けできるようにMCUはQFPに変えました。 すばらしい基礎となるデータがあったので一発で動きました。ありがとうございます。 パーツはBOMをもとにLCSCから購入しました。

仕様としては

  • スプリットスペース
  • スペースの両脇にLOWER, RAISEをおく
  • TS配列風
  • カーソルキー有り
  • 一般的なキーキャップセットが使えるように (スペースは2.25Uと2.75U)

f:id:eswai:20211025222229j:plain

VpicoとPicoRubyマクロパッド

ファームウェアでカナ入力を実現するQMK薙刀式は細かな問題はのこっているものの 日常的に使えているので放置に近くなってきました。 正直なところ、アイデアはあっても、これ以上複雑なことをするのに、 C言語では気が進まないなという気持ちでした。 AVRではファームウェアサイズも上限に近いのこともあり、 新しいことをするのにためらっています。

そこに現れたのが、Rapberry Pi Pico (RP2040)とRubyで書けるキーボードファームウェアPRK firmwareです。 Rubyなら複雑な処理もシンプルに書けるのではないかと言う期待があり、 開発用に簡単なキーボードを設計してみました。

PRK firmwareの話はPicoRubyマクロパッドを作った - weblog.sy に書いています。

MacOS薙刀式入力ソフト Benkei

自作キーボードではないですが、 愛用のカナ入力である薙刀式をMacBookのキーボードでも使いたい、 Objective-CやSwiftで書けば、 もっと高度な処理ができるのではないかと思っていました。 親指シフト用の入力ソフトにLacailleというソフトがあり、 GPLソースコードが公開されています。 これをベースにすればできそうなので、 作ってみました。 そこそこ使えるようになったところです。 ごりゅごCASTで紹介いただいたりして、 薙刀式布教への一助になれたかなと。

より高度なロールオーバー処理などよりなどやるために、 Swiftで一から実装したいなと思っているところ。

github.com

まとめ

今年は、引っ越したり職場が変わったりして、生活面の変化が大きく、 半年ほどは生活ペースを作るに忙殺されていましたが、 ようやく後半は落ち着いて色々できるようになってきました。 来年もマイペースに楽しめればいいなと思っています。

PicoRubyマクロパッドを作った

この記事はPRK Firmware Advent Calendar 2021の12月4日のエントリです。

秋にPiceRubyのロゴを模したPRK firmwareで動作するマクロパッドを設計、試作しました。 その経緯を書いてみたいと思います。

Vpicoを作った

f:id:eswai:20211002194224j:plain

Rubyファンで、自作キーボード設計者なので、 PRK firmwareは試さないわけにいきません。 Rubyなら自作のQMK薙刀式をより進化させることができるのではないか、という目論見もあります。

そこで、まずPRK Firmwareで遊ぶために、 テスト用のキーボードを作りました。 モバイル用のミニマムキーボードのイメージです。 中央の一等地にラズパイPicoを鎮座させてみました。

ProMicroでキーボード設計するのと変わらない感覚ですね。 3Dプリンタでケースも作ってみました。

github.com

PicoRubyのロゴができた

そんなときに、hasumikinさんがPRK Firmwareのロゴを作っているのを発見。これはキーボードではないか。

レンダリング画像を作ってみた

とりあえず自作のレンダリングツールで早速ロゴを模したキーボードをレンダーしてみた。

反応があった

そしたらPRK firmware 作者のhasumikinさんから反応があり、本当に作るんですかという問いに、作りますと即答。 自作キーボード入門イベントを企画しているとのことで、題材に使いたいとのことでした。

マクロパッドを作ってみた

f:id:eswai:20211023111927j:plain

で、作ってみた。 Vpicoを作っていたので、設計は簡単だった。 本当はこのキー数ならダイオードは不要なんですが、PRK界のmeishiを目指すために、キーマトリックスを使って、ダイオードも入れました。 LEDも3個つけられます。

試作1号はロゴのシルク印刷がつぶれたのでロゴを修正してもらったりして、改善版2号機の設計までやりました。 自分用は3Dプリンタでケースも作ったんですが、イベント用にボトムプレートも設計しました。

github.com

基板はフリーのKiCadというツールで設計し、 JLCPCBで制作をしてもらいました。 費用は基板5枚で$2.5、送料 $2.56と格安です。 みなさんも気軽にキーボードを設計しましょう。私は自作キーボード設計入門で学びました。 このレベルなら素人でも 設計できるようになります。 並べて配線つないでいるだけです。

イベントで使ってもらえた

connpass.com

ということで、 hasumikinさん主催の今日のイベントで 使ってもらえるらしい。

みなさん、無事に完成できたでしょうか。