I become interested in astronomy in January 2015 when I bought my first telescope: EQ1 mount with SkyWatcher 80ST. Right from the beginning I realized that a good knowledge of the sky is needed in order to be able to find your targets, but I didn’t have any :), so I decided to buy a GoTo System.

What shocked me was the cost of those commercially available systems. The prices were ridiculously high for something that should cost half or even three times less. In addition I didn’t like the look and feel of the systems neither – It is 21st century after all, not 70’s. Have a look at SkyWatcher’s solution or the Orion solution and you’ll know what I mean – cheap looking “feature phone” like controllers.

Anyhow, I started to build the system based on Arduino Due first because I was not sure how many IO ports will I need and second because of the data size it can work with. So I looked on internet to buy two of them (just in case…) and one TFT Touch Screen. Step-by-step I added different parts to the system like: RTC 3231, DHT22, GPS, BT-05 and etc. until it reached current state in terms of HW and SW.

I now decided to drop the EQ1 idea and as I have obtained Vixen SP along with SP-C8, I decided to attach the rDUINO Scope to this great telescope.

rDUINO Scope is based on Arduino Due board and utilizes the code and few sensors in order to collect needed data to control the telescope mount. As an output the rDUINO Scope controls 2 stepper motors representing RA and DEC movement of a German Equatorial Mount (GEM). The system only works with GEM and cannot control Alt/Az or Dobsonian mounts unless you add some code.

- RTC DS3231 – Real-Time clock to hold the current date and time even when the system is not powered. The RTC DS3231 is a very accurate clock ±2 ppm - ±3.5 ppm, depending on the temperature, which creates variation of around ±2 min/year. I’m using the sensor in order to keep the time and later on calculate the time zone when calculating LST. (data: PDF);

- GPS uBlox Neo 6M - Is a GPS sensor, with pretty decent parameters of accuracy and time to resolve. So far I have only tested it in my house, thus the Cold start was a bit sluggish – 2-3 min. The hot start however is pretty fast – 10 sec. According to the datasheet it should be something around 30-40 sec for cold start, but this is about to be tested. (data: PDF);

- PS2 joystick – is a 5V joystick for Arduino. As the Arduino Due only supports 3.3V operation on each pin, the initial schematics I created (supplying 3.3V) was not performing well. I have developed a solution which can be seen on the schematics page. The main advantage of using Joystick rather than buttons to manual move RA and DEC is that based on the position of the joystick I assign different speeds, thus if you touch the joystick it moves slower than if you push it all the way down (full speed);

- Temperature & Humidity sensor DHT22 – Is also a pretty accurate temperature and humidity sensor with variations of about ±1 degree and humidity ±5%. I’m using this in order to provide the user with immediate information about the environment, but also log the data into the “statistics” screen and statistics sent via Bluetooth;

- Bluetooth module HC-05 – Used to assure communication with Cell Phone/ Tablet.

- Stepper motor drivers DRV8825 – A stepper drivers allowing up to 2A per coil and utilizing 1/2, 1/4, 1/8, 1/16, 1/32 micro Steps. The mode of operation is selected based on the setup you have (mount parameters) and on the XLS file with calculations. Please, use the file to calculate your values and edit the code accordingly.

The heart of the system which I call “The Main sequence” is the way Arduino calculates the coordinates. Those coordinates could come from either the local DB file stored on the SD card, or pushed via Bluetooth. The mains sequence starts with:

1. selectObject_M() – fuction to extract the data from DB and assign it to global variables in the code, then it goes throught

2. calculateLST_HA() – function to calculate the current LST and Hour Angle (HA), depending on the selected OBJECT_RA, which later on passes the data to

3. considerSlewTo() – function to actually calculate the number of steps each drive needs to do (assuming the telescope was polar aligned in the beginning).

The code calculates the micro steps based on the below assumption (schema) for HA and DEC movements – namely the HA shaft moves 180 degrees, representing 0:00h < HA value < 12:00h and 12:00 < HA Value < 24:00h. In the same time the DEC axis is moved Left or Right of the Polar star (90 degrees) depending on the values of HA (e.g. 12:00h < …or… > 12:00h).

Have a look at schemas below to clear out the situation. I’m new to astronomy and using GEM and for me it was a nightmare to actually realize how both shafts needs to move!

HA shaft DEC shaft

The rest of the code could be divided in 2 parts:
- The Interface part – taking care of drawing all screens and sub-screens, consider touch inputs, switch Day/Night modes, Draw screen updates, sound when move the motors and before the Meridian Flip and etc.
- Work with sensors – reading/ writing data to sensors like: Reading GPS data, temperature, humidity, manual move values (joystick), Bluetooth commands and Date/Time.
The data format I’m using is the following:

For Bluetooth:
$SlewTo;NGC206;0;40.5383;40;44.3;4.2;14;0;AND;GxyP;part of M 31$
$COMMAND;OBJECT_Name;RA_Hours; RA_Min; DEC_deg; DEC_min; Size, Vis_Magnitude; Distance_From_Earth; Constellation; Type; Other_Name$

For DB on SD card:
M8;18h03.8m;-24°23';SAGITTARIUS;Nebula;6;90'x40';Lagoon Nebula
Object_Name; RA; DEC; Constellation; Type; Vis_Magnitude; Size; Other_Name