« SP赤道儀用一軸制御コントローラ8号機(3)~PEC機能の検証~ | メイン | 三カ月間の成果・・・・・・ »

2016年3月28日 (月)

digiCamControlの外部トリガー用リレーボックスの製作

PDH2でのディザリングを調べていたら、以前書いたニコンカメラをコントロールできるフリーソフトのdigiCamControlとの組合せで自動ディザリングができることがわかりましたが、私の天体写真撮影の主力機のNikon D5000がdigiCamControlでのバルブ撮影に対応していない(USB経由でのバルブ撮影コマンドがない)ので、利用はできないものと思っていました。

しかし、さらに調べてみると、digiCamControlには外部トリガーを使用するための仕掛けが用意されており、USB経由で可能となることがわかりました。
その接続方法は、下図のとおりです。

Photoこれ用の外部トリガー用リレーボックスに相当するものとして、digiCamControlのホームページにも対応製品の紹介がありますが、簡単そうなので自作してみました。

digiCamControlの設定は、「setting」の「Devices」を選択し、「add」をクリックして、下の画面で新しいデバイスを登録します。

Digicamcontrol_deviceConfiguration na・・・適当な名前を入力
Driver・・・・・・・・・・・・・・USB Relay Releaseを選択
Com port・・・・・・・・・・・有効なポートを選択
Init sequence・・・・・・・適当な数値を16進数で入力①
Shutter On・・・・・・・・・・適当な数値を16進数で入力②
Shutter Off・・・・・・・・・・適当な数値を16進数で入力③
でOkをクリックすれば、デバイスの登録は終了です。

天体写真モードで「EXTERNAL SHUTTER RELEASE」でUse configuを設定したデバイスを選択し、Enableにチェックを入れれば、動作するようになります(下の画面)。

Digicamcontrol_device2実際のシャッター動作では、シャッターオン時に上記で入力した①②のデータが送信され、シャッターオフ時には③のデータが送信されます。

これをArduinoのシリアル通信で受けて、シャッターを開閉するリレーを動作するようにすればよいことになります。

これを最近使い慣れているArduino nanoで動作させるようにしてみました。シリアル通信ができればなんでも良かったのですが・・・。

スケッチ(プログラム)は非常にシンプルで、LEDチカチカに毛の生えた程度です。

--------------------------------------------------------------------------------------------
// リレー接続ピン
#define RELAY_1             4
// モニターLED接続ピン
#define RED_1                2
#define INIT_CODE1   0x51
#define INIT_CODE2   0x00
#define SHUTTER_ON  0x41
#define SHUTTER_OFF 0x40

void setup() {  
     Serial.begin(9600);  
// USB接続では、この待ちルーチンが必要
     while(!Serial);
     pinMode(RELAY_1,OUTPUT);
     pinMode(RED_1,OUTPUT);
}

void loop() {
  unsigned char val[4];
  int              i,n;
  n = 0;
  while(1){
       while ( Serial.available() > 0 ) {
          val[i] = Serial.read();
          n += 1;
       }
       if ( n != 0 ) {
          // シャッター開動作
          if ( (val[0] == INIT_CODE1) && (val[1] == INIT_CODE2) && (val[2] == SHUTTER_ON) ){
                 digitalWrite(RELAY_1,HIGH);
                 digitalWrite(LED_1,HIGH);
          }
          // シャッター閉動作
          else  if ( val[0] == SHUTTER_OFF ){
                 digitalWrite(RELAY_1,LOW );
                 digitalWrite(LED_1,LOW);
          }
          n = 0;
      }
  }
}
------------------------------------------------------------------------------------------------

でも、最初setup()の「while(!Serial);」の待ちルーチンが必要だということが分からず、1回目の動作部分の通信データが取れなかったり、データの先頭0x51が取れなかったりと動作が不安定でした。

Arduino IDEのスケッチ例を見てみたら、この注意書きをみつけました。
この待ちルーチンを挿入すると、嘘みたいに安定して全てのデータが受信できました(当然なんでしょうが)。

このリレーボックスの出来上がりの写真です(用意したボックスに納まらず裸のままです)。

20160328_3297Arduino nanoを使うまでもなかったのですが、これだけでUSB経由のシリアル通信が出来ること、互換品ですので750円と安いことから、まあーいいかです。

これで、天体写真メイン機のD5000でもdigiCamControlでの撮影が可能になり、PHD2と連携してディザリング撮影もできることになります。

でも、実際の撮影で有効かどうかは試してみるまでわかりません。

それと、この撮影方法では、USBが3ポート(PHD2,digiCamControl,リレーボックス)必要になりますが、私のレッツノートは2ポートしかありませし、せっかくコントローラの7号機でケーブルの整理をしたはずなのに、またまたケーブルが増えてしまいます・・・・・。

ですから、作ってはみたものの実働するかどうかは未定です。

実は先日コメントいただきましたリュウさんのブログで、OnStepと言う望遠鏡コントロールソフト(Arduinoベースでプログラムはオープンソース)を知り、そのASCOMドライバを使えば、自分のコントローラでも自動導入ができるのではないかと思ったこともあって、Arduinoでのシリアル通信にトライして見たわけです。

最初はうまく送信されてくるデータを拾えませんでしたので、半ばあきらめたけていたのですが、先に書いた待ちルーチンできっちり受信できるようになりましたので、試してみる素地は出来上がりました。

まあ、これについては、おいおいと進めることにして、また別の機会に書きたいと思います。

トラックバック

このページのトラックバックURL:
http://app.blog.bbiq.jp/t/trackback/562191/33781807

digiCamControlの外部トリガー用リレーボックスの製作を参照しているブログ:

コメント

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。