mbed USBMIDI で Lightroom 用の MIDI インターフェイスを作る | tech - 氾濫原 の続きで、実際に使えるものを作りました。まぁもう作ったの一ヶ月ぐらい前なんですが……
回路図
機械式インクリメンタルロータリーエンコーダー (スイッチ付き)を19個、Gateron 緑軸スイッチ (Cherry MX 互換スイッチ) 7 個を使います。ロータリーエンコーダーはA相・B相・スイッチと3接点あるので 19 * 3 + 7 = 64 接点あります。キリのいい数字ですね。
ロータリーエンコーダーのA相・B相も単にスイッチとみなせるので、ダイオードを使ったキーマトリクスを構成し、16bit I2C GPIO (MCP23017) 1つを使って順次全て読み出します。その際、同一エンコーダーのA相B相は同時に読めるようにマトリクスの配線に注意します。
USB を繋げるメインのマイコンは LPC11U35 です。
基板
上段にある8個のエンコーダーは色別の色相・輝度・彩度に対応することを想定しています。その上にある3つのスイッチはレイヤー切り替えを想定して、エンコーダーの数を仮想的に3倍に増やしています。
かなり配線が面倒ですが、この回路では特にシビアなところはなく、繋がってさえいれば動くと思われるので FreeRouter で自動配線したものをほとんどそのまま使っています。ジャンパとして配線しやすいように、via の位置を多少変更したぐらいです。
切削で基板を作る都合上、片面基板+ジャンパとしたいため、FreeRouter 上ではtopのコストを100ぐらいに設定しています。なので、かなり無理に遠まわりしている配線が多々あります。それでもジャンパは34個ぐらいあるので面倒ですね。
製造は CNC 切削です。6時間ぐらいかかりました。
ファームウェア
基本は I2C GPIO のキーマトリクスを読むだけですが、ロータリーエンコーダーのデコード処理が入っています。
とても安いタイプのロータリーエンコーダーを使っているのですが、どうも挙動がおかしくて綺麗に相を得られないことがあります。これで困った結果、以下のようなロジックになっています。
- エンコーダー1クリックで4パルス発生するので、相対値として LR に送るときに 1/4 する
- 相が綺麗に発生しないので、不正なステートになったら「前回の値」が繰替えされているとみなす
これで割とうまくいったように思います。しかし完全に不良品みたいな、正相と逆相が常に対応して発生するエンコーダもあって、安物は厳しいですね。こういうのは捨てるしかない。ロータリーエンコーダーはちゃんとしたのを買ったほうがいいことは分かってるつもりなんですが、ちゃんとしたのはやはり高いですね。
ケース
基板設計時から Fusion360 でモデリングしつつすすめていたので、KiCAD 側から再度基板データを出力して Fusion360 でインポートし、ケース設計に役立てました。
モデルは 3D プリンタで出力しました。下側は一発でいい感じにできたのですが、上側がなかなかうまくいかず3回ほど出力しなおしています。
コスト概算
安く作ることではなく欲しいものを作るのが目的なので、あまりコストは大事ではありませんが以下の通りかかります。
- ロータリーエンコーダー 19個
- スイッチ 7個
- MCP23017
- 生基板 250x150
- LED 3個
- キーキャップ7個
- フィラメント 200g
- M3 15mm ビス
- M3 ナット
- トップ
-
tech
-
Lightroom 用ハードウェアの自作