free portfolio website templates


GoTo Telscope Mount


A GoTo mount is a computerized telescope mount that can automatically point a telescope at a certain astronomical object. I’ve always wanted one of these, but I don’t want to spend a fortune, and I want one with enough versatility and flexibility that I could program myself. So, I decided to build my own alt-azimuth GoTo mount for my 4.5” Newtonian telescope, with a Raspberry Pi as the computer.

Key Features of my GoTo Mount:

  • Internal database of all Messier and NGC objects (scraped from the Strasbourg Astronomical Data Centre)
  • Feedback control system using optical rotary encoders
  • Axis calibration using accelerometers
  • Mount can be controlled from another device
  • Entire mount can be powered by simply plugging it into the wall

Layout of the project, made in Fritzing and Photoshop

Materials and Parts

Unless stated otherwise, all costs are in Canadian Dollars.

Electronic Components, Sensors, and Controllers

• Raspberry Pi 3 Model B+ ($50)
• Arduino UNO clone x3 ($3 each)
• NEMA 17 Stepper Motor with Mounting Bracket x2 ($20 each)
• Optical Rotary Encoder, 1000 PPR x2 ($12 each)
• A4988 Stepper Motor Driver Module x2 ($3 each)
• GY-521 Gyroscope/Accelerometer Module ($0.80)
• Raspberry Pi GPIO Breakout and Breadboard ($10)
• Orion XP480 PSU ($20) 

Mechanical Components

• Anti-skid Aluminum Alloy Rotary Encoder Mount x2 ($12 each)
• Open-ended Timing Belt, 2mm pitch, 10mm wide, 5m long ($8)
• Timing Belt Pulley, 20 teeth, 10mm wide, 6.35mm bore x2, 5mm bore x2 ($1 each)
• 4” x 4” Lazy Susan Turntable x2 ($2.50 each) 

Building Materials

• 1/8” x 3/4” x 36” Solid Aluminum Angle ($15)
• 10” Diameter Birch Plaque x2 ($8 each)
• SPF Lumber (2” x 4” x 8’, 1” x 4” x 6’)
• Wood Particleboard (1’ x 1’ x 5/16”)
• Wood/Metal Screws (#8 x 2.5”, #6 x 1.625”, #6 x 1.25”, #6 x 0.5”)
• 2.75” x 1.5” x 1.5” Galvanized Steel L-Angle x2 ($1.60 each)
• 2.5” Zinc Flat Corner Brace x4 ($0.65 each)
• 3” Zinc Plated Strap Hinge x2 ($2.70 each)
• M3 and M4 Screws, Locknuts, and Washers 


• Solid Core 22 AWG Wire
• Zip ties
• Solder
• Heat-shrink Tubing
• Power Bar and Extension Cord
• Telescope counterweight 

Electrical and Hardware

The altitude and azimuth axes are controlled by two NEMA 17 stepper motors, which are controlled by the Raspberry Pi using two A4988 stepper motor drivers. 1/4 step microstepping is used during object tracking, and 1/8 step microstepping used during calibration, for increased precision while retaining accuracy. The motors are powered by a computer PSU which was modified into a 3.3V/5V/12V bench power supply.

Two optical rotary encoders (1000 PPR) are used to determine the angular displacement of the motors, providing a feedback system. The encoders are each connected to an Arduino, and an interrupt service routine is used to determine the angular displacement of each encoder. The two Arduinos transfer this data back to the Raspberry Pi via USB serial communication.

A GY-521 accelerometer module was used for initial calibration of the altitude axis, so that it would be level with the ground. The GY-521 communicates with a third Arduino via I2C. This Arduino transfers data back to the Raspberry Pi again via USB serial communication.  


The main program for the mount was written in Python. Most of the software is in the Raspberry Pi, in which calculations and motor control are performed. I wrote my own classes to control the stepper motors, to search for and retrieve coordinates, to handle USB serial communication, and to process data from the rotary encoders and the GY-521.

On start-up, the main program initializes all necessary Raspberry Pi GPIO pins and serial ports. The user can then choose to calibrate the telescope themselves, as there are options to move the telescope in a certain direction and to set reference angles for both axes. Using the GY-521, an automatic calibration can also be done.

Once calibration is done, the user can select an object to track. My mount features an internal database of the ICRS coordinates of all Messier and NGC objects, scraped from the Strasbourg Astronomical Data Centre. Using the Astropy library, the real-time coordinates of other objects can also be retrieved, though this requires an internet connection. Coordinate transformations and calculations are done using Astropy.

The real-time coordinates of an object are then given to the stepper motors, which move in parallel using the Python Multiprocessing library, tracking the object. The optical rotary encoders provide a feedback system, and the difference between the actual and desired angular displacement is accounted for and corrected. 

Mechanical and Construction

An L-shaped wood frame for the mount was constructed using two-by-fours and one-by-fours, held together with wood/metal screws and a variety of L-angles and corner braces. The base of the mount is an X-shape, created by three two-by-fours, which are foldable because of strap hinges.

Each of the axes have a main drive pulley, which is a 10” diameter birch wheel, with a 10mm wide open-ended timing belt glued around it. Each main drive pulley is attached to the wood frame using a Lazy Susan turntable. The stepper motors (5mm diameter shaft) and rotary encoders (6mm diameter shaft) each have 20 teeth 2mm pitch timing pulleys attached to them. There is a gear factor of around 20 between each of the motor/encoder pulleys and main drive pulleys.

Each stepper motor is held by a bracket, which is mounted onto a solid aluminum angle cut to 8” long, which was screwed onto the wood frame. A 4” long and 1/4” wide slot was milled in the aluminum angle, and the motor bracket was attached to the angle through the slot using screws and locknuts. This slot allows for adjustment of the motor and bracket, if necessary.

The rotary encoders are mounted to the wood frame using anti-skid aluminum alloy mounts, each featuring a spring which provides tension to pull the encoder towards the main drive pulley, ensuring no slip between the encoder pulley and main drive pulley.

A 6” by 3.5” wood particleboard, 5/16” thick, was screwed onto a 2” long two-by-four block, which was screwed onto the altitude main drive pulley. Telescope tube rings or a camera can be attached to the particleboard. 


The GIF below shows my GoTo mount in action.

© Copyright 2019-2022 Matthew C.H. Leung. All Rights Reserved.