EOS Kiss用インターバルタイマーの作成

(2010/8/22、2011/7/4更新)

1.はじめに

EOS Kiss digitalで食連星の連続撮影をする時にカメラ付属の制御ソフトRemoteCaptureを使うとインターバル撮影が出来て便利です。

カメラとPCをUSBで接続し一定間隔で撮影しながら画像をPCに保存して行きます。

ところが、同時に別な望遠鏡をステラナビゲータで制御させつつCCDの撮影をしようとするとPCが複数欲しくなります。

移動観測ではあまり沢山の設備を持って行けないので小型の機器を揃えるようになります。

そこで、PCを使わずにインターバル撮影させる装置を作りました。

PCを用いないので撮影画像は本体のCFカードに保存します。

2.リモコン

EOS Kissには別売でリモコン(RS60-E3)があります。

リモコンとカメラをつなぐステレオプラグは赤丸の方でステレオマイクロプラグを使っています。

通常の携帯機器で使用されるステレオミニプラグより小さい物です。

ステレオプラグですから接点(スイッチ)が2つあります。

この接点の接触順が正しくないとEOSのシャッターは切れません。

リモコンを分解して調べてみると以下の順でスイッチが動作していました。

・シャッターを押す
  S1をON
  S1がONのまま、S2をON

・シャッターをはなす
  S1がONのまま、S2をOFF
  S1をOFF

作成するインターバルタイマーはRS60-E3リモコンの動作を再現させますので、RS60-E3リモコンが使えるカメラならばEOS Kiss digital以外でも使えます。

3.インターバルタイマーの基本動作

このシャッターの接点(S1,S2)をC-MOSのスイッチ(HC4066)に変えます。

そして、スイッチのON/OFF制御をPICマイコンで行います。

マイコンに操作スイッチを付けてインターバル撮影間隔の設定とスタートボタンを設けます。

PICマイコンのRA0,RA1に操作スイッチを付けます。

スイッチを押すと8個のLEDが順番に点灯します。

これでインターバルを選択します。

選択出来るインターバルを15秒,30秒,60秒,2分,3分,5分,10分,20分の8種類にしました。

PICマイコンのRA2,RA3をC-MOS Switchの制御に使います。

4.回路図

HC4066がステレオプラグの接点をON/OFFさせるスイッチになります。このHC4066をPIC16F84で操作します。右上の2つのスイッチが操作用のスイッチです。このスイッチでインターバル時間の選択と撮影開始ができます。電源は006P電池ですので9Vです。PICマイコンは5Vで動作しまから78L05で5Vにします。

秋月電子のAKI-PIC18ユニバーサルボードキットをユニバーサル基板に実装しましたので今までに示した回路以外はユニバーサルボードの部分を使っています。

5.プログラム

以下がプログラムソースです。

/*
	EOS Kiss digital
	Interval timer
		2010.Aug by K.Nagai
*/
#include "16F84.h"

int porta @ 0x5;	/* port A address	*/
int trisa @ 0x85;	/* port A status	*/
int portb @ 0x6;	/* port B address	*/
int trisb @ 0x86;	/* port B status	*/
int op_reg @ 0x81;	/* option registor	*/

wait0()
{	unsigned int t1;
	for (t1=0;t1<60000;t1++) { t1=t1; }
}

wait1()
{	unsigned int t1,t2,t3;
	for (t1=0;t1<65000;t1++) { for (t2=0;t2<42387;t2++) {for (t3=0;t3<3;t3++) { t3=t3; } } }
}
main(){
	int s1_s2, sw_0_count, sw_1_count, loop_count, porta_work, portb_work, int_timer, i;

	op_reg=0x7f;		/* pull up	*/
	trisa = 0x03;		/* RA0,1 input	*/
	trisb = 0;		/* RB   output	*/
	porta = 0;
	portb = 1;		/* RB0  Hi	*/
loop1:
	sw_0_count=0;
	sw_1_count=0;
	for (loop_count=0; loop_count<10000; loop_count++) {
		porta_work=porta;
		porta_work=porta_work & 3;
		if (porta_work == 1) { sw_0_count=sw_0_count+1; }
		if (porta_work == 2) { sw_1_count=sw_1_count+1; }
	}
	s1_s2=0;
	if (sw_0_count<5000) { s1_s2=2; }
	if (sw_1_count<5000) { s1_s2=1; }

	if (s1_s2==1)		/* select switch */
	{	portb_work=portb;
		portb_work=portb_work*2;
		if (portb_work==256) { portb_work=1; }
		portb=portb_work;
	}
	if (s1_s2==2)		/* start switch */
	{
		portb_work=portb;
		portb=0xff;
		wait1();
		portb=portb_work;

		int_timer= 80;
		if (portb==0x1)  {int_timer=  1;}	/* RB0 15秒 */
		if (portb==0x2)  {int_timer=  2;}	/* RB1 30秒 */
		if (portb==0x4)  {int_timer=  4;}	/* RB2 1分  */
		if (portb==0x8)  {int_timer=  9;}	/* RB3 2分  */
		if (portb==0x10) {int_timer= 13;}	/* RB4 3分  */
		if (portb==0x20) {int_timer= 22;}	/* RB5 5分  */
		if (portb==0x40) {int_timer= 45;}	/* RB6 10分 */
		if (portb==0x80) {int_timer= 90;}	/* RB7 20分 */
loop2:
		/* shutter */
		porta=0x04;wait1();/* S1 on */
		porta=0x0C;wait1();/* S2 on */
		porta=0x04;wait1();/* S2 off */
		porta=0x00;        /* S1 off */

		/* interval timer */
		for (loop_count=0; loop_count < int_timer; loop_count++) {
			for (i=0; i<15; i++) { wait1(); }
		}
		portb_work=portb;
		portb=0xff;
		wait1();
		portb=portb_work;
		goto loop2;
	}
	wait1();
	goto loop1;
}

設定出来るインターバルは15s,30s,60s,120s,180s,300s,600s,1200sです。

しかし、出来あがった物は16s,30s,56s,121s,173s,291s,592s,1180sでした。理由は分かりませんがコンパイラが妙でコーディングした通りに動いてくれないのでした。使ったコンパイラは、Grich RC Inc.のPicC V1.4です。ソースを見るとわかりますが、妙なコーディングです。こうしないとちゃんと動きませんでした。wait0と言う関数は使っていませんが削除するとインターバルが滅茶苦茶になります。他にも非効率なコーディングがあります。しかし、このようにしないと動作しませんでした。結果的にこれで動作していますのでコードは正しいハズです。プログラムのHEXファイルを下に置きます。

eos_timer.hex(2KB)

インターバル時間の選択スイッチは一秒毎にポーリングしていますので感度が悪く感じます。使用する際には長押しして使うと使い勝手が良いです。

スタートスイッチを押すとLEDが一瞬全点灯して動作を開始します。その後、シャッター動作の度にLEDが全点灯します。

停止させる機能はありません。電源スイッチをOFFにさせて停止させます。

-------------------------------------------------------------------

以下は(富阪氏の)インターバル2分,3分,4分,6分,8分,10分,12分,15分です。

eos_timer2.hex

eos_timer2.c


EOS Kiss用インターバルタイマーの作成2

(2012/12/5)

今までのインターバルタイマーでは露出時間が30秒以上の撮影が出来ませんでした。

それはEOS Kiss digitalは30秒より長い露出時間設定ができないからです。

30秒より長くするにはバルブを使うようになります。

そこで、このインターバルタイマーのプログラムを変更して30秒より長い露出時間でインターバル撮影が出来るようにしました。

使い方は

電源を入れた時はインターバル時間の設定モードになっています。SELECTボタンを押し続けると3分→5分→10分→15分の順でトグルになります。設定したい時間の所でボタンを離してSTARTボタンを押します。

次は露出時間の設定モードになります。SELECTボタンを押し続けると0分→1分→2分→3分の順でトグルになります。設定したい時間の所でボタンを離してSTARTボタンを押すとインターバル撮影が開始します。

カメラ側がバルブでない時は露出0分にして下さい。カメラ側の露出時間が30秒の場合、30秒露出でインターバル撮影をする事になります。

露出時間0分の時は設定したインターバル時間で撮影をしますが、それ以外の場合は、露出時間+インターバル時間が撮影間隔になります。

eostime2.hex

eostime2.c


ホームへ戻ります
inserted by FC2 system