リモートカメラで打上げを撮る!~H-IIAロケット15号機の巻(中編)

このエントリーをはてなブックマークに追加
はてなブックマーク - リモートカメラで打上げを撮る!~H-IIAロケット15号機の巻(中編)
Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

○では実際に作ってみる

サーボモーターのカメラへの取り付けは、近所のホームセンターで購入したクランプと金具を組み合わせることで、簡単にできた。サーボモーターは、余っていた「KRS-788HV」を使用した。トルクはそれほど必要ないので、これで十分。カメラはパナソニックの「DMC-FZ3」を使っている。

最初に、土台となる金具をクランプでしっかり固定 その上に、シャッターの位置にあわせてサーボを取り付ける

リレーはパナソニック電工のフォトMOSリレー「AQZ102」を購入。ちょっと高い(といっても700円くらいだが)ので、使い回しができるようにソケットも利用した。これを、KCB-1のデジタル出力から制御して、外部バッテリからカメラに電源を供給する。カメラ側の電源スイッチをONにしておけば、供給開始と同時にカメラを起動できる。

フォトMOSリレーのほか、ケース、コネクタ、ピンヘッダ、基板なども購入 システム構成。マイコンで、サーボの動作と、カメラの電源供給を制御する

開発したプログラムはこちら。原因は良く分からないが、タイマーの誤差が結構大きく、1時間で実際よりも12秒ほど早く動作してしまう。ただし、この誤差はランダムではなく、毎回一定なので、運用でなんとかできる感じだ。

remote.c

#include <led.h>
#include <pwm.h>
#include <wait_timer.h>
#include <pio.h>
#define target_hour 24	//システム起動(時)
#define target_min  50	//システム起動(分)
#define start_hour  03	//タイマー始動(時)
#define start_min   45	//タイマー始動(分)
void main(void)
{
cpu_init();			//CPU初期化
ledgrn_on();		//緑LED点灯
wait_timer_init();				//タイマー初期化
pwm8_init(PIO0, PWM_F8, 77);	//PWM初期化
ledred_on();		//動作確認用の点滅
wait_timer_sec(1);
ledred_off();
wait_timer_sec(1);
ledred_on();
wait_timer_sec(1);
ledred_off();
//指定時間だけ待機
wait_timer_min(target_hour*60+target_min-start_hour*60-start_min);
//カメラ電源投入
pio_out(6, HIGH);
//カメラ起動待ち
wait_timer_sec(10);
//撮影開始
pwm_start(PIO0);	//PWM出力開始
pwm_out(PIO0, 38);
wait_timer_sec(1);
pwm_out(PIO0, 42);
wait_timer_sec(1);
pwm_out(PIO0, 38);
//指定時間だけ撮影
wait_timer_min(30);
//撮影終了
pwm_out(PIO0, 42);
wait_timer_sec(1);
pwm_out(PIO0, 38);
wait_timer_sec(1);
}

wait_timer.h

#include <timer.h>
_Bool			flg_timer;
unsigned long	cnt_timer;
void wait_timer_init(void);
void wait_timer_ms(unsigned long);
void wait_timer_sec(unsigned long);
void wait_timer_min(unsigned long);
void wait_timer_hour(unsigned long);
void wait_timer_day(unsigned long);
// タイマー初期化
void wait_timer_init()
{
cpu_int_set();
ta0_set(FQ10Hz);
}
// 指定時間(ms)だけ待つ関数 ※最小単位は100ms
void wait_timer_ms(unsigned long ms)
{
cnt_timer = ms / 100;
flg_timer = TRUE;
ta0_start();
while(flg_timer) {};
ta0_stop();
}
// 指定時間(秒)だけ待つ関数
void wait_timer_sec(unsigned long sec)
{
wait_timer_ms(sec*1000);
}
// 指定時間(分)だけ待つ関数
void wait_timer_min(unsigned long mi)
{
wait_timer_ms(mi*60000);
}
// 指定時間(時間)だけ待つ関数
void wait_timer_hour(unsigned long h)
{
wait_timer_ms(h*3600000);
}
// 指定時間(日)だけ待つ関数
void wait_timer_day(unsigned long d)
{
wait_timer_hour(d*24);
}
// 割り込みルーチン
#pragma INTERRUPT /B ta0_int(vect=21)
void ta0_int()
{
if (--cnt_timer==0) flg_timer=FALSE;
}

動作のテスト。指定時間にカメラの電源が入り、起動を待ってから、10秒後にシャッターを押す


後編に続く。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*