オイラのGX-100。本体にインターバル撮影モードが
搭載されているので、夜景でも昼間でも連写して
timelapseするときには本体だけでとりあえず
出来ちゃうんだけど、以前からいくつか不満点が少々。
(1)最短5秒から5秒おきでインターバル時間を設定
→5秒より短く出来ないので、特に昼間でシャッター
速度が速い撮影でtimelapseしても、5秒単位でしか
撮れない。(もっと短い間隔で連写したい)
(2)インターバル間隔ではなく、待ち時間っぽい
→5秒などと設定して撮影しても、実は5秒より少し
長い撮影間隔になる。どうやら、撮影間隔ではなく
待ち時間っぽい。(出来れば正確な間隔で撮れる
ようにもしておきたい)
といったあたり。
で、居酒屋ガレージさんのサイトで以前見つけた
タイミンググラフ
http://blogari.zaq.ne.jp/igarage/article/795/
を参考にさせていただき、Arduinoでちょっと実験
をしてみた。(情報感謝!)
レリーズのために使うスイッチには、以前秋月で
買っておいた2段タクトスイッチ
http://akizukidenshi.com/catalog/g/gP-05354/
これとか使えるといいんだけど…
小さい表面実装はちょっとアレなので、とりあえず
普通のタクトスイッチを2つ使うことにして、
どちらか1個だけ押されたときにはAFスタート、
両方押されたときにシャッターが切れるという動作
で考えてみる。
(これなら、上記の2段タクトスイッチでも同じ
プログラムで制御可能)
とりあえずArduinoを使ってシャッターが切れるだけ
というスケッチをサクッと書いてLEDを点灯させてみる。
2つのタクトスイッチをプルダウンで接続、LEDを
1k抵抗で接続。後でこのLEDをUSBケーブルに換える
だけで動かせるという算段。
スケッチはこんな具合。
//*******************************************
//*** ***
//*** release test for GX-100 ***
//*** ***
//*** signal output on D7 ***
//*** button input1 on D2 ***
//*** button input2 on D3 ***
//*** data input0 on D14 ***
//*** data input1 on D15 ***
//*** data input2 on D16 ***
//*** data input3 on D17 ***
//*** data input4 on D18 ***
//*** ***
//*******************************************
/* */
/* include libraries */
/* */
#include <MsTimer2.h>
/* */
/* global variables declare */
/* */
volatile char button_value;
/* */
/* declare user functions */
/* */
/* output a short pulse (30ms) */
void output_short_pulse(void){
digitalWrite(7, HIGH); // output high on cable
delay(30);
digitalWrite(7, LOW); // output low on cable
}
/* output a long pulse (150ms) */
void output_long_pulse(void){
digitalWrite(7, HIGH); // output high on cable
delay(150);
digitalWrite(7, LOW); // output low on cable
}
/* wait a short moment (30ms) */
void wait_short_moment(void){
delay(30);
}
/* wait a interval (100ms) */
void wait_interval(void){
delay(100);
}
/* case of 1 button pushed */
void af_start(void){
output_short_pulse();
}
/* case of 2 buttons pushed */
void release_on(){
wait_interval();
output_long_pulse();
}
/* case of both button released */
void button_off(){
wait_interval();
output_short_pulse();
wait_short_moment();
output_short_pulse();
}
/* input buttons */
void button_chk(){
char i;
button_value = 0;
for (i=2;iif (digitalRead(i) == HIGH){
button_value++;
}
}
}
/* */
/* initialize */
/* */
void setup() {
//set up i/o pins
pinMode(7, OUTPUT); // output for cable release
pinMode(2, OUTPUT); // input from button1
pinMode(3, OUTPUT); // input from button2
pinMode(14, OUTPUT); // input data0 from dip0
pinMode(15, OUTPUT); // input data1 from dip1
pinMode(16, OUTPUT); // input data2 from dip2
pinMode(17, OUTPUT); // input data3 from dip3
pinMode(18, OUTPUT); // input data4 from dip4
MsTimer2::set(10, button_chk); // 10ms period
MsTimer2::start();
}
/* */
/* main loop */
/* */
void loop() {
char b;
while ((b=button_value) == 0){
} /* wait for signal changes */
if (b == 1){ /* normal pattern */
/* af_start */
af_start();
while ((b=button_value) == 1){
} /* wait for signal changes */
if (b == 0){ /* af only */
button_off();
} else if (b == 2){ /* push both buttons */
release_on();
while ((b=button_value) != 0){
} /* wait for signal changes into "0" */
button_off();
}
}else if (b == 2){ /* start from "2" pattern */
af_start();
release_on();
while ((b=button_value) != 0){
} /* wait for signal changes into "0" */
button_off();
}
}
MsTimer2を使ってチャタリング防止をしてるんだけど、
まぁこんな大げさなことしなくても本当は大丈夫。
個々の処理でそれなりの時間間隔が空くはずなので、
チャタリングは影響しないはず。まぁ、あとで
アレコレ面倒にならないように一応。
コイツをUSB-A→USBmini-Bケーブルを使って接続
してみる。
いつも向きがわからなくなるので、USB端子のピン配置
は写真で残しておく。Arduinoから1k抵抗を介して
Vbas端子に繋げばok。
で、動かしてみる。
まずはAFでピントあわせ。片方のタクトスイッチだけ
押してみる。ok。離してみる。ok。さらに押したり
離したりしてみても問題なく動く。
次は2個両方押し。シャッターがちゃんと切れる。ok。
連続でシャッター切ったり、AFだけ合わせたりを
組み合わせてみるも問題なく動作。スバラシイ。
(改めて情報感謝!)
面白いのは、シャッターは「開く」タイミングだけ
指示して、「閉じる」タイミングにあたる信号は
存在しないこと。そう。バルブモードじゃなくて
マニュアル露出モードでシャッター速度を指定する
カメラなので、「閉じる」タイミングが無いわけね。
さらに、ケーブルを抜き差しし直してから再度シャッター
切ってみる。大丈夫。ちゃんと動く。
イイカンジで動くことが解ったので、あとはArduino互換
のちっちゃな専用基板を作って使いたいな。
ちなみにMEGA328基板で実験したんだけど、実は
MEGA8でも動くように考えて作っているところ。
以前ブートローダ書き込んだままあまり使ってない
チップを再利用する作戦。なんでもかんでも
MEGA328じゃなくてもイイのだ。
スケッチ上で定義だけしてあって使ってないI/Oピンは、
DIPスイッチかロータリースイッチを使って、インターバル
時間を指定できるようにする算段。
まぁ、あまり多機能にしようとすると大量の情報を
入力させないといけなくなって面倒なので、念頭に
おくのは短時間のケース。5ビット分の情報を入力
出来るように、5ビット分のタクトスイッチと
5個内蔵の抵抗アレーをゲットしておいた。
とりあえずここまで。
残る課題は、単発でシャッター切るモードに加えて
インターバルで撮影するモードを載せることかな。
あと、どんな形状でどんな操作方法にするか…
本当は、インターバル撮影の最中でもボタン押せば
シャッター切れるような造りになってるとなお良し
なんだけどな。GX-100はそこまでは要らないか…
http://www.nicovideo.jp/watch/1345821364
新ゲーグラ45回。全然知らないマシンだなぁ。
http://www.jiji.com/jc/zc?k=201208/2012082600003&rel=&g=http://www.jiji.com/jc/zc?k=201208/2012082600003&rel=&g=
ルイ=アームストロング氏死去。ご冥福を。