ニコンから新しい小型ミラーレスZ50が発表されました。このZ50、キットレンズの16-50mm含めて小さくてよいのですが、一点気になるのがアクセサリーターミナルがなくなってしまったこと。これまでのリモートケーブルが使えなくて、無線のリモコンだけになってしまいました。星的にはこれはちょっと困りもの。
ということで、USBで接続するリモートコントローラを作ってみます。PTPコマンドでカメラをコントロールします。

使うのは手元に転がっていたArduino Uno(の互換機)とUSB Host Shield。以前なんかで使ったやつなので、キッタナイww
IMG_20191020_234414

これにオープンソースのPTPライブラリを使って制御します。


ちょちょっとソース書いて動かしてみるとちゃんと動きました。カメラはD7000で試しています。

星を撮るにはバルブ撮影が必須ですが、PTPの標準オペレーションコードにはバルブ撮影用のコードはありません。その代わりニコンのカメラにはベンダーコードとして、
撮影開始コマンド InitiateCaptureRecInMedia 0x9207 
撮影停止コマンド TerminateCapture  0x920C
が用意されていますが、残念ながらD7000の時代にはこのコマンドはまだなかったようで、この動画ではLiveViewの開始、停止コマンドを発行しています。といってもこの動画では背面液晶に絵が写らず、肩液晶にPCと表示されるだけなのでわかりにくいですが・・


ニコンはPTPコマンド情報やPCから使うためのSDKを無料で公開していて、各機種のPTPコマンドの情報はこちらから入手できます。Z50については2019/10/21の時点では、まだ公開していないみたいですね。



今回使ったPTPライブラリではニコン用とキャノン用のベンダーコードがヘッダに定義されていますが、すべてのコードが定義されているわけではありません。
上記のInitiateCaptureRecInMediaコマンド/TerminateCaptureコマンドも現状定義されていなくて、メーカが提供するPTPコマンド情報に基づいて追加する必要があります。

んでは、とこれでタイマーなどが使えるリモートコントローラを作ってみようと思いますが、そのために時間をセットするための画面は必須。画面にはコントローラに定番のSSD1306を使ったOLEDモジュールをつなごうと思います。秋月電子で売っているこれです。
で、Adafruit_SSD1306.hとAdafruit_GFX.hをincludeしたところメモリが足らない、、とのこと orz...
動かしてみたら、やはりまともに起動しませんでした・・

mem

RAMが2KBしかないArduino Unoではちょっと凝った画面を出すのはつらいですね。Unoは諦めて、使い慣れたESP32あたりで作ることにしましょう。これだとWiFiやBLEが乗っているから、将来無線でのコントロールとかもできるし。