ต้องไปอ่าน 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();
}
//----------------------------------------------------------------------------------
DIY แนวการสร้างระบบหาตำแหน่งดาว GOTO #5
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();
}
//----------------------------------------------------------------------------------