EOS USBコントロール再び | Nature | Photography | Music | Art

Nature | Photography | Music | Art

日々好奇心の趣くまま

サイト内の写真の使用ならびに無断転用を禁じます。

テクニカルな話題です。

随分以前に少々テストして記事にしたArduinoを使ったUSB経由のEOSコントロール。
しばらくは手をつけていなかったのですが、最近必要が出てきてぼちぼち実用化に向けて環境を整えています。

民生カメラ(特に日本製の)というのはテクノロジーの最先端を行っていながら、なぜか他機器との連携という点に関してはかなり消極的です。

外部からカメラの内部状態を自由にコントロールでき他機器との連携ができれば、その可能性は単体機能で撮影するよりも何倍・何十倍・何百倍も広がります。

メーカー側の論理から言うと、外部から変な操作をされた結果のクレームやサポートは避けたいでしょうからそのあたりはあまりオープンになっていません。
しかしながらEOSに関して言うと、そのあたりかなりハッキングが進んでいて、幾つかのオープンソースプロジェクトが存在します。

そのうちの最強のものがMagicLanternになるのでしょうが、これはカメラのファームウェアそのものを乗っ取るものなので、自身でカスタマイズするにはかなり労力とリスクが伴います。(個人的には非常に興味があるのでそのうち挑戦してみたいですが。。)

現実的な解としてはとりあえずUSB経由のコントロールということに落ち着きます。

USBベースのプロジェクトで一番有名なのがLinux&Macベースのgphoto2になるのでしょう。
gphoto2に関しても機会があれば紹介しようと思っていますが、いろいろ細かく弄ってみると多数のカメラをサポートしている分、各々の機種に関しては細かい機能までサポートされていなかったりしてまだ未完成な印象を受けています。

今回は以前にも少し紹介したArduino上で動作する PTPライブラリについて個人の備忘録を兼ねてまとめてみます。
(ただし、参考にされる方は自己責任・No Question・No Supportでお願いします。)

PTPというのPicture Transfer Protocolの略で、最近のカメラの多くがこの規格をサポートしており、この規格を各々のメーカーが独自に拡張させて、非公開機能ながらカメラ制御をUSB経由で行えるようになっています。

このPTPライブラリ、この非公開部分のハッキングを徹底的に行っており、非力なArduino用でありながらかなり完成度が高く(完全ではありませんが)実際使用する撮影パラメータのかなりの部分を自由に操れます。

今回紹介するのはこのライブラリを使用して、PCのターミナルから文字列を送って、ArduinoUSBシリアルポートを経由してEOSを遠隔操作する実例です。
これが動作すると、PCや最近流行のRaspberry PiやBeagle BoneなどのボードLinux上でUSBシリアルの送受信をするプログラムやスクリプトを組むことによって自由にカメラを操作することが可能になります。

蛇足ながら実はこれは今後組み上げるシステム全体の一部となる予定です。最終的にはカメラやドリーや電動雲台やライトを始め、撮影機器一式をボードLinuxから一括コントロールできるというのが最終目的となります。
まあ、いつまでにどこまでできるかは未知の領域ですが。

以上が前置きで、早速手順を。

・準備するもの

Arduino Uno 

【永久保証付き】Arduino Uno

もしくはその他のArduino派生版も幾つかサポートされているようです。本家Web参照のこと

USB Host Shield

私の持っているものは旧型で改造が必要でしたが、最新版はその必要はないようです。

ターミナルソフト
私はputtyを使ってます。たぶん他のものでも動作するはず。

USBケーブル2本 そのうち1本はEOS付属のもの、もう1本はPCとArduino接続用。

・ツールインストール

Arduino Software
ちなみに今回使用したのはver1.6.1

USB_Host_Shield_2.0

Arduino Softwareフォルダのlibrariesの直下に解凍

PTP_2.0

Arduino Softwareフォルダのlibrariesの直下に解凍

・セットアップ・環境確認

このようにArduinoとUSB Host Shieldを組み上げ、Arduino側をPCと、HostShield側をEOSとそれぞれUSB接続



試しにArduino IDEのメニューからサンプルプロジェクト

ファイル->スケッチの例->PTP2.0->Canon EOS->EOSCapture

を読み込み

スケッチ->検証・コンパイル
ファイル->マイコンボードに書き込む

を実行

以上でプログラムがArduinoの書き込まれ、EOSがカチャッと撮影を始めればめでたく環境構築が成功です。
露出やフォーカスがマニュアル以外になっていると測光が終わらないと撮影しないので、その場合はレンズキャップは外して明るい方を向けておいた方がよい。

ちなみにこのライブラリ、Nikon一眼もサポートされているようですが、私はNikonカメラは持っていないので未確認です。

続編では実際に上で書いたようなターミナル経由で制御する自作プログラムを動かしたいと思います。