こんにちはムウラです。
普段はGoogleCloudパートナー企業でバックエンドエンジニアをやっております。
本業とは別に、去年の終わりごろから、趣味のクラシックカメラ関係のガジェットを開発していたため、そのネタでMaker Faire Tokyo 2022に出展させて頂きました。
今回初出展でしたが、色々と学ぶことがあったので投稿します。
- 当日見に来てくださった方々へ
開催時点では準備できていなかった、メイキングエピソードも公開しましたので、是非見ていってくださいませー
作品について
純粋な機械式フィルムカメラに取り付けることで、撮った日時や場所、そしてF値・シャッター速度などのメタ情報を記録できるガジェットを開発しました。
デジカメのメタデータ記録機能Exif
と二眼レフのReflex
の掛け合わせて、ExiFlexと命名しました。
メインコンセプト
- ベースはスマホアプリ、フィジカル部はBLEマイコンで対応 ※
- セントラルがiPhoneアプリ、ペリフェラルがESP32からなるシステムを採用
- ストロボシンクロ端子をトリガーして、シャッター押下を検出する
- クラシックカメラに搭載されている唯一の電子インタフェースを活用(大袈裟)
- 光量を測定して適正露出を計算する
- 市販されている露出計の動作を、ガジェットに組み込む
※ これについては出展を経て、若干考えが変わりつつあるため後述します
システム構成
気付いたらこうなっていた 以下のような構成で設計を行いました。
参考にした露出計
通常、露出なんてカメラが勝手に調整してくれるので、こんな器具使う機会はまず無いと思うのですが、クラシックカメラでは必需品のため、簡単に説明します。
露出計は以下のような測定器具で、右上LED●が点灯すると、適正露出を意味します。
下部にあるダイアルで目標とするF値またはシャッター速度を設定し、適正露出よりも明るい場合は▶︎が、反対に暗い場合は◀︎が点灯します。
その場合は、目標としない側(目標がF値ならシャッター速度、シャッター速度ならF値)を増減して、適正露出を探っていくという使い方をします。
ガジェットへの組み込み
この露出計と同じ機能をiPhoneアプリに組み込むことで、撮影時のF値、シャッター速度をアプリに記録する設計としました。
鋭い方ならお気付きかもしれませんが、実際のカメラのF値、シャッター速度がどうなっているのかは全くお構いなしです!(笑)
露出計通りにカメラを調整して撮影した、という前提での機能となります。
技術的な課題
BLE (Bluetooth Low Energy)によるIoTガジェットを開発する上で、以下の課題に取り組みました。
- セントラルをiPhoneアプリで開発
- Core Bluetoothを用いたSwiftネイティブアプリ
- UIはSwiftUIで作成
- フィルムカメラのメタファーをアプリに取り入れる
- 露出計を作る
- 環境光測定機能を作る
- アルバム整理機能を作る
- GPS情報を取得してGoogleMapにピンを立てる
- ペリフェラルをESP32マイコンで開発
- 開発言語はArduino(C/C++)
- シャッターシンクロ端子の信号を検出する
- Luxセンサー、三刺激(XYZ)センサーを搭載する
- これらを搭載した基板を作成
- センサーの値を読み取ってBLEでiPhoneへ飛ばす
Core Bluetoothは初挑戦でしたが、定番のこのサイトは大変参考になりました。
ESP32側は、こちらのライブラリを使用しました。
完成までの道のり
計画・検証 (2021年)
-
10月〜
ハロウィンにて、クラシックカメラで色々写真を撮ったが、現像後に当時撮影時の露出、シャッター速度を知りたくなり、ExiFlexの構想を考える。 -
12月〜
ESP32のBLEサンプルプログラムを作成し、ESP32からの通知をBluetoothスキャンアプリで受けられることに感動する。
初期構築
- 1月〜
ちゃんとしたiOSアプリを作るために、SwiftUIの学習を始める。こちらの本が大変役立った。
-
2月〜
Core Bluetoothの学習を始め、状態遷移の設計を行う。また、iPhoneアプリにBLEペリフェラル選択画面を作成する。 -
3月〜
iOSアプリにBLEマイコンと連動した撮影機能を作成する。
メイン基板にシンクロケーブル及び照度センサーを実装し、現在の撮影機能の原型を作る。
MFT2022応募〜選考結果
MFT2022応募締め切りの4月末当時、バックエンド畑の僕はiOSアプリ開発に苦戦してましたが、何とかESP32とiOSアプリをBLE連動できる状態になったため、意を決して応募することとしました。
当初、ESP32 Dev Moduleをブレッドボードに載せただけのへっぽこな状態でしたが、6月中旬、当選のメールが来ました。
応募当初の完成状態から厳しいと思っていただけに、本当に嬉しかったです!
以下、紹介頂いた記事となります。
当選後の開発状況
-
環境光測定モード
DigiKeyを物色していたら、三刺激センサーTCS3430なるものを発見しました。
これ使えば、現像データ化後にオートホワイトバランスを実現できるのでは?と思い立ち、1ヶ月がかりで部品調達&アプリ実装。
アプリ上にCIE1931の馬蹄図が表示できて喜んでいたのも束の間、無補正でのセンサ出力値は実際値とのずれが大きく、キャリブレーションが大変でした。 -
GoogleMapを組み込む
本業がGCPパートナーということもあり、学習も兼ねてGoogle Mapを組み込んでみました。 -
CoreDataによるデータ保存
データの保存機能がありませんでしたので作成しました。
記録されるデータの特性として、フィルムとカット(撮影の1コマ)のリレーション関係があるため、CoreDataを使用したリポジトリを実装しました。
完成した作品
開発はまだ続いているため、MFT2022出展バージョンとなります。
アプリ
以下の3画面からなるアプリを開発しました。
左から順に、撮影画面、環境光測定画面、アルバム整理画面(開発中)となります。
ハード
試作品ということで、秋月のユニバーサル基板にESP32Dev Moduleおよびセンサー類を実装してあります。
それらを固定アームで接続して、台座を介して三脚ネジでカメラに固定しました。
出展当日
開発開始から10ヶ月程度経ちましたが、あっと言う間に当日が来てしまった感じでした。
ブースの様子
全体の様子です。思っていたよりもスペースが広い!!スカスカな展示スペースが少し寂しいですね。。。
メイキングビデオを流すディスプレイを置いたり、リーフレット等も作りたかったですが、開発だけで精一杯で断念しました。
そして周りの先輩方Makerの展示には圧倒されました。Σ(゚Д゚)
良かった点とイマイチだった点
シャッターシンクロ端子をトリガーしてiPhoneアプリが反応する仕掛けは、良い反応を頂き嬉しかったです。
シャッターを切った後に、フィルムが巻き取られるアニメーションが良い、という反応もありました。
一方、環境光測定モードのCIE1931馬蹄図については時間をかけた割にはあまり反応がなかったため、改善の余地ありです。
ただ、色温度が分かるのは嬉しいという意見もあったため、表示方法をもう一捻りしたいところです。
説明の仕方について
まず初めに、何の装置なのかを説明するのが大事だと思いました。
1日目の最初の頃は、「これはセンサーです」みたいな感じで正しく説明できておらず、初見殺しな説明をしておりました。。。
そしてこの作品の場合、露出計という市販されている製品の機能があるため、それについて簡単に説明した上で比較することで、正しく作品のコンセプトを伝えられると感じました。
お客さんとの交流
色々な方に見ていただくことで、感想や意見が得られるMakerFaireは素晴らしいと思いました。作った本人なので「完全に理解した」と思っていましたが、自分でも気付かないことも、往々にしてあるものだと思いました。
- F値やシャッター速度はフィルムに記録しているのか?
- 撮影情報はiOSアプリに記録しています。
- フィルムに焼き込みが出来たら、それはそれで凄すぎますね(アフレコ機能?!)
- その昔、フィルムのコマの間に、撮影情報を書き込んでくれるカメラもあったらしい
- 現像されたデータにどうやってExif情報を埋め込むのか?
- 仕様が決まっていませんorz
- 主題にデカデカとExifと謳っているが、まだまだ「Exifみたいな」というレベルで、Exif規格に準拠している代物では無いです。。。
- とは言え、今後対応したい機能ではある。
- カメラのボディからF値とシャッター速度を引き出している?
- いいえ、カメラではなく露出計の測定値を記録しているだけです。
- 露出計の値通りにカメラを調整して撮影すれば、結果的にF値とシャッター速度が記録されるというトリックです。
- 友人が大学の同好会で、似たような露出計自作してましたw
- マジですか! てか東大きらら同好会、って何すか?!
- 懐かしいカメラですねー 某メーカーで設計してました
- 神降臨キタ (゚∀゚) !!
頂いたアイディア
数々のアイディアをいただきました。この場を借りてお礼いたします!
- 筐体関係
- 3Dプリンターで筐体製作
- 小型化
- より小さなBLEモジュールを使用する
- LILYGOの存在を知る
- Seeed Studioの存在を知る
- バッテリーなどが統合されたESPモジュールを使う
- M5Stackを使う
- 脱ユニバーサル基板
- 導電インクで基板製作
- より小さなBLEモジュールを使用する
- F値、シャッター速度の自動取得
- カメラボディのF値、シャッター速度をOCRで検出
- ストロボ端子のTTL信号をハックして撮影情報を取得する
出展を終えて
出展を経て、さまざまな意見を頂き、今後取り組むへき課題が見えてきました。
今後の課題
当初は、「ベースはスマホアプリ、フィジカル部はBLEマイコンで対応」というシステムで検討してきましたが、実際の利用シーンを考えると、片方の手でカメラを持ち、もう片方の手でスマホを持つというのは無理ゲーすぎます。
出展を経て、この部分が最大の問題であることに気付かされました。
スマホは常にポケットに入れておき、勝手に撮影情報が記録されていくようなもの
が、一つの落とし所なのかなと思えてきました。
今後も改良を重ねていきますのでよろしくお願いします(*_ _)ペコリ
おまけ
出展の合間、いくつかブースに遊びに行ったのですが、千葉大学教育学部 MAKERS-EDUさんのブースでなんとExiFlexのオリジナルストラップを作っていただきました。
皆さん素晴らしい先生になれることを期待してます!