NEX-5で微速度(タイムラプス)動画を撮る
ざっくりした手順は
- インターバルリモコンを用意する
- カメラを固定してお好きな間隔で写真を撮る
- 1枚を1コマとして動画を作成
- ウマー
以上。
インターバルリモコンを自作
インターバルリモコン?はソニーから発売されてないので、どこかから調達しなくてはいけない。自作して少量売っていた人もいたようなのだが、とっくに売り切れているので自作するしかない。
1. 純正リモコンの信号を見る
まず信号を知る必要があるので、ソニーのカメラのリモコンを調達する。たぶんテレビのリモコンと同じ方式だろうと高をくくり、秋月のセンサをオシロにつないで出力を見てみると普通に波形が見えた。テレビと同じで38kHzのキャリア波で信号を送っているらしい。
詳しいフォーマットは調べても分からなかったので、オシロの画面で時間をはかってみると、以下のことがわかった(ここでいうHighはLEDが発光している間のことを指す。秋月のリモコン用センサは出力が逆になるので注意)。テレビのフォーマット?と似てるっぽいので、全く同じかもしれない。特にH/Lの時間は多少誤差がありそう。
- 2500usくらいHigh -> 500usくらいLowが開始信号
- 続けて20bitのデータを送信
- 1300usくらいHigh -> 500usくらいLow が1(と、いうことにする)
- 700usくらいHigh -> 500usくらいLow が0
- これを20回出すまでが1回の命令になる。リモコンはボタンが押されてる間、一連の信号を繰り返し続ける模様。
ソニーの純正リモコンのうち、NEXで使えるのはたぶん2個だけなので、この2つの信号をメモする。
- 即時シャッター:{1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1};
- 2秒後シャッター(集合写真に使うの?):{1,1,1,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1};
2. 適当に信号を発信する
信号がわかったので、あとは赤外線LED(秋月で10個100円の、940nm, 55mWのものでOKだった)をこのとおりに光らせるだけである(さらっと書いてるけど、能力がないので割と苦労した)。僕が使えるのはAVRくらいなので、手元にあったATTiny45(8pinDIPなのでかわいい)で作ることにした。
回路はこんな感じ。電源はエネループ(単三)を直列に2本で、2.5Vくらいだけど動いた。3時間くらい1秒間隔で信号出しっ放しにさせてみたけど問題なく最後までいけたので電池の持ちは十分だと思う。たぶんだけどLEDの消費電流がちょっとAVRのドライブ能力を超えてた。気にしないけど。
実際には、空いてるポートにスイッチを付けて、その状態に応じてインターバルを変えられるようにしてあります。1秒から15秒まで対応。ただ、内蔵クロッ クを特に考えず使っているので、間隔はかなりいい加減です。ちゃんとやりたい人は外部クロックと割り込みでやらなきゃいけないんじゃないかな?
完成図 |
AVRとか難しくてよくわからないので、PWMを使って38kHzのキャリア波を作ることにした。Tiny45のソースはこんな感じ。
[cpp] #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/wdt.h> #include <util/delay.h>
int main(void){
// 1MHzで動く想定 DDRB = 0b00000010; // led以外input PORTB = 0b00111101; // pull up
TCCR0A = 0b00100001; //高速PWMだっけ TCCR0B = 0b00001000; // PWM stop
OCR0A = 13; // MAX。たぶんこれで周波数決める。 OCR0B = 6; // この値あたりでH/Lが切り替わるのでduty比を決める(たぶん)。
const unsigned char shutter[] = {1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1};
unsigned short i, num, interval;
for(;;){
for (num = 0; num < 5; num++){ //1回あたり5連続で送信する
// start bit TCCR0B | = 0x01; // high _delay_us(2500); TCCR0B = 0b00001000; // low _delay_us(500); |
for (i = 0; i < 20; i++){ // ビット列部分
if (shutter[i]){ // if 1 TCCR0B | = 0x01; // high _delay_us(1300); }else{ // if 0 TCCR0B | = 0x01; // high _delay_us(700); } |
TCCR0B = 0b00001000; PORTB &= ~0x02; _delay_us(500); }
// 1回の送信終了、間隔を空ける _delay_ms(11.25);
}
// インターバルを決める interval = 5;
for (;interval;interval–){ _delay_ms(1000); }
}
return 0; } [/cpp]
こんなかんじ。
PWMで38kHzのキャリアを出しているので、PWM制御レジスタをいじってPWM自体をOn/Offしてるだけ。かんたん!
撮る
リモコンができたら、あとはNEX-5(たぶんαでもいけるはず)のドライブモードをリモコンにあわせて放置して、電源を入れたリモコンをカメラにくくりつけるだけ。で、たくさん写真が自動で撮れるので、VirtualDubModあたりで動画にする。
富士山で天体写真を撮ってきたのがこちら(外気温3度くらい)。このときは10秒露光(+ノイズリダクション)を470枚くらい撮るのに3時間かかった。バッテリは満タンからスタートしたけどほぼ空になったので、その辺が限界なんだろう。
リモコンとしてはちゃんと動いているので満足です。