2021/9 追記:ソニーの端子はUSBの形をしているが、USBと互換性をもちながらカメラ制御用のピン配列が追加されている。ステレオミニプラグに変換するアダプターケーブルが売られているので、これを利用したほうが安価に済む。ステレオミニプラグの端子を短絡させてカメラの動作を観察し、ピン配列を調べれば良い。根元に近い部分がGNDで、それと先端(オーディオならL)またはその次(R)とを短絡させる。
以下、原法:
シリアルでソニーα7sのシャッターを制御するために、カプラーを制作した。
MacのUSB経由シリアル信号を送り、「E」の1バイトでシャッターが切れるようにする。
必要なもの
- The Arduino Starter Kit
- ソニー α7s
- ソニー リモートコマンダー RM-VPR1
- 電話用モジュラーケーブル(4芯)
- モジュラーケーブル延長アダプター(6極4芯)
方法
+00のマイクロドライバーを使って、リモートコマンダーのケースのねじ4つを外して開く。続いてねじ1つを外して、基板を取りだす。ねじは5本とも同じもの。
モジュラーケーブルを端から20cmのところで切断し、短い方をリモートコマンダーに接続する。芯線を取り出し、ハンダメッキしておく。
取り出した基板のスイッチの端子を同定し、ハンダを盛る。基板のハンダの融点が高いので注意。
スイッチの端子に芯線をハンダ付けする。このとき、芯線やハンダがスイッチより高くならないように注意。高くなるとボタン類と干渉する。
芯線の色とスイッチの端子との対応を記録するために写真撮影。
表側のケースの側面、シャッターボタンの左下に、ドリルでモジュラーケーブルより少し細い孔を開ける。ナイフでU字型の溝に加工する。基板をケースに取り付ける。このとき接続した芯線をうまく取り回し、ボタン類と干渉しないようにする。空間に余裕が少ないので、難しい。
モジュラーケーブルの他方の端にヘッダーピンをハンダ付けする。延長アダプターを使って、加工したケーブルのモジュラー端子同士を接続する。
Arduino UnoにDF RobotのPrototyping Shieldを載せ、ミニブレッドボードを貼り付ける。写真のように回路を作る。黒い部品は東芝製フォトカプラTLP-785。12, 13番ピンでシャッター用のフォトカプラを、10, 11番ピンで確認用のLEDを制御する。10と12が半押し、11と13がリリース。
モジュラーケーブルの芯線をヘッダーピンでブレッドボードに接続する。12番で半押しのスイッチが、13番でリリースのスイッチが入るように。ここでは黄・緑・赤・黒の順。
下のようなスケッチを作り、Arduinoに送る。
/* Serial_Camera_Coupler This sketch is written to convert shutter release command from Spot Advanced to close/open signal for a camera remote. This work is licensed under a Creative Commons Attribution 4.0 International License. <http://creativecommons.org/licenses/by/4.0/> by Tohru Murakami */ const int ledPin_1 = 10; // the pin the led 1 is connected to const int ledPin_2 = 11; // the pin the led 2 is connected t0 const int optoPin_1 = 12; // the pin the optocoupler 1 is connected to const int optoPin_2 = 13; // the pin the optocoupler 2 is connected to const char shutterRelease = 'E'; // Shutter release command (exposure). const int latentcy_1 = 25; const int latentcy_2 = 150; void setup() { // make the pins outputs pinMode(optoPin_1, OUTPUT); pinMode(optoPin_2, OUTPUT); pinMode(ledPin_1, OUTPUT); pinMode(ledPin_2, OUTPUT); // initialize outputs digitalWrite(optoPin_1, LOW); digitalWrite(ledPin_1, LOW); digitalWrite(optoPin_2, LOW); digitalWrite(ledPin_2, LOW); // initialize serial communication Serial.begin(9600); // print message. Serial.print("Sensor ready!"); } void loop() { char c; if (Serial.available() > 0) { // Start a process upon receiving data. c = Serial.read() ; // Read 1 byte. Serial.write(c) ; // Call back the data. if (c == shutterRelease) { digitalWrite(optoPin_1, HIGH); digitalWrite(ledPin_1, HIGH); delay(latentcy_1); // give the optocoupler a moment to activate digitalWrite(optoPin_2, HIGH); digitalWrite(ledPin_2, HIGH); delay(latentcy_2); // give the optocoupler a moment to activate digitalWrite(optoPin_1, LOW); digitalWrite(ledPin_1, LOW); digitalWrite(optoPin_2, LOW); digitalWrite(ledPin_2, LOW); } } }
シリアルモニターで「E(C/R)」とタイプしてLEDが一瞬光るのを確認。
リモートコマンダーをカメラに接続し、カメラの電源を入れる。シリアルモニターで「E(C/R)」とタイプしてシャッターが切れるのを確認。
問題点
- Spot AdvancedでArdinoのつながっているポートがでてこない。USB-シリアルアダプターが必要か?
他の方法
ソニーのCamera Remote APIが公開されているので、USBから直接カメラをコントロールすることは可能。