DIY แนวการสร้างระบบหาตำแหน่งดาว GOTO #5

ต้องไปอ่าน DIY แนวการสร้างระบบหาตำแหน่งดาว GOTO #1, #2, #3, #4 ก่อนนะครับ

https://ppantip.com/topic/37233072
https://ppantip.com/topic/37235270
https://ppantip.com/topic/37236971
https://ppantip.com/topic/37238646
https://ppantip.com/topic/37238689
*********************************************************************************
กระทู้อื่นเดิมๆที่ใครเผื่อสนใจครับ
การสร้างอุปกรณ์ตามดาวด้วยตัวเอง DIY star tracking #1
http://ppantip.com/topic/35228265
การสร้างอุปกรณ์ตามดาวด้วยตัวเอง DIY star tracking #2
http://ppantip.com/topic/35233329
การสร้างอุปกรณ์ตามดาวด้วยตัวเอง DIY star tracking #3
http://ppantip.com/topic/35237413
การสร้างวงจรขับ motor สำหรับ การถ่ายภาพดาราศาสตร์,high accuracy motor driver for star tracker
http://ppantip.com/topic/35222366
การใช้งานวงจรขับ และอุปกรณ์ตามดาวแบบติดมอเตอร์เบื้องต้น Basic Motor Drive Barn Door Tracker
http://ppantip.com/topic/35244410
การสร้าง และอุปกรณ์ขับมอเตอร์ในสิบนาที
https://ppantip.com/topic/36658223/comment1
DIY เลนส์ ฮีทเตอร์กันฝ้าสำหรับนักถ่ายดาว
https://ppantip.com/topic/35745572
**********************************************************************************

เมื่อเอาทั้งหมดมารวมกันเพื่อเป็นโปรแกรมสมบูรณ์จะได้ดังโปรแกรมด้านล่างส่วน Communication มีการแก้ไขเพิ่ม เพราะว่าค่าตำแหน่งดาวจะไม่ใช่คงที่เหมือน Lesson 1 แล้วแต่เปลี่ยนตามการเคลื่อนที่ของกล้อง โปรแกรมจะทำการหาความแตกต่างระหว่างตำแหน่งเป้าหมายกับตำแหน่งปัจจุบันและสั่งกล้องหมุนตามหาเป้าหมายจนกว่าจะเจอเป้าหมายจึงหยุด
จะเห็นว่าในโปรแกรมจะมีการ Update LST ตลอดเวลาซึ่งพอสักครู่ตำแหน่งดาวเป้าหมายก็ละเลื่อนออกไปตามการเคลื่อนที่ของท้องฟ้าเราจึงต้องรู้เวลาปัจจุบันทุกขณะหากไม่มี RTC คงทำไม่ได้ง่ายนัก เมื่อเกิดความแตกต่างระหว่างกล้องกับเป้าหมาย และระบบก็จะสั่งให้เคลื่อนตาม ดังนั้นระบบนี้จะติดตามดาวไปเรื่อยๆแม้จะถึงเป้าหมายแล้ว จะติดตามได้แม่นขนาดไหนขึ้นกับกลไกที่สร้างขึ้นละเอียดมากๆก็สามารถ Tracking ดาวได้ละเอียดขึ้น

เนื่องจากโปรแกรมยามมาก บางส่วนจะเลยไปในส่วนความคิดเห็น 1,2 ,3,4,5,6,7 ครับ

Lesson 2 Final Program for Goto Az Mode

//*************************************************************************************
//-----------------------Lesson 2 Goto System Az Mode------------------------------------
//This program is for public knowledge only, you can use it freely.
//Programmed by Ruth.Pra, wirthx@gmail.com
//Ver:1.00
//30 Dec 2017
//You must update location at getLocation() function and write motor driver by yourselves
//it uses Tiny RTC as Real Time clock module.   
//---------------------------------------------------------------------------------------

#include <stdlib.h>
#include <math.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68  // the I2C address of Tiny RTC


char input[20];                     // Incoming data from Stellarium
char txRA[10];                      // Feed back RA text to Stellarium
char txDEC[11];                     // Feed back DEC text to Stellarium

long  DECtarget = 321351;  // DEC Target receive from stellarium in sec of Deg. , set first point to Polaris,
long  RAtarget = 9110; // RA target receive from stellarium in sec of Hr, set first point to Polaris,
long AzTarget, AltTarget;//Target Az and ALT in sec, convert from DECtarget and RAtarget
double ALT, Az;//  ALT, Az in sec of degree.  Global variable for transfer data
long TelALT, TelAz;// Current telescope Altitude, Current telescope Azumuth in sec of degree
long TelRA, TelDEC;// Current telescope RA, Current telescope DEC in sec of HR,
                            //and degree, Convert from TelALT and TelAz
double xRA, xDEC;        //  Global variable for transfer data.  xRA in sec of Hr, xDEC in sec of degree
long AzDiff, AltDiff; // differnt between target Az ALT and Telescope Az ALT in sec
long raHH, raMM, raSS;              // minor unit for convertor
char SIGNtel;                       // sign of DEC: 43 = +   45 = -
long decDEG, decMM, decSS;          // minor unit for convertor
long CurrentTime;//current time in sec from RTC or GPS

byte second, xminute, xhour, dayOfWeek, DateOfMonth, xmonth, xyear;// current time, day
double xday, xLST;//J2000 in days and Local Sidereal Time in sec of Hr.
double Timezone;// location time zone Thailand = 7
double Longtitude;//Observer location in sec of degree, set to your observation location
double Latitude;//Observer location in sec of degree,  set to your observation location

//----------------------------------------------User must input or revise this part
void MoveMotor()
{
  //   Make your own motor driven routine
  }

void getLocation()  //Update Lattitude and Longtitude. Currently is fix to Chiangmai. This subroutine may change to GPS module
{
  Longtitude = 356344.848;//Chiang mai in sec
  Latitude = 67645.37;//Chiang mai
  Timezone = 7;
}
//----------------------------------------------------------------------------------
  
void getCurrentTime()//Update current real time, This subroutine may change to GPS
{
getDateDs1307();

  CurrentTime = (long(xhour) * 3600) + (long(xminute) * 60) + long(second);

}

//----------------------------------------------------------------------------------

void setup() {

  Serial.begin(9600);
   Wire.begin();
  getLocation();
   AlignToStar(9110,321351);// Align to Polaris

}
//----------------------------------------------------------------------------------

void loop() {
   //delay(500);
  if (Serial.available() > 0) communication();

  AzDiff = AzTarget - TelAz;
  AltDiff = AltTarget - TelALT;

  if ((AzDiff == 0) && (AltDiff == 0))
  {
    getCurrentTime();
    xday = J2000(xhour, xminute, second, DateOfMonth, xmonth, xyear, Timezone);
    xLST = LST(xday, CurrentTime, Timezone, Longtitude);
    Eq2Az(RAtarget, DECtarget, xLST, Latitude);// update target Altitude ALT and Azimuth Az
    AzTarget = Az; // Update target
    AltTarget = ALT; // Update target

  }
  GOtargetAz();
}
//----------------------------------------------------------------------------------
         
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
อ่านกระทู้อื่นที่พูดคุยเกี่ยวกับ  วิศวกรรมศาสตร์ นักวิทยาศาสตร์ ดาราศาสตร์
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่