カメラのインターバルタイマーの製作

 改造の履歴

  1、タイマーIC LMC555で試作
  2、2015.4.15 ワンチップマイコン化(R8CM11A) 
  3、2017.9.27 シャッター信号をワンチップマイコンで発生(リモコンML-L3不要) 


 当局が、持っているデジタルカメラのニコンD70では、インターバルタイマー機能がないので、2008年7月に蝉の孵化を撮影して以来インターバルタイマーが、欲しいと考えていて、リモコンML-L3を利用すれば何とかなるとは思っていた。
 100均のキッチンタイマーを時間のコントローラにして、ML−L3を働かせれば良かろうと思いながら、数年が経ち、仕事も終わり、生活の総てが自由時間になった事からやる気になった。

                
  ニコン純正ML-L3のリモコンの内部                      赤印のピンがSW
    (参照 http://www.geocities.jp/tenmonya2/PAGE13/TG_TIMER/TG_TIMER.htm)
    純正品には、ワンチップのマイコンらしくセラロックが組み込まれている事が見える。

 ズームレンズで28−300oを持ってはいるが、部屋の中での撮影にもう少し短い焦点距離の物が欲しいと常々思っていた。新製品で16−300oが発売されたことを知り、通販で買うとして、ストロボとリモコンのML−L3も買うことにした。アマゾンの広告を見ると【 ワイヤレスリモコン Nikon ML-L3 互換 シャッター リモコン】という紛い品が、¥440円とあったのでドサクサに紛れ、失敗を考え2個を注文した。このリモコンが使えるカメラが、フィルムカメラを含め3台あるので無駄にはならないつもりだ。

            
   商品名Fro NikonのML-L3もどきの内部

 早速、分解してみると純正とは使ってあるICがまったく違う。そして、押しボタンの接点は、純正品よりも簡単に取り出せることに気を良くした。これは、16pinDIPのIC GX-001(MC10P11T16S)なる物が使ってあって、汎用のリモートコントロール用のワンチップマイコンらしい?。(1−4、13−16ピンの8ピンしか半田付けされていない)

 まず、キッチンタイマーを買ってきて分解して、基板上で制御ボタンらしきパターンに数キロオームの抵抗を通し、電源に触ったり、アースに落としてみて、プルアップか?、プルダウンか?を調べて診た。電源電圧は、1,5ボルトなので少々のことでは壊れないだろうとタカをくくっての作業である。その結果、Sボタンは、プルアップ状態で作動していることが判った。

      
   キッチンタイマーの外観     内部の様子(これで100えん)
  金属の円筒が時計などに使用している時計用の32.768kHzのクリスタルとしたら、秋月ではこれだけで100円だ!。
 参考 :なぜこの周波数? 32768Hz(10進数) = 8000(16進数) = 1000000000000000(2進数)に答えがある。
 青色のものは、形からチョークコイルらしい?。

 タイマーには、分(MIN)、秒(SEC)、(START/STOP)の3つのボタンがあり、(START/STOP)ボタンへの信号の加え方、タイムアップでブザーが鳴るからこの信号を外部に取り出してシャッター信号、再スタート信号にすれば良かろうとの思惑からの調査した。

 まず、タイムアップのブザー信号はと、シンクロで観測すると1khz位の信号が60oSec程の間隔で「ピッピ、ピッピ」と32回でる。ただ、余分なことに総てのボタン操作で「ピッ」と信号を出す。従って、タイマーがタイムアップしてストップ信号を戻すと「ピッ」と鳴り、タイマーは停止する。次にスタートボタンをもう一度押すとまた「ピッ」と鳴り、タイマーは再スタートする。
 タイムアップの最初の信号をストップに使うと、タイムアップして直ちにストップするが、再度スタートできない。つまり、スタート、ストップを繰り返す仕掛けにしなければならないことが解かった。

 そこで、ワンショット回路のドミノ倒し、つまりシリーズに繋いで最初のワンショットでストップ信号を作ってたいまーを止め、、次のワンショットで再スタート信号をだすようにすれば、「いける!」と考えて試作にかかった。

 下図にある様にタイムアップしてでる最初の@パルスをストップ信号にしてタイマーを止める。タイマーは、止められるとセット時間を表示して次の操作を待っている。そこに、同じ時間のタイマー動作を再度スタートさせる為に2段目のLMC555から遅延したスタート信号を与えて、再度カウントを開始させる。必要な回数だけ繰り返して、総ての動作を停止させると素晴らしいが、回数を数えるカウンターが必要になるから複雑になり、大げさな物になってしまう。そこで人間が関与して自分で数えるなり、適当な時間を経過したところで電源を切って止めることにした。

 バルプシャッター、一定時間間隔の撮影でバルブシャッター時間での設定、更にバルブ撮影でノイズ除去等の細かいことを設定するとなるとワンチップマイコンなるものを登場させれば、かなり小さな物に出来ると思う。(何時も思うが、プログラムが書ければ、人生は変わった?。また、付け焼刃の電気屋さんなので回路常数は、適正に計算して決めたわけではなく、適当に資料を眺めてトライ&エラーでの結果)。

 一応、バルブシャッターを制御できるが、シャッターが開いている時間と次にバルブシャッター開始するまでの時間が、同じになるので撮影時間間隔が長いとなると用途は、限られることになると思う。つまり、シャッター開放時間と撮影時間間隔が同じとなってしまう。

 さて、試作をどうすると考え、これまでは蛇の目基板に直接試作して来ているが、ブレッドボードを使ってみた。こういった試作は、ブレッドボードが最適と思い知らされ、もっと早く使っていればと悔やんだ。

 コントローラのML−L3の電源は、3ボルト、キッチンタイマーは1,5ボルトとなっているから、制御回路の電源電圧は、3ボルトし、CMOSのICを使う事にした。74HC123或いはLMC555とあれこれ考えたが、結局、LMC555でいくことにした。適当な回路定数で手持ちのブレッドボードに試作して、動作を確認し、いくつかのホームページを参考にさせていただいて試作を続け、最終結果を蛇の目基板に組み立てた。
 

           
 2つの基板は部品側を向き合わせた2段重ねにした              リモコンからのリード線引き出し
 この2段重ねは、部品同士の隙間にそれぞれの部品が収り、電池の収納させた。

 試作途中、ICの規格から1.5Vでも働くことを確認し、ML−L3とも接続にフォトカプラを検討したが、3Vのリレーの在庫があったので絶縁を兼ねてリレーを使うことにした。キッチンタイマーが1.5V、ML−L3と制御回路が、3Vと2系統の電源が必要になった。キッチンタイマーの消費電流は、測ってみると待機時は数μAで、ブザー鳴動時に数mAと判った。ならばと、LMC555で50%のデューティ比の無安定マルチで発信させ1.5VのDC−DCコンバータを実験してみると、レギュレーション、リップルともに他の用途ならば、とても耐えられない状態だが、十分実用になったので電源を単4電池2本の3Vにできた。(デューティー比を工夫すれば改善出来きるかな?)
 使っているリレーをフォトカプラーに変更すれば、消費電力を格段に小さくできるだろうとは思う。(実験の価値は、大いにある)

 市販のプラスチィックケース(62×98×34)にちょうど良く(強引?)電池を内蔵させて組み立てることができた。キッチンタイマーとリモコンは、両面テープでケースに貼り付けてそれなりの姿に出来上がった

            
      正面                 上部から                     リモコンとタイマーの様子

 このンターバルタイマー頑固な癖もあるが、十分実用になると判断している


 使い方の癖

 まず、STARTスイッチのOFFを確認して電源をONし、タイマーを所定の時間に設定する(最大99分99秒)。そして、タイマーのSTARTボタン押してタイマーをスタートさせ、コントローラーのSTARTスイッチをセットする操作を守らなければならないものになっている。己で製作し、己で使うのだから十分に実用になると判断した。しかし、パワーオンリセット回路を組み込んで、電源オンで信号が出てしまうことを防せぐ必要があったかもしれない。
 さらに 電源のみを入れて「リモコンのボタン」でも単独に操作できる様にしてある。

 このリモコンは、最大99分99秒の間隔で60msのパルスでシャッター信号を出すだけ。つまり、シャッターボタンを一瞬押すだけと同じなので、シャッターボタンを押したままになるバルブ撮影は、できない。インターバル時間は、カメラのシャッタースピードより長くなければならない。したがって、天体観測の用途に向かない。


 ソフトウェアーのNikon Capture4を買えば、コンピュータからD70をコントロールできるらしい。他の機種では付属品を用意して無線LAN経由でのコントロールができる様だが、ワイヤレスの物は無かった。

 タイミング良く、ヤフーオークションで売りに出ていたものを500円で落札して、MacintoshG4 OS9.22,MacintoshG5 OX10.4.11、WindowsXPにインストールして試してみたが、さんさんたる結果になった。
 WindowsXPは、起動するとブルー画面に落ち、MacintoshG5 OX10.4.11では、関係のサイトを見に行くが、そこにはもうサーバが、無く何ともならない結果に終わった。

 MacintoshG4 OS9.22のみで、何とか画像(RAWデータ)処理が、出来るのみだ。画像処理ではUSBのディスクと認識するが、カメラコントロール側は、カメラを認識できないとダイアログがでて使えなかった。送料込みで¥800円なのでこんなもんかと思うことにして、今までRAWデータが、処理できなかったので半歩前進と考ええることにした。

 調べるともっと多機能のワーヤー式のリモコンも市販されているが、ワイヤレス方式となると結構高額になるし、千数百円の物はケーブル式ではカメラ側にシャッター機能が無いと使えない。
 市販の【プロ専用/液晶LCD/タイマー機能付/撮影回数設定無制限】と歌っている各種のカメラに対応しているシャッター リモコンコードレリーズなる物を利用し、その出力でこのリモコンのML−L3を制御してやれば、そのままワイヤレスのコントローラができるだろう。

 以前から気づいてはいたが、同じD70があるとそちらも乗っ取ってしまうので周りを確認して使う必要がある。逆も真なりで、他人のリモコンで自分のD70のシャッターも動作してしまう。勿論、リモコンモードであることは言うまでもない。


 完成したとして、庭木の伐採を始めたのでテスト撮影で3時間ほど10分間隔で撮影してみた。
その結果、カメラは、電池では持たないからACアダプターを使う、ならば、このタイマーもACアダプターで使えば良いことに気づいた。そこで、DCジャックを取り付けてACアダプターで使えるように改造した。


 改めてD70の仕様を見てみるとシャッタースピードは、8000分の1秒から30分の範囲にあるから夜間分単位のシャッターを使う時、下図の様にインターバルをシャッター時間以上に設定してやればよい。

      

 例えば、露出時間30分の時、インターバルを31分とすれば、前のインターバルのシャッターが閉じてから次のシャッターを信号を与える事になるから、それなりの夜間撮影?でも可能となるだろう。そして、ノイズ除去は、RAPフリーソフト版等のソフトに任せれば、カメラ内蔵のノイズ除去で、露出時間+ノイズ除去時間=2倍の時間が不要になるから、30分までのシャッター時間は使えると考えてもよさそうだ。25分露出で、インターバル30分とすれば、感覚的にすっきりして使えるのではなかろうか?。





その後 ワンチップマイコン化  2015.4.15

 使い方の癖 も引き継いでいる

 頭の体操でワンチップマイコンを動かしたいと予ねてから思っていたことから、こいつをワンチップマイコン化に、初めの一歩として取り組んだ。

 以前からいずれかのワンチップマイコンで「PICでも?」と考えたり、知り合いになった豊橋技術科学大学生は、「AVRですよ!」と言っていたし、いろいろ余分な事を考えていたが、身近にいるお師匠さんの鶴の一声でで「R8CM11A & R8CM12A」と「C++」にあっさり落ち着いた。
 ネット等世間の資料は、圧倒的に少ないがいつでも気軽に聞けることは、何者にも代え難い。

 そんなわけで資料片手にLEDを点滅させるものを参考に何とか考えたものである。記念すべき、実用第一号機となった。

       
     R8CM11Aワンチップマイコン化の基板          LM555を使ったロジックICの基板
     すっきりした

 R8CM11Aワンチップマイコン化の回路図
    
    時間を制御するだけだから、ロジックより遥かに簡素になった


!!!!!!! 資料とにらめっこで書いたC++のメインプログラム !!!!!!!!!!
クロックの部分は、資料を参考にさせていただいた
キッチンタイマーの出力は、約60mSのパルスが約60mS間隔で出力されることから、パルス幅とパルス間隔と考え、後は「トライ&エラー」とプログラマーにとっては禁断の手法で決定した。
 どうも人間の手でボタンを押す操作は、100ms位の時間が必要らしい。


/*======================================*/
/* インクルード */
/*======================================*/
#include "sfr_r8m12a.h"
/*======================================*/
/* プロトタイプ宣言 */
/*======================================*/
void init( void );
void timer( unsigned long timer_set );

/***********************************************************************************
Function Name : ConfigureOperatingFrequency
Description : Sets up CPU operating speed.
This function configures the CPU operating frequency.
Parameters : none
Return value : none
***********************************************************************************/
void ConfigureOperatingFrequency(void)
{
   prc0 = 1;
   hocoe = 1;
   asm( "nop" );
   asm( "nop" );
   asm( "nop" );
   asm( "nop" );
   hscksel = 1;
   scksel = 1;
   locodis = 0;
   prc0 = 0;
}
/***********************************************************************************
End of function ConfigureOperatingFrequency
***********************************************************************************/


/************************************************************************/
/* メインプログラム */
/************************************************************************/
void main( void )
{

int i;
init();

   while( 1 ) {
  for (p3_7 = 0; ; ){
   if( p3_7 == 1 ) {
   p1_7 = 1;
   p1_1 = 1;
   timer(30);
   p1_1 = 0;
   timer(30);
   p1_2 = 1;
   timer(100);
   p1_2 = 0;
   timer(30);
   }
   else {
   } //
   }
   }
}

/************************************************************************/
/* R8C/M12A スペシャルファンクションレジスタ(SFR)の初期化 */
/************************************************************************/
void init( void )
{

   pd1 = 0xff;
   pd3 = 0x47;
   pd4 = 0xff;
   pda = 0xff;
   pur3 = 0xb8;

/************************************************************************/
/* タイマ本体 */
/* 引数  タイマ値 1=1ms */
/************************************************************************/
void timer( unsigned long timer_set )
{
   int i;

   do {
   for( i=0; i<871; i++ );
   } while( timer_set-- );
}

/************************************************************************/
/* end of file */
/************************************************************************/



 「記念すべき第一号作品!」で、強引にマイコン化した「ちから ヅク」の部分があり、もっとソフトで対応するべきだろうと思うけどとにかく使えるものになった
 タイマーをセットしている間でもリレーは、作動するので強引にリレー回路の電源を「オン/オフ」してキッチンタイマーをセット後にスタートSWを動作に切り替える邪道とも言える回路にした。

 でも実用になる !





(2015.4.20)追記

 強引にリレー回路の電源を「オン/オフ」するとはもっての外で、プログラムでコントロールしなければならない。

if文while文の解説を読み返し、使っていない端子の 「p4_7 端子」を使って、ここへの状態で動作を開始するか? 否か?をスイッチするように考えてみた

 下図のように回路は、リレー電源から#3PinにSWを移設した。
 

 




 メインプログラムの部分を以下の様に変更した



/************************************************************************/
/* メインプログラム */
/************************************************************************/
void main( void )
{
   int i; // 変数の宣言
   init(); // マイコン機能の初期化
/**************************************/
// p4_7 で動作開始
/**************************************/

   while(1){
   if( p4_7 == 0 ) {

   if( p3_7 == 1 ) {

   p1_1 = 1;
   timer(30);
   p1_1 = 0;
   timer(30);

   p1_2 = 1;
   timer(100);
   p1_2 = 0;
   timer(30);

   }
   else {
   p1_5 = 1;  //テスト時にLEDを点灯する
   }
   }
     else {

   }
   }

}

******************************************************



 少しだけスマートになったか?。

 ほんのちょっとだけしか働いていないから、せめてカメラへの信号出力も出来るようにすることを目標して、とりあえずこの状態で実用にする



 2016.3.16 追記

 下図のようにしても動作することを実験して確認した。リレーが、無いだけ簡素になった。
  (リレー接点にTRスイッチを配線しての実験)
     

 実験で確認したが、リモコンML-L3を使わないで直接LEDを駆動する方式に変更する予定なので実際の基板変更をしない。
 (ブレッドボードでの試作は、完了している。)






 2017.9.25 追記

     ****************** ( バージョン3 ) ***************************

 もう少し、スマートな物にしたいとの思いから、改良を加え、2つのモードを持たせた。


    一定の間隔でシャッター信号を発生する連続モード


    一定時間後に一回だけシャッター信号を発生するモード

   バルブシャッターモード (2017.12.17訂正)
    スタートSWでバルブシャッターを開き、指定時間後バルブシャッターを閉じる


    任意にシャッター信号を発生できるSWを設けた(リモコンML-L3と同じ)



 更に、小型化と自前でシャッター信号を発生させることを目指した。



 1、小型にする

   
 同じキッチンタイマーを使う    ケースの厚さは、1/2に

 この作業は、プリント基板を少し小さく作り変える事と、電池を「単5」にして半分の容積にできたた。(電池寿命は、実測で約2日間)
 


 赤外線ダイオードにリード線付を使った
   BSチューナーのビデオレコーダー制御用の赤外線ダイオードが使えた。
   リード線付きなので、リモコン本体をカメラに相対して置く必要が無くなった。(袋に入れ、三脚にぶら提げるとか)





 2、リモコンML-L3を使わずに自前でシャッター信号を発生する

  直接リモコンML-L3の発生信号をシンクロスコープで観測した波形(画像処理をして白黒反転してある)
  同じ周期のパルス信号が、2回出ている。搬送波は、38KHzとネットで解かった。
      




  ネットで調べるとこんなパルスの組み合わせが、63.2ms後にもう一度出ているとある。
 

 使っているワンチップのR8C-M11Aの内部発振周波数は、20MHzであることから、搬送波(キャリアー)は、R8C/M12Aの内蔵周辺機能のひとつであるタイマRB2を使えば出来ることが解かった。

 このタイマRB2を使って搬送波38Hzを作り、資料のように信号を発生させる。


*************** 搬送波(キャリアー)の発生 ********************

   msttrb = 0;    /* タイマRB2を有効にする      */
   trbmr = 0x00;   /* 動作モード、分周比設定     */
   trbpre = 20-1;  /* プリスケーラレジスタ 200迄可  */
   trbpr = 13-1;   /* プライマリレジスタ 100迄可   */

   /* trbpre = 20-1; × trbpr = 13-1;=で 38kHz 26,3μs.を発生させる */

   trbir = 0x80;  /* タイマ割込み要求    */
   ilvlc = 0x03;  /* 割込み優先レベル設定 */
   trbcr = 0x01; /* カウント開始        */

************************************************************



*************** シャッター信号のプログラム ********************

極端な話、38KHzの搬送波を時間パルスで変調するんだなと考えた。

  (2段組の編集ができないので、画像表示))
   


 回路図


 キッチンターマーの電源1.5Vは、ダイオードの定電圧特性を利用して発生。


 使ってみるとそれなりに目的を達成できたが、バルブシャッターでの繰り返し信号の発生モードがあっても良いかも?。
 D−70の仕様では、30分シャッターを持っているから、それを越すバルブシャッター時間が必要な場合になるのだが?。
 30分シャッター以内なら、先の記述のように「シャター時間+α<30分」と時間設定をすれば、30分以下のバルブシャッターと同様に連続シャッターを使える。

  一定時間後に一回だけシャッター信号を発生するモードは、時計からの時刻信号を利用して、定められた時刻に撮影する方が、利用価値があると思う。
  (99分99秒後が、何時であるかを計算すれば、一応その範囲で可能と言えば可能なのだが、苦肉の策ならやってみても?)
  試作一号機の様にリモコンML-L3を改造してのボタンSWに時刻信号を加えれば、目的を達せられるだろうが?。





                                     

                                  JA2EIB HomePageへ