Programming and Tracking


I used an arduino microcontroller as the main processing unit.


I wrote a program that acts an interface between the user and the electronics. It receives input from the user through a serial monitor, which can be an application on a laptop, tablet or smart-phone, and gives the output to the motor drivers that control the telescope’s motion. On a smart-phone I use the app Simple Serial Monitor to connect to the microcontroller.

The telescope can be used in two modes:

  • A. goto without tracking,
  • B. goto with tracking.

In the non-tracking goto mode, the user has to provide the altitude and azimuth coordinates of the desired celestial object and the telescope accurately positions itself to point to that object. This mode is mainly for short usage of the telescope. It is very quick and easy to use. In the tracking goto mode, the user has to enter the ra and dec coordinates of the celestial object, along with the current date and time. The program calculates the Local Mean Sidereal Time using date and time. It then rotates to point to the object’s current location and tracks its apparent motion.

Along with these modes, there is a hand-held remote to control the motion of the telescope. This remote controller should be able to rotate the telescope even when there is some other processing going on. It should feel like the remote was built into the hardware of the electronics not software. This was one of the tricky parts of the coding. I used functions and multiple loop statements to simulate an event-based rather than procedural program. Everytime the appropriate button was pressed on the remote (event), I invoked the function to move the motors.



The earth’s axis of rotation (very nearly) passes through the pole star. Thus the pole star’s position seems fixed, even when the earth rotates. One can imagine all the stars and celestial objects in the sky to be a part of a sphere with a very large radius concentric with the earth’s centre. This sphere can be assumed to rotate about the earth keeping the earth fixed. On this sphere the pole star will appear stationary with all other objects going in circles around it.

star trails

I used the following formulae for my alt-az mount:

LMST= f(T) + LON

sin(ALT)=sin(DEC).sin(LAT) + cos(DEC).cos(LAT).cos(HA)
cos(A)= sin(DEC) - sin(ALT).sin(LAT)
If sin(HA) is negative, then the AZ= A, otherwise

Here is the link to the site where I got these formulae from.

Where LMST is Local Mean Sidereal Time, HA is Hour Angle, RA is Right Ascension, DEC is Declination, ALT is Altitude, AZ is Azimuth, LAT is latitude and LON is longitude.

LMST can calculated if the date and time is known, thus if the user has RA and DEC coordinates for the given celestial object, this formula will give the corresponding alt-az coordinates as a function of time.

Using these formulae, I could program the Arduino to track celestial objects. Although this seems like a difficult task, it was one of the easiest in this project. This is thanks to the plethora of literature made available online by amateur astronomers.