リモートカメラで打上げを撮る!~H-IIAロケット15号機の巻(中編)
○では実際に作ってみる
サーボモーターのカメラへの取り付けは、近所のホームセンターで購入したクランプと金具を組み合わせることで、簡単にできた。サーボモーターは、余っていた「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秒後にシャッターを押す
後編に続く。
				
			


