α7sのシャッターをシリアル制御する

2021/9 追記:ソニーの端子はUSBの形をしているが、USBと互換性をもちながらカメラ制御用のピン配列が追加されている。ステレオミニプラグに変換するアダプターケーブルが売られているので、これを利用したほうが安価に済む。ステレオミニプラグの端子を短絡させてカメラの動作を観察し、ピン配列を調べれば良い。根元に近い部分がGNDで、それと先端(オーディオならL)またはその次(R)とを短絡させる。

以下、原法:

シリアルでソニーα7sのシャッターを制御するために、カプラーを制作した。

MacのUSB経由シリアル信号を送り、「E」の1バイトでシャッターが切れるようにする。

必要なもの

IMG_1659
全体像

 

方法

+00のマイクロドライバーを使って、リモートコマンダーのケースのねじ4つを外して開く。続いてねじ1つを外して、基板を取りだす。ねじは5本とも同じもの。

モジュラーケーブルを端から20cmのところで切断し、短い方をリモートコマンダーに接続する。芯線を取り出し、ハンダメッキしておく。

取り出した基板のスイッチの端子を同定し、ハンダを盛る。基板のハンダの融点が高いので注意。

スイッチの端子に芯線をハンダ付けする。このとき、芯線やハンダがスイッチより高くならないように注意。高くなるとボタン類と干渉する。

芯線の色とスイッチの端子との対応を記録するために写真撮影。

IMG_1655
基板に芯線を半田付け。写真の上のスイッチは電源、中央のスイッチはシャッターリリース、下のスイッチはシャッター半押し

 

表側のケースの側面、シャッターボタンの左下に、ドリルでモジュラーケーブルより少し細い孔を開ける。ナイフでU字型の溝に加工する。基板をケースに取り付ける。このとき接続した芯線をうまく取り回し、ボタン類と干渉しないようにする。空間に余裕が少ないので、難しい。

IMG_1658
リモートコマンダーのシャッターボタンの端子をモジュラーケーブルを使って引き出した

 

モジュラーケーブルの他方の端にヘッダーピンをハンダ付けする。延長アダプターを使って、加工したケーブルのモジュラー端子同士を接続する。

Arduino UnoにDF RobotのPrototyping Shieldを載せ、ミニブレッドボードを貼り付ける。写真のように回路を作る。黒い部品は東芝製フォトカプラTLP-785。12, 13番ピンでシャッター用のフォトカプラを、10, 11番ピンで確認用のLEDを制御する。10と12が半押し、11と13がリリース。

IMG_2107

 

モジュラーケーブルの芯線をヘッダーピンでブレッドボードに接続する。12番で半押しのスイッチが、13番でリリースのスイッチが入るように。ここでは黄・緑・赤・黒の順。

IMG_2098

下のようなスケッチを作り、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から直接カメラをコントロールすることは可能。

参考: