NEX-5タイマーレリーズ

NEX-5には長時間露光やインターバル撮影用途の機能が存在しない*1。しかし幸いなことに、リモコン入力でシャッターが切れるようになっている。これを利用してタイマーレリーズを作製した。

NEXのリモコンのフォーマットについて

調べてみると、ArduinomultiCameraIrControlというライブラリがあり、そのライブラリにSONY用の関数がある。しかし本来の制作者のサイトはすでに404となっているようで本家はたどれないが、ググるといくつか引用された物が出てくる。

SONY用の関数を見てみると、どうやらSONYフォーマットに似ており、赤外線のキャリア周波数40kHzで、リーダーの後に(1011 0100 1011 1000 1111)2 = (B4B8F)16のデータを送ればよいらしい。若干ライブラリで利用されている数値は異なるが、まぁそれは微修正の結果なのだろう。

作製

いざ作製する。死蔵しているATMEGA88Vを消費すべく利用するが、MEGA88Vはメモリが少ないのでArduinoは利用せずArduinoのライブラリをAVR-GCCを利用した物に移植する。

テストしながらパラメータ調整を行ったところ、肝心のリモコン波形出力部分は以下のような形で落ち着いた。

//#include <util/delay.h>が必要

void NEX_high(uint8_t pulsenum){
	int pause = (1000/40/2)-4;	//40kHzの半周期(-4は微調整)
	for(uint8_t i=0;i<pulsenum;i++){
		PORTC |= (1<<PC4);	//IRLED ON
		_delay_us(pause);
		PORTC &= ~(1<<PC4);	//IRLED OFF
		_delay_us(pause);
	}
}

void NEX_shotNow(){
	  uint8_t _seq[] = {1,0,1,1, 0,1,0,0, 1,0,1,1, 1,0,0,0, 1,1,1,1};
	  for(int j = 0;j<3;j++){ // 二週以上必要
		  NEX_high(92);	// 2320usec, 2320/25
		  _delay_us(600);
		  for (int i=0;i<sizeof(_seq);i++){
			  if (_seq[i]==0){
				  NEX_high(23);	// 575usec, 575/25=23
				  _delay_us(600);
			  }
			  else{
				  NEX_high(47);	// 1175usec, 1175/25=47
				  _delay_us(600);
			  }
		  }
		  _delay_ms(10);
	  }
}

以上の状態でNEX_shotNow()を呼べばシャッターが切れるようになった。後は省略するが、ハードウェアを作り、バルブタイマー、インターバルタイマーの部分を実現し完成。

完成品

f:id:soiyadakara:20170828020240j:plain

今回はDIPスイッチを多用し、二進数でタイマー時間を設定するようにした。基板上のステレオジャックを介し赤外LEDを接続しており、

f:id:soiyadakara:20170828020214j:plain

3Dプリンタで作ったジグで赤外線受光部に光が当たるように設置した。

これで長時間露出できる!

*1:NEX-5R以降はwifi機能が付き、スマートフォン経由でいろいろできるらしいが、、、