これは何か
スマホにカメラグリップを取り付けて、普通のカメラのような操作感で撮影するためのプロジェクト。 3Dプリントのグリップ本体と、専用のAndroidカメラアプリのセット。 グリップはUSB-C有線でHIDデバイスとして認識される。アプリはCamera2 APIで組んでいて、シャッター半押しによるAFロック、ロータリーエンコーダでのズーム・フォーカス操作、RAW撮影、手動露出制御ができる。
なぜ作ったか
スマホのカメラ性能は十分すぎるくらい上がった。でも何でかあまり撮ろうという気になれませんでした。 画面をタッチしてフォーカスを合わせて、別のところをタップしてシャッターを切る。片手で持って、もう片方の手で操作する。あるいは片手持ちで親指をにゅっと伸ばしてシャッターボタンに届かせる。ミラーレスを使ったことがある人なら、グリップを握ってファインダーを覗きながら半押しでピントを確認して切る、あの一連の操作がいかに自分に馴染んでいたかをかんじる。 既存のスマホ用グリップも市販されているが、大半がBluetooth接続のシャッターボタンだけで、AFロックや細かいパラメータ制御には対応していない。「半押し」ができない。 だからグリップもアプリも両方自分で作ることにした。
デバイス
- マイコン: RP2040 Zero
- 接続: USB-C有線(HIDキーボードとして認識)
- 筐体: 3Dプリント(Bambu Lab A1 Mini、PETG/PLA + TPUライナー)
- 入力: 2段階シャッター、サブボタン、ロータリーエンコーダ、追加タクトスイッチ
- ファームウェア: CircuitPython + usb_hid
有線接続にしたのはBluetooth特有の遅延を避けるため。シャッターの半押しでAFを制御する以上、入力遅延は致命的になる。HIDキーボードとして認識させることで、Android側のドライバ不要で動く。 固定機構はスマホ下部を覆うポケット型。
アプリ
- 言語: Kotlin / Jetpack Compose
- カメラAPI: Camera2 API
- 最小Android: 12以上
- アーキテクチャ: MVVM(ViewModel + StateFlow)
撮影UI: L字XMB
UIにはPS3のXMB(クロスメディアバー)を参考にしたL字型インターフェースを採用した。横軸に値リスト、縦軸にカテゴリ一覧。全パラメータが常時見える状態でライブビューを妨げない。 タッチでもグリップのロータリーエンコーダでも同じ操作体系で動く。「対象を切り替える」と「値を変更する」が直交する1次元軸になっているので、どの入力デバイスでも自然に対応できる。
タッチ操作: AFとシャッターの分離
画面上のシャッターとAFを2つの独立したボタンにした。シャッター単独タップでAF+撮影、AF単独タップでAFロック、AFからシャッターにスワイプでAFロック撮影。スワイプ保持で最大3枚連写。 スマホの画面で「半押し」を再現するのは3D Touchが廃れた今かなり難しい。「半押し→押し切り」を「タップ vs スワイプ」に置き換えるのがこのUIの核。
開発ステップ
デバイス
- Step 1 [完了] — 常用端末専用マウント、最低限のボタン
- Step 2 — 汎用マウント、ファンクションボタン実装
アプリ
- Step 1 [完了] — Camera2プレビュー、静止画撮影、KeyEventでシャッター
- Step 2 [完了] — AFロック制御、MotionEvent対応、MFフォーカス・ズーム制御
- Step 3 [完了] — RAW(DNG)保存、露出・ISO・SS手動制御、HDR
- Step 4 — キーマッピングプロファイル保存、グリッド・水平儀、フォーカスピーキング
リンク
- アプリ: ストア登録予定
- CADデータ: 公開予定