ローファイ望遠鏡のポインタ:6ステップ

ローファイ望遠鏡のポインタ:6ステップ

目次:

Anonim

最近私は天体写真に興味を持ったので、私はそれを使うためにエントリーレベルの望遠鏡を買う時が来たと決心しました キヤノンEOS 600D 。これはNCP(North Celestial Pole)ファインダーグリッドを含むVB.NETインターフェースを備えた望遠鏡赤道儀用のArduino制御のDCモーターです。

用品:

手順1:VB.NETでNCP Finderインターフェイスを実装する

私はこの素晴らしいアイデアをYouTubeで見ました(このチャンネルで) http://www.youtube.com/user/astronomyshed 男が一般的なウェブカメラでNCPファインダーを作っていたところ。同じチャンネルで、しかし別のチュートリアルで、彼は "と呼ばれるプログラムでニュートンスコープをコリメートする方法を示していました。コリメート"これら二つの賢いアイデアから、私は一つのツールを作成しようとしました。 VisualBasic PC上で私の反射ライブビューモードでNCPを見つけるために。

最初に私は私のDSLRセンサープレビューを設定するためにStellariumを使いました(反射ウェブサイトであなたはStellariumの入力マスクを満たすためにすべてのパラメーターを見つけることができます)。それから私はいくつかのスクリーンショットを撮りました。そしてNCPの位置の十字の一種であるPolarisの周りに円を追加して背景を削除するPhotoshopでそれらを編集しました。透明な画像を得ることは重要です。

ステップ2:望遠鏡

まず赤道儀が必要です。私はこれを持っています セレストロンアストロマスター130 EQ-MD 望遠鏡、それは明らかな空の動き補正のためのDCモーターが付属しています。あなたはおそらく1つが単にポテンショメータで正しい速度を調整することではないことに気づいたでしょう、それであなたの写真露出はあなたが望む限り長くすることはできません。この望遠鏡は安いモデルですので現時点で私はArduinoでより正確な速度規制をするつもりです PWM.

このステップでは、モーター端子をはんだ付けし、接合部を補強するために接着剤を塗布しました。

ステップ3:Arduinoシールドを作る

私が使用した材料のリスト

  • Arduino UNO R3
  • 試作ボード
  • L293DNEハーフhドライバー
  • LM7806ボルテージレギュレータ
  • (1倍) ・33μFコンデンサ
  • (1倍) ・10μFコンデンサ
  • (2倍) 27キロオーム抵抗
  • (1倍) 10キロオーム抵抗
  • 汎用トランジスタ
  • SILオスコネクタ
  • いくつかのワイヤー
  • ピンICソケット(オプションですが推奨)
  • Bluetoothシリアルモジュール(オプション)

___________________________________

L293DNE から テキサスインスツルメンツ それは4倍のハーフhドライバーです(それは2つまでのDCモーターを扱うことができます)。それは別々に負荷に電圧を供給します、そしてそれは出力ピン上の電流の方向を制御することも可能です、それであなたは回転方向を変えることができます。

「オリジナルの」セットアップでは、DCモーターは9 Vバッテリーで駆動され、レギュレーション回路は最高速度で5.6 Vまで電圧を維持するので、私のDCは6 Vモーターだったと思います。残念ながらUSB 5 Vでは十分ではないため、モーターには別途電源を供給する必要があります。私は選びます LM7806 一般的な9 Vバッテリーから6 Vを供給します。

この最初のプロトタイプシールドでは、私は完璧には行きませんでした。私はいくつかの接続エラーを修正し、コンポーネントの配置がまだ最適化されていないことに気付きました。しかし、将来的には温度センサーを追加してボード全体を描画したいと思います。 フリッツ SMDコンポーネントを使用する。私は私がよりよい仕事を見せることができるところに2番目のインストラクターを投稿したいと思います…

ステップ4:VB.NETシリアル通信を追加する

基本的にそれは単純なシリアルインターフェースです、それを実現するのは難しくありません、そしてこれについて多くのチュートリアルがあります。しかし、私は自分のバージョンをいくつかの説明と共有したいと思います。

この機能はあなたにすべての利用可能なものを示します COM ポートとそれらを コンボボックス 。使えない ButtonConnect 利用可能になるまで COM ポート

Sub refreshCOM()ComboBox_COM.Items.Clear()各spの文字列My.Computer.Ports.SerialPortNames ComboBox_COM.Items.Add(sp)の次へComboBox_COM.Items.Count = 0の場合次にComboBox_COM.Text = ComboBox_COM.Itemの場合.Item(0).ToString ComboBox_COM.Text = ""の場合は終了、ButtonConnect.Enabled = Falseの場合その他ButtonConnect.Enabled =終了の場合は終了Sub

シリアルポートの設定 DTR PCが正しくポートを開くまでArduinoを待たせないようにする。

Private Sub MainForm_Load(ByVal senderをSystem.Objectとして、ByVal eをSystem.EventArgsとして処理)MyBase.Load refreshCOM()SerialPort1.Close()SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default SerialPort1.DtrEnable = False End Sub

最後にシリアルポートへの接続を試みることができます。何も問題がなければ、 DTR 。私はBluetooth通信中にいくつかの問題を抱えています:それはArduinoが待っていないようです DTR 有効にしています…私のBTボードと リンバー トランシーバ。

Private Sub ButtonConnect_Click(ByVal senderをSystem.Object、ByValをSystem.EventArgsとして処理)ButtonConnect.Clickを処理します。SerialPort1.Close()SerialPort1.PortName = ComboBox_COM.Text.ToString SerialPort1.BaudRate = ComboBox_BAUD.Text TryPortPort1.Open() ex例外としてMsgBox( "シールド接続中にエラーが発生しました。")試してみてくださいSerialPort1.IsOpenそれからTextBox1.Clear()Label2.Enabled = True MaskedTextBox1.Enabled = True ButtonSetSpeed.Enabled = True SerialPort1.DiscardInBuffer()SerialPort1.Dtrardable = Trueそれ以外の場合Label2.Enabled = False MaskedTextBox1.Enabled = False ButtonSetSpeed.Enabled = False End End Sub

これはシリアルポートの読み取り方法です。プログラムはStatusStripのGUI値を更新し、(屋外のクイックデバッグ用の)専用のTextBoxに生の文字列を返します。

Private Sub SerialPort1_DataReceived(System.ObjectとしてByVal送信者、System.IO.Ports.SerialDataReceivedEventArgsとしてByVal e)処理SerialPort1.DataReceived文字列として細い線を試してください= SerialPort1.ReadLine TextBox1.Invoke(新しいReadSerialDelegate(AddressOf ReadSerial)、line.ToS)例外としてキャッチします。例外SerialPort1.Close()終了試行終了SubデリゲートSub ReadSerialDelegate(ByVal文字列として)Public Sub ReadSerial(ByVal文字列として)TextBox1.Text + = s + vbNewLine TextBox1.SelectionStart = TextBox1.Text.Length - 1 TextBox1.ScrollToCaret()s.Contains( "charge")の場合Label_Battery.Text = s.Substring(s.Length - 4、3)ElseIf s.Contains( "speed")次にLabel_Speed.Text = s.Substring(s).Length - 4、3)End Subの場合は終了

書き方はとても簡単で、言葉は使いません。

Private Sub ButtonSetSpeed_Click(ByVal sender System.Object、ByVal e System.EventArgsとして処理)ButtonSetSpeed.Clickを試してみますSerialPort1.Write(MaskedTextBox1.Text)Label_Speed.Text = MaskedTextBox1.Text例外としてキャッチします。MsgBox(vbInformation、) at "+ SerialPort1.PortName)End Try End Sub

そのため、シリアル通信全体を処理するための必要最低限​​のコードが完成しました。

ステップ5:.INOコードを書く

Arduinoはスピードコマンドを受け取り、現在のバッテリーレベルを送信しなければなりません。

変化する R1 そして R2 あなたの抵抗値で、私は私の正確な値を見つけるためにマルチメーターを使いました。バッテリ電圧は、 LM7806したがって、電圧が6 Vのしきい値に達する前に約3 Vの「マージン」があり、 LM7806 減少し始めます。

const float R1 = 26600.0。 const float R2 = 26600.0。 const float VBATT = 3; const int refreshRate = 10000; int south = 1。 int batteryTimeout = 0。

Arduinoのピン配列設定で、batteryPinがアナログタイプであることを確認してください。

int batteryPin = 0。 int enableCheckPin = 7; int enableMotorPin = 3; int in1Pin = 2; int in2Pin = 4;

セットアップ時に、Arduinoは DTR 有効になっています。

void setup(){pinMode(batteryPin、INPUT); pinMode(tempPin、INPUT); pinMode(enableCheckPin、OUTPUT); pinMode(in1Pin、OUTPUT); pinMode(in2Pin、OUTPUT); pinMode(enableMotorPin、OUTPUT); Serial.begin(9600); while(!Serial);遅延(1000)。 Serial.println( "------- ARDUINO -------"); }

ここでバッテリーレベルの測定のための基本的な電圧計があります、もし充電が100%より高いならそれはバッテリーが切断されていることを意味します(私はノイズエラー防止のためにさらに5%を加えました)。私の場合、測定は10000ミリ秒(10秒)ごとに行われますが、明らかにそれを変更することができます。そうでなければ、DC速度は "リアルタイム"モードで変更することができます。

void loop(){if(batteryTimeout == 0){batteryTimeout = refreshRate; digitalWrite(enableCheckPin、HIGH);遅延(500)。フロートVout =(analogRead(beterPin)×5.0)/ 1024.0。 digitalWrite(enableCheckPin、LOW);フロートVin = Vout /(R2 /(R1 + R2))。 int電荷=(Vin * 100)/ VBATT。 Serial.print( "現在の料金:0"); if(charge> 105){Serial.println( " - "); } else {Serial.print(有料); Serial.println( "%"); digitalWrite(in1Pin、!south); digitalWrite(in2Pin、南)。 if(Serial.available()){int speed = Serial.parseInt(); if(speed> = 0 && speed <= 255){analogWrite(enableMotorPin、speed); Serial.print( "New speed set:00"); Serial.println(speed); batteryTimeout--;遅延(1)。 }

このコードは最適化する必要があります。屋外テストを始めるための基本的なスケッチです。

ステップ6:テスト

暗い夜に私は全部をテストしました:

  • 観察する物をステラリウムで確認し、その位置を記憶するようにしてください。
  • Polarisと選択したオブジェクトの両方が見える場所から、暗くて平らな場所を見つけます。
  • 赤道儀を置き、その上にDSLRを取り付け、システムが重力の方向と平行になるようにします。
  • DSLRをPCに接続し、VB.NET NCP FinderとDSLRリモートソフトウェアを開いてNCPを正しく見つけます。
  • ヒント:あなたはPolarisに焦点を合わせるためにBahtinovマスクを使うことができます…

今、あなたはあなたの夜の観察の前にDCモーターに動力を与えて、そしてスピードを調整するためにいくつかの写真を撮ることができます。

いくつかのテストの後、私は見つけました たくさんの この最初の設定のバグ:

  • すべての消費電力の最初の(現在私は追加します。INOコードを書き直すつもりです avr / sleep.h そして avr / power.h).
  • の NCP Polarisは1年間で位置を変えるため、ファインダマスクは正しくありません。私は365有効なマスクをデザインしなければなりません。
  • 分圧回路はうまくいきません。約3 Vの電圧がBJTにかかります。なぜそれが単なるパストランジスタとして機能しないのかわかりません。最初に電子理論を勉強する必要があります。

私はこのLo-Fiポインタの2番目の(改良された)バージョンに取り組んでいます、私はいくつかのニュースを投稿するつもりです…

このインストラクターがあなたを刺激することを願っています!