キーボードの振動を測ってみる

はじめに

キーボードの音を測ることはよく行われているが,振動を測った例はあまり見ない(というのは検索の怠慢で,reddit の keyboard science でも見ればあるかもしれない).ともかく,秋月で買った加速度計ユニットが余っていたのでキーボードに設置してタイピングしてみた.

セットアップ

今回使用したのは秋月のKXR94-2050モジュール.測定範囲は ±2G だが,水平に置いた場合は重力があるので実質 1 G の振幅までしか測れない.これではちょっと強くタイピングするとクリッピングしてしまう.仕方がないので,タオルの上に垂直に立ててタイピングした.測定治具のモデルは Github のリポジトリにある.

f:id:lunar0:20200319032046j:plain
治具にセンサモジュールを取り付けたところ

f:id:lunar0:20200319011229j:plain
加速度計の取付(理想)

f:id:lunar0:20200319013345j:plain
加速度計の取付(現実)

結果

f:id:lunar0:20200319024131p:plain
Sugi 6x (アクリルサンドイッチ)と Polaris (ガスケット) の比較.ガスケットのほうが低周波成分が少ないことがわかる

1 V = 1 G. トリガがかかった時間を 0 ms としてプロットした.アクリルサンドイッチのほうが振動が大きいことがわかる.底打ち前の振動(-5 ms 付近)は恐らくキーキャップに指が触れた瞬間だろう.

議論

いいかげんな測定ではあるが,アクリルサンドイッチはやはり大きく振動していることがわかる.底面全体にフォームを貼って底全体で支えるか,振動の腹の位置にゴム足を置くことで振動の大きさを改善できる可能性はある.

一方で Polaris は振動の減衰が大きいと予想したが,今回の結果からは判断できない.振動の減衰特性について知るためには,キーを叩くのではなく,プレートを直接叩いたほうが良さそうに見える.

今後の課題

雑なプロトタイプなので課題だらけである.

測定の簡便化

現在はアナログ出力の加速度計を使用しており,オシロスコープがないと値が読めない.自作キーボード界隈には Pro Micro が普及しているので,SPI 接続の加速度計があれば誰でも安価に値が読めて便利だと思われる.データをファイルに書き出すのは面倒なので,トリガがかかったら一定時間シリアルに値を出力する程度でよいだろう.

打鍵の標準化

手で打鍵するとどうしても不均一が生じるので,これも標準化したい.試しに手元にあったペンでキーボードを叩いてみたら,見事に高域が消えてしまった.硬いもので打鍵するとキーキャップの動きが拘束されるためだろうか.

振動の減衰について知るためならば,プレートを直接叩いたほうが良いかもしれない.

f:id:lunar0:20200319024439p:plain
指(上)とペン(下)で打鍵した様子.ペンで打鍵した場合,高周波成分が消えているのがわかる

PCBマウント対応

現在の取付治具では,PCBマウントに対応できない.適当なスイッチに加速度計を接着するなどすれば対応できると思われる.

測定位置の考慮

現在は打鍵しないキースイッチの位置にセンサを置いている.場所により振動のしかたが異なる可能性があるので,センサを複数置いて測定することで打鍵感の均一さが測定できるかもしれない.

Polaris を組み立てた

f:id:lunar0:20200308034225j:plain
Polaris

人気を集めた 60% キーボードキットである Polaris が届いたので組み立ててみた.組み合わせは E-white / Tsangan / Brass plate. この塗装はややキズが付きやすいようで,キーキャップを外すときに小キズを付けてしまった.

パーツ選び

スイッチ

作りの良いキーボードは良い音がするので静音スイッチを入れるのはもったいない.せっかくなので Kailh Cream でも入れようかと思っていたが,丁度遊舎工房に在庫がなかったので Gateron Ink Red + 205g0 にした.Cream と比べていないので大したことはいえないが,結果には十分満足している.

キーキャップ

Matt3o + Drop MT3 /dev/tty を使うつもりが,当該セットは Tsangan Layout に対応していないことに届いてから気付いた.しょうがないので,最下段は Grab Bag や遊舎工房のバラ売りから取ったキーキャップを適当に並べてある. 左右の Control がウォームグレイなのは,五分もすれば気にならなくなった.最下段の低さがうれしい.

ソケット

Holtite ソケットを嵌めてみたところ,固定しないとスイッチを引き抜いたときにソケットが外れてしまうことがわかった.そこで,ソケットの柔軟性を損なわないよう,ソケットのうち1本のみを半田付けする方法で凌ぐことにした.今回は goot から出ている 0.3 mm の半田と,先の細いこて先(2BC型など)を使用した.

f:id:lunar0:20200308033628j:plain
ソケットの半田付け

初日の感想

今まで使っていたものと比較すると圧倒的に感触が良い.感触のよさはガスケットマウントによるものか,底突き時に余計な振動がないことによるものか,音の心地良さによるものか,時間があればもう少し追求してみたい.

いっぽうで,自分の手とMT3との相性があまり良くない気もしている.タイピングするたびに指先を削られるような感覚がある.理由はいくつか考えられるが,彫りが深い(曲率が大きい)ことや,表面のシボが粗いことなどだろう.いずれにせよ,何か代替品を探す必要がある.

キースイッチテスターを作った

概要

Demo: https://kymok.github.io/keyswitch-tester/

  • 12__はスペース)とタイプすると,専用キーボードの1行2列目にあるスイッチが表示される
  • ランダムボタンを押すと,登録されている中からスイッチをランダムに表示する

f:id:lunar0:20200222030716j:plain
完成したスイッチテスターとサーマルプリンタ

Tsukuba Mini Maker Faire (TMMF) の Self Made Keyboard in Japan (SMKiJ) 展示の一環として,キースイッチテスターを出展した.元ネタは遊舎工房の店頭にあるものだが,TMMF会場では店舗と異なり,気に入ったスイッチが見つかってもその場でスイッチを買えない.そこで,名前のメモを取ったりするかわりにサーマルプリンタでメモを出力する装置を作った.

システムの構成

f:id:lunar0:20200222043157p:plain
ハードウェア構成

  • ハードウェア:
    • デモ用パソコン
    • 専用キーボード(USB)
    • サーマルプリンタ(USB-シリアル変換器経由)
  • ソフトウェア:
    • フロントエンド(押されたキースイッチの表示,キースイッチリストのフォーマット,バックエンドへの送信)
    • バックエンド(http/JSON で受け取った文字列をシリアルポートに流す)

キーボード側

構造

基板を 5mm のアクリルプレートに直接ネジ留めした.これだけだと工夫が何もないので,底面のアクリルプレートに皿ザグリを施すことで,見た目をすっきりさせた.各キーには上からLEDを挿せるようになっており,頑張れば WebHID などを使って作者おすすめのキースイッチを光らせるなども可能だろう.

16x4 を一体で作らずに分割した理由は,基板を安価に作るため.深圳には Web から入稿・注文できる小ロット試作に対応する基板メーカーがいくつかあり,ほとんどの店舗では 100mm 角以内なら 5 ドル程度で基板が 10 枚作れる.サイズが大きくなると途端に高くなる.

f:id:lunar0:20200222032954j:plain
キーボードの全体像

回路

4x4 のキーパッドが4個 IIC で ATMEGA32u4 にぶらさがっている.昔作った細い基板が余っていたので,それを利用した. IOエキスパンダは MCP23017 .これは秋月で DIP 品が買えるので回路の試作がしやすいとともに,1ポート 25 mA まで扱えて LED 直結で動かすのに便利.

ファームウェア

開発には QMK Firmware を利用した.各キーにはマクロが設定してあり,00_ - f4__はスペース,f4はf行4列)までの文字列を送信する.単一のキーコード(aなど)を送る方式と比較して,利点は次の通り.

  • 理論上は際限なくキーが増やせる*1ので,ルブの有無などのバリエーションも画面上に表示させることが可能.
  • モディファイヤキーを送らずに済み,本体のキーボードと共存しても安全.
  • キーマップの入力がファームウェア,フロントエンドともに楽.

逆に,単一キーコードを送る方式の利点は次の通り.

  • 最初のキーの keydown だけ見ればよいので,反応が速い.
  • 実装がシンプル.

今後何かあるたびに使い回すとすれば,キーマップが柔軟に変えられたほうが良いだろうと考え,前者の方式を採用した.

本体側(デモ用パソコン)

フロントエンド

f:id:lunar0:20200222032015p:plain
ユーザインタフェース

ちょうどいい規模のプロジェクトかなと思って付け焼刃の React で書いてみた.勉強という大義名分のもと React + Redux + Redux-Saga という大所帯になったうえ,キーボード入力を読んで該当するデータを表示する部分も自前実装してある(このせいで当日までに物理印刷ボタンを付けられなかった).

キーボード入力を読んで該当するデータを表示する部分では,次のような実装をしている.

  • キーボード入力の履歴を蓄えておく配列を用意する.
  • 新しい入力を配列の末尾に付け加える.
  • 入力があらかじめ用意したパターンと一致したらアクションを発行し,入力履歴をクリアする.

ローカルで動作すればよいので,キースイッチ・キー配列のデータは JSON ファイルを直接読む形式とした.

ソースコードkymok/keyswitch-tester にある.また,元ネタにした遊舎工房店頭にあるキースイッチテスターのものは adeonhy/switch-tester-web にある.

バックエンド

今回利用したサーマルプリンタは Maker には有名なもので, PyPI に専用のライブラリまである.これに Flask で薄いラッパーをかぶせて使った.Python の既製品を組み合わせただけで,ほぼ何もしていないに等しいが,ソースコードはこちら:kymok/thermal-printer-server

反省

  • Amazon で買える安いスペーサを使ったら基板に不陸が生じた.急ぐにしても,レーザーカッタでアクリル板から切り出すなど,より精度よく作る方法はあったはずである.
  • UIについて,アイテムを画面上のリストに入れて,さらに印刷ボタンを押すのは手数が多すぎた.印刷キーを付けて,押すたびに直前に選択したスイッチが印刷される程度に単純なほうが良かっただろうと思われた.TMMF のゆったりした人通りですらこれなので,混雑したイベントでは使い物にならなかった可能性が高い.
  • ちょっとした記念品になるといいなと思ったが,主にプリンタからモノが出てくるということ自体が子供ウケしていた.
  • Web 技術で作ると UI の修正などをその場でデプロイできて便利.

*1:実際はスキャン頻度に響くので限界はある/計算はしていない

キースイッチを撮影する

f:id:lunar0:20200221003649j:plain
撮影したスイッチ (Kailh Pro Light Green)

機材

今回の倍率は大体 1/2 倍付近なので,市販のマクロレンズでも十分にこなせるはずだが,せっかくなのでベローズと引き伸ばしレンズを用いたマクロ撮影を試してみた.ベローズは程度のよいものが1万円程度,引き伸ばしレンズは2-3000円程度で購入できる.引き伸ばしレンズは絞り値の表示窓から光が漏れるものがあるので,黒テープでふさぐ必要があるかもしれない.

カメラ

  • Sigma fp
  • ASAHI PENTAX ベローズユニット II
  • Rafcamera M42→L マウントアダプタ*1
  • FUJINAR-E 75mm F4.5
  • Leofoto ポケット三脚 MT-03

照明

  • 2x 電気スタンド
  • 台座(乳白アクリル板 t=2 スイッチを定位置に置くための治具つき)
  • 1x コピー用紙

セットアップ

  • 台座を壁の付近に置く.
  • 電気スタンドを天井に当ててフィルライトを作る.
  • もう1台の電気スタンドを直後の壁に当ててバックライトにする.
  • 絞りは F8 とした.*2

f:id:lunar0:20200221023139p:plain

評価

  • ベローズの使い心地は思ったほど悪くない.Lマウントは口径が大きいのが利点だが,M42マウントの内径が小さいこともあり結局四隅はケラレる.これを改善するためには大判カメラにアダプタを付けて撮影するなどが考えられるが,画面の四隅まできっちり使う撮影をする予定はないので今のところはこのまま.
  • Leofoto MT-03 は良くできている.そこまで厳密さを求められない小物の撮影なら,ミニ三脚で手軽に撮ってしまっても良いかもしれない.
  • 照明位置の再現性が落ちそうなのが唯一の問題.ミニスタジオ等を使うなどの改善策が考えられる.

*1:最初 Sigma fp に合わなかったので,こちらで寸法を測定して代替品を送ってもらった

*2:パンフォーカスにしても良かったが,多少開けぎみのほうが軸の形が際立つと判断した.フォーカススタッキングは面倒なのでパス

60% キーボードを作った

名前 (Sugi 6x) について

元々キーボードの脚を杉材で作ろうと計画していた(材料だけは買った)ことと,60%レイアウトより少し多いことによる.

コンセプト

デザイン作業もタイピングもできる携帯可能なキーボード.

デザイン作業適性

カーソルキーはHHKB準拠配置に加えて左 Fn + WASD にも割り当てた.これにより,マウス操作とキーボード操作で右手を忙しく往復することなく作業ができる.たとえば Lightroom を使用するとき,マウスカーソルを現像パラメータの上に置いて左手でカーソルキーを操作することができる.数値入力を多用する場合や,テンキーに重要なショートカットが割り当てられている場合に備え,右 Fn には Num Lock を割り当てた.

デザイン作業に使うため,見た目の地味さとさりげなさを最大限重視した外見としている.

f:id:lunar0:20200219235536j:plain
ホームポジションからほとんど手を動かさずに左手カーソルキー,右手マウスが実現できる

モバイル適性

60%というコンパクトな形状*1と側面に配置した USB Type-C コネクタにより,ノートパソコンの上に置いて使用する場合でも楽に使用できる.

f:id:lunar0:20200220003039j:plain
USB Type-C コネクタが側面に付けてあるためラップトップの上で使いやすい

その他

  • このブログで何度か言及した通り,スペースバーが特殊なサイズであるため,入手に難がある.既製品を鋸で切って貼り合わせるのが一番早い.方法や3Dファイル等は4uスペースバーのビルドログを参照.
  • 今回は M2.5 のねじを使用したが,タップの入手が面倒なので次の版から M3 に改める予定.

*1:自キ界では60%でも大きいほうですが

2019年に始めたこと

昨年はいくつか新しいことを始めてみることにした.うまくいったことばかりではないものの,うまくいかないものは大体一月も保たないので,それ以上続いたことをうまくいったとみなして書くことにする.

英語

Financial Times (FT) を毎日読むのは一年続いた.FT は文章が平明なので,ノンネイティブが読むには丁度よい.記事を Google Keep に要約するのを三ヶ月くらい続けたあたりで a とか the の意味が見えるようになってきた.要約は続かなかったが,要約に疲れる頃にはだいたい記事を最後まで読み通せるようになっていた.今年はプライバシーやデータ資本主義,テックジャイアントへの規制の議論に興味をもって読んだ.

一方で The New York Times (NYT) を読むのは相変わらず習慣になっていない.扱う内容に FT ほど興味がもてないうえ,文章も FT より持って回った書き方をしているせいだろうか.

カメラ

厳密には新しいことではなく,10年前に K-7 と DA35 Limited を振り回していたことがある.身のまわりで数人カメラを買っていたので,それに引きずられるようにしてカメラ趣味を再開した.春頃に GR III を買い,ほとんどの撮影をそれでこなしていたが,標準-中望遠の画角が欲しくなったので fp を追加した.

カメラを趣味だと思うと,普段は30点だがここぞというときに120点を叩き出す機材が選択肢に入ってくる.GR も FA77 も基本的にはそういった部類のものだといえる.

f:id:lunar0:20200103003314j:plain
fp にベローズを付けてみた

GR は毎日持ち歩かないと意味のないカメラなので,常時ポケットに突っ込んである.起動も速いし,あとはオートフォーカスがまともなら言うことはない.これが RX100 系だと,万能だが分厚くておさまりが悪く,画質も GR には及ばない.迷ったときはピーク性能を重視すべきだと考えて GR にした.

Julia

現在関わっている研究プロジェクトでは Python が推奨されているが,遅いので速度が必要な部分を Julia で書くことにした.Python にも速いライブラリはあるが,一般にそれらは C で書かれており,書き換えや並列化が大変である.その点 Julia はライブラリの改造が楽で,簡単に並列化できるので都合がよかった.

一方で,まだ新しい言語なので仕様が不安定であり,また Python ほどのエコシステムの厚みがないのでこれ一本で頑張っていくにはつらい部分もある.可能性は感じるので,導入を主張したぶんの責任をとる程度には勉強していきたい.

Sigma fp を買った

f:id:lunar0:20191222010800j:plain
カメラを撮るカメラがない

概要

Sigma fp を買った.買うときに検討した条件は次のとおり.

  • PENTAX の FA77mm f1.8 Limited を本来の画角で使いたい
  • 毎日持ち歩きたいので,コンパクトなものがよい
  • 見た目が薄っぺらくないものがよい
  • 将来性を考えてミラーレスにしたい

万人におすすめできるわけではないが,合理的に考えればα7IIIを買うべきところをこちらにダイバートさせるだけの独特な魅力があったのも事実.

それにしても,カメラが売れていないらしい.顕示的消費と気軽な撮影の座をすっかりスマホとインスタグラムに明け渡してしまったということだろう.カメラを買っても写真は上手くならないが,スマホを新しくすれば良い画像が作れるわけで,むべなるかな.

使用感

一月ほど使ってみた感想.基本的には発展途上のシステムで,完成された安心感というようなものはない.かなり我慢をして使うことになる.もし本体を売却して別の機種に乗り換えるとしたら,静止画撮影におけるローリングシャッターの強さが一番の理由になるだろうと思う.

f:id:lunar0:20191221232411j:plain
何気ないものを撮るには非常によい

手元にあるレンズは 45mm f2.8 DG DN と FA 77mm f1.8 Limited. 後者はマウントアダプタ経由なのでマニュアルフォーカスかつ絞り込み測光になる.広角側は GR III があり,非常に満足しているのでよほどのことがない限り買い足さないだろう.

Pros

  • コンパクト.
  • SDカードでも FullHD 12bit Cinema DNGが撮れる.
  • レンズキットの 45mm f2.8 DG DN が期待していた以上に良い.
  • 本体がいかにもモダンデザインという感じで好感が持てる.
  • 静止画モードでも波形表示ができる.使ってみると案外便利.

Cons

  • 静止画でローリングシャッタが強く出る.
  • 手ぶれ補正がセンサシフト式ではないので,何も考えずに構図に集中するというわけにはいかない.
  • EVFもチルトディスプレイもない.AFレンズならそこまで困らないが,MFレンズとの組み合わせでは不便なことがある.ビューファインダーの見え味は良いが,かさばって使いづらい.
  • UIは発展途上感がある.
    • TAvモード(絞りとシャッタスピード,露出補正からISO感度を自動で変更してくれる機能)がない.せっかくデジタルで撮っているのだからそれくらい装備しておいてほしい.
    • GR III と比べてタッチパネルやUIの反応が鈍い.
    • ビューファインダーがすばやく取り外せないわりに,フォーカス移動にデフォルトでは2手必要.

マウントアダプタとFA77

FA77 を Sigma fp で使う場合,マウントアダプタが必要.当初中国メーカーの安いアダプタを使っていたが,絞り環と混同しやすい形のローレットが刻んであり,手の感触でわからず不便だなあと思っていたら Novoflex のアダプタ LET/PENT が一瞬安くなったので購入.たぶんアルゴリズムで値付けをしているのだろうが,時々変な値動きをする.

FA77 は古いレンズであるせいか,軸上色収差によるフリンジはかなりひどい.Nikon Z マウントの 85mm はかなり良いらしいので,システムごとそっちでも良かったかなと思うこともあるが,たまにこういう油絵みたいなボケ方の写真が撮れると PENTAX なかなかやるなという気分になる.

f:id:lunar0:20191222000748j:plain
独特の油絵のようなボケ方

せっかくフォーカスリングとフォーカシング機構が機械的に直結されたボケのきれいなレンズがあるので,そのうち三脚に載せて映像に使ってみたい.

f:id:lunar0:20191222024442j:plain