なかなか導入支援装置自作の投稿ができずにいます。忙しいです・・・。
もう1ヶ月ほど前にはプログラムしているのに、その記録を残せないでいるという状態です。良くないですね。とりあえず、作成したプログラムを記録として残しておこうと思います。
dsc06.zip
- dsc06.ino : Arduinoメインスケッチ
- AngleCalc : 座標変換クラス
- Matrix : 3次元行列
- RTClib : Real Time Clock クラス(RTClib-github)
一応、これだけの処理が詰まってます。RTClibに関しては上記リンクから拾ってきたものです。それ以外は自力で記述しました。
まず、Matrixクラスですが、これは3x3行列演算を行うためのクラスです。何も難しいことはやっていません。行列式を求めたり、逆行列を求めたり、3次元ベクトルとの乗算などをやることがこのクラスの責務です。
次に、AngleCalcです。これは
Taki's Homepageの「
Equations for Pointing Telescope」を簡易実装したものです。このHomepageでは、経緯台でのAlt/AzとRA/DECの座標変換を行うことを前提に書かれていますが、3次元ベクトルの異なる座標系への変換ですので赤道儀に対しても使えると思い試して見ることにします。理想的なRA/DEC座標へ、赤道儀に取り付けたエンコーダカウンタから得られる座標系の値を変換することになります。要するに、エンコーダのカウンタから、RA/DECを取得することがこのクラスの責務となります。
このクラスは、コンストラクタでRA/DECの分解能を渡します。その後、setPosition()関数にて、キャリブレーションに使用した星1の座標(pos1)、その時のエンコーダパルス(enc_pos1)、その時の時刻(t1)、星2の座標(pos2)、その時のエンコーダパルス(enc_pos2)、その時の時刻(t2)を渡してキャリブレーション完了となります。キャリブレーションが終了したら、getPosition()関数にエンコーダのパルス(enc)と時刻(t)を渡すことでRA/DECが得られることになります。
RTClibはこの時刻を取得するために使用します。そもそもこの時刻が撮りたいがためにArduinoにRTCを載せました。
最後にメインスケッチですが、まだ簡易的なものなのでArduinoの開発環境から接続するシリアル通信画面を使って制御するように組んで有ります。有効なコマンドは、
- 時刻設定:SetTime yyyy/mm/dd hh:mm:ss
- 時刻表示:Time
- RA/DEC表示:Pos
- エンコーダカウンタ表示:Pulse
- キャリブレーション1:SetPosition1 HH/MM/SS dd/mm/ss
- キャリブレーション2:SetPosition2 HH/MM/SS dd/mm/ss
です。時刻設定は24時間表記で設定します。キャリブレーション1・2はRA/DECをそれぞれ時分秒、度分秒で渡します。Time/Pos/Pulseはデバッグ用コマンドなのでどうでも良いです。現在の実装では、500[msec]ごとにエンコーダのカウンタを拾ってRA/DECを計算しLCDに表示させます。
今回はとりあえずここまで。次回は先月デネブベガとアルタイルでキャリブレーション後、亜鈴状星雲を導入してみた時の精度について見てみます。