これは何か

スマホにカメラグリップを取り付けて、普通のカメラのような操作感で撮影するためのプロジェクト。 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データ: 公開予定