This is about retrofitting a Dobsonian Telescope with fancy electronics and means to indicate where the telescope is pointing at, to allow the observer to quickly find an object in the night sky. My motivation was born on a very cold evening shortly after I bought the telescope and I desparately tried to find Uranus in the night sky - and failed.
The resulting setup can, for example, be used with the excellent Stellarium Plus App.
- Connect power supply.
- Connect Stellarium Plus via Bluetooth.
- Wait for GPS location fix.
- Point the telescope to a known target and set alignment point via Stellarium App.
- Repeat step 4 to increase alignment precision.
A Dobsonian Telescope is a type of telescope that uses an alt-azimuth mounting, which means you can rotate and tilt it. I'm using a Sky-Watcher 8" Traditional but the general method described here can be applied to any Dobsonian.
The term Push-to is generally referred to as a method to indicate (e.g. on a Smartphone-App) where the telescope is pointing at and thus allows to quickly find an object.
The main design goals are:
- Precision - I want this setup to be as precise a I can make it with hardware that is available to a hobbyist.
- Integration - The solution should integrate with existing astronomy-apps or -software.
- Simplicity - Setup and installation must match the mobility of a Dobsonian telescope.
- Wireless - No wires are needed to connect the user interface. Use Wifi or Bluetooth.
- Ease-of-Use - Anyone should be able to use it with minimal guidance.
To map the current orientation of the telescope to a map of the night sky, we need the following information:
- Date and time
- Location
- Orientation of the telescope
With this information we can transform the orientation of the telescope from a horizontal (alt-azimuth) coordinate system to the equatorial coordinate system that astronomy apps use to indicate the actual position in the night sky where the telescope is pointing at. The critical information with the most influence on the resulting overall precision is the telescope's orientation.
Pitch is filtered with 50-samples moving-average:
Heading is filtered with a simple IIR-Filter (decay=0.7):
I'm really happy with the stationary precision and overall noise level.
Details about these test-results can be found in the jupyter-lab notebook
Part | Description | Datasheet | Price | Source |
---|---|---|---|---|
ESP32 DEVKIT V1 30-pin | Microcontroller | ESP-WROOM-32 (30P) | <10€ | eBay |
GP-20U7 | GPS-Receiver | GP-20U7_Datasheet_v1 2.pdf | ~22€ | Sparkfun, Berrybase |
LSM6DSOX 6 DoF | Motion Sensor | LSM6DSOX Datasheet | 12€ | Berrybase |
SD-Card Case | Housing for Motion Sensor | n/a | n/a | you will have one of these lying around |
AMT222B-V | Angle Sensor | AMT22-V Kit | 50€ | Mouser |
Molex 502578-0600 | Crimp-Housing for AMT22 | CLIK-Mate Plug Housing | <1€ | Mouser |
Molex 79758-1011 | Cable Assembly for Crimp-Housing | Pre-Crimped Lead CLIK-Mate | 1€ | Farnell |
Housing Raspberry Pi Zero | Housing for µC and GPS-Receiver | n/a | 4€ | Berrybase |
SparkFun Qwiic 500mm | Connector Cable | Flexible Qwiic Cable - 500mm | 2€ | Sparkfun, Berrybase |
Micro-USB Cable | Power Supply | n/a | <5€ | Amazon |
USB-Power Bank | Power Supply | n/a | 15€+ | Amazon |
Hook/Loop Fastener with Adhesive | Attach housings to telescope base | n/a | 5€ | Hardware store |
Teflon Sealant Tape | Reduce tolerances | n/a | <5€ | Hardware Store |
POM Plastic Sheet 6mm | Attach Angle Sensor | n/a | 10€ | Hardware Store |
Steel Rod 25mm diameter | Attach Angle Sensor | n/a | 20€ | Hardware Store |
various Fasteners | Parts assembly | n/a | <10€ | Hardware Store |
A FeeCAD-File is available in the cad
-folder. The following parts need to be manufactured:
As the telescope's orientation after installation, especially with the more mobile dobsonians, is likely to deviate from the ideal horizontal/vertical orientation and to compensate for sensor-offset in general, an alignment-step is needed before use.
The aligment method is based on the alignment models described by THE EQMOD PROJECT - DOCUMENTATION & FAQs . To allow for maximum flexibility and precision, I implemented the following methods and algorithms:
- 1-point alignment for a real quick setup
- 2-point alignment to compensate for rotation errors
- n-point aligment with triangulated areas and automatic nearest triangle selection
The software picks the best method automatically, depending on the number of available alignment points.
For each alignment method, one (or multiple) transformation matrices are calculated using 2D affine transformations.
Alignment is done by pointing the telescope to a know target (e.g. star) and sending the real position of that target to the control unit. This is usually done with the telescope control feature of Stellarium Plus.
Consider a simple example where the telescope is pointed at a target (like, a star) and the sensor output indicates that the position of that target is
We can then calculate the difference
This simple method clearly has it's limitations as it can't compensate for rotation and scale errors. To overcome this limitation, additional alignment points need to be added.
With 3 alignment points, we can draw lines between the sensor positions
We can then calculate the affine transformation matrix
Please note that in order to do the actual matrix calculations, we have to add a 3rd dimension (
$z=1$ ) to each point.
We can then apply this transformation to any measured point
$A_z$ can be ignored. We only need$A_{Az}$ and$A_{Alt}$ .
This method can also be applied to points outside the alignment triangle but the precision will likely decrease with the distance to the triangle.
Solution? More alignment points!
Adding more alignment points will give a better coverage of the sky but leads to another set of problems:
- New alignment points lead to new triangles.
- Triangles might overlap.
- Each triangle-pair (Sensor and Reference) can have it's own specific transformation matrix.
The solution to this is triangulation. We add all alignment points to an array and compute the resulting set of triangles using a triangulation algorithm. Whenever a sensor input needs to be transformed to the real position, we execute the following steps:
- select the nearest triangle
$T$ in our set of reference triangles. - use the triangle's specific transformation matrix
$\mathbf{M}_T$ , to calculate the real position
The actual horizontal position
- Alignment near the zenith does not work very well due to the properties of the horizontal (Az-Alt) coordinate system.
I used a lot of resources on the internet during this project. Here's a list of the most important:
- vlaate/DobsonianDSC
- Control Your Telescope Using Stellarium & Arduino
- Arduino Star-Finder for Telescopes
- SpotNik - StepTo / PushTo / Digital Setting Circles for EQ Mounted Telescopes Based on Arduino
- Instrumented Telescope with Raspberry Pi and orientation sensor
- Telescope pointing based on inertial measurement unit
- Accurate Telescope Mount Positioning with MEMS Accelerometers
- Calculating mean and apparent sidereal time
- Data: Converting Alt-Az to RA-Dec – Example
- International Astronomical Union Standards of Fundamental Astronomy
- The Astropy Project
- Astronomical Calculations: Sidereal Time
- Sidereal Time Calculator For Any Date, Time and Longitude
- Local Sidereal Time
- Sidereal time calculator
- Converting RA and DEC to ALT and AZ
- 3D Rotation Converter
- THE EQMOD PROJECT - DOCUMENTATION & FAQs
- How to find a transformation matrix, given coordinates of two triangles in R2
- Computing 2D affine transformations using only matrix multiplication
- Learn How to Write Markdown & LaTeX in The Jupyter Notebook
- tomstewart89/BasicLinearAlgebra
- Efficient Triangulation Algorithm Suitable for Terrain Modelling, Paul Bourke, 1989
- Use Markdown to display mathematical expressions on GitHub
- FIIIR! - Design FIR & IIR Filters
- Bosch Sensortec MEMS BNO055 sensor driver
- AltIMU-AHRS
- Using an Accelerometer for Inclination Sensing
- How to format strings without the String class
- C++ Core Guidelines
- ESP32: Getting started with Bluetooth
- ESP32 Arduino Tutorial: 38. Serial over Bluetooth - Client connection event