NEX-5タイマーレリーズ
NEX-5には長時間露光やインターバル撮影用途の機能が存在しない*1。しかし幸いなことに、リモコン入力でシャッターが切れるようになっている。これを利用してタイマーレリーズを作製した。
NEXのリモコンのフォーマットについて
調べてみると、ArduinoでmultiCameraIrControlというライブラリがあり、そのライブラリに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()を呼べばシャッターが切れるようになった。後は省略するが、ハードウェアを作り、バルブタイマー、インターバルタイマーの部分を実現し完成。
完成品
今回はDIPスイッチを多用し、二進数でタイマー時間を設定するようにした。基板上のステレオジャックを介し赤外LEDを接続しており、
3Dプリンタで作ったジグで赤外線受光部に光が当たるように設置した。
これで長時間露出できる!