Raspberry Pi Driven Telescope Mount

full telescope control over WiFi using INDI on a RPi Zero W

Similar projects worth following
This project focuses on gaining remote computer control of a Celestron telescope mount, as well as adding the ability to use a more ergonomic joystick for slewing while at the scope. To achieve these goals, a Raspberry Pi Zero W was integrated into the hand controller while still allowing normal operation of the scope mount. Once integrated, the RPi was then configured to allow remote control using either a cell phone or a laptop running open source astronomy software.


While there are existing mounts that are WiFi capable, none of them give the flexibility of a system running Linux. If I have SSH access to my scope, I can do pretty much anything. With this in mind, the Raspberry Pi Zero W is also only $10, and the difference in price between the Celestron Evolution and the SE series is over $500. While there are far more features in the Evolution than just WiFi, if this is your only reasoning for the upgrade, it's tough to rationalize this additional expense. Likewise, there is no equatorial mount with WiFi available in the price range of the AVX (my other telescope mount). Hence my addition of a RPi Zero W to each of my mounts.


I have been mulling this project over for several months now, trying to figure out a way to fit a Raspberry Pi Zero with a USB WiFi dongle into the Nexstar hand controllers that came with my mounts. There didn't seem to be an easy way that didn't involve 3D printing a new back for the controller, which I wasn't opposed to, but was a little more work than I had time for. Then the Zero W was released, and I jumped at the chance to simply plop it in without any fuss, and have the added bonus of Bluetooth!

I'm simply amazed at how easy this hack has been, and how well it translated between my serial and USB based hand controllers. Now, if the clouds here in Seattle would just go away, I could actually enjoy using this upgrade!


I set out with several requirements in mind, and have met all but one so far.

  • seamless original functionality [COMPLETED]
  • ability to SSH into telescope mount [COMPLETED]
  • full remote control of mount using OSS astronomy software [COMPLETED]
  • better scope slew interface (joystick) [COMPLETED]
  • automated time and location settings (GPS?) [TODO]

Keeping the original functionality of the telescope mount is a must. Dragging the scope out into the field and being able to use it without a computer when I just want to do simple observational astronomy is a hard requirement. However, I would like to try to make this a little easier.

Currently, the original functionality requires manually entering your location, and the date and time. This could be automated with geolocation of the external IP address and NTP when connected to a network. Eventually, I'd like to add a GPS module to handle this functionality even when away from an Internet connected network.

The ability to remotely make adjustments to the configuration of the libindi server, perform software upgrades, and install new software without cracking open the case to have physical access to the integrated computer is a must. The most secure way to gain access to this is through an SSH connection.

After a lot of research and experimentation, I found that Kstars in combination with libindi make a great pairing for a remote telescope control project. Kstars even has an Android app that allows control from a cell phone! The main developers for libindi and Kstars seem to be hardware hackers, so there's awesome new features being added regularly to the project.

I've always disliked the hand controller on my Celestron telescopes. It's clunky in the dark, and when you're wearing gloves it's nearly impossible to tell which button you're actually pressing. I'd love to be able to use a Bluetooth SNES controller instead!

More Information

  • If you have a standard RS-232 controller check out the instructions section for details on how to make this modification yourself
  • If you have the USB hand controller, then read through this quick build log for modifications to the original instructions

  • It works really well!

    Dane Gardner05/30/2017 at 02:10 0 comments

    I wanted to get some photography of Jupiter's Great Red Spot while it was facing us, but unfortunately it was too early in the evening to do a proper alignment using Polaris. This meant that I'd have to hand align the telescope as my three minute exposure progressed. Normally this would involve using the corded hand controller, which meant I'd have to hold perfectly still to avoid introducing vibration into the telescope through the cord, but with my wireless controller, this was not only easy, but I could comfortably sit several feet away closer to my laptop screen! The result speaks for itself:

    Equipment: C9.25 on AVX + Neximage 10

    Parameters: Y800 640x480; 30FPS & 1/30s @ 3.5dB for 03:00

    Processing: 3594 frames >> PIPP >> 1200 frames >> Registax 6

  • Automatic connection of Bluetooth controller

    Dane Gardner05/28/2017 at 00:03 0 comments

    I was having problems with consistent connections of the Bluetooth controller, and found that despite configuring calibration settings at boot time, they were lost if the device wasn't already connected. I ended up writing a script that could be run periodically using a cron job that would attempt to connect the joystick if it wasn't already, and then calibrate it if it wasn't already.

    Here's the complete code:

    Save that file to your home directory on the Raspberry Pi, and ensure that it's executable. Then add a cron job that runs every minute using `crontab -e` at the command line:

    * * * * * ~/

    Now, if your joystick isn't on and ready to connect when you start your telescope, it will take a maximum of one minute before it's discovered, connected, and configured once you do turn it on!

  • Using a Bluetooth joystick for slew control

    Dane Gardner04/11/2017 at 02:11 0 comments

    I picked up a cheap Bluetooth SNES controller to allow me to slew my telescope without disturbing the setup with vibrations from a wired hand controller. This should allow things to settle more quickly after a manual change to the scope's position.

    To configure the RPi for a Bluetooth joystick, I used `bluetoothctl` at the command line:

    [bluetooth]# agent on
    [bluetooth]# default-agent
    [bluetooth]# scan on
    [bluetooth]# pair XX:XX:XX:XX:XX:XX
    [bluetooth]# trust XX:XX:XX:XX:XX:XX
    [bluetooth]# connect XX:XX:XX:XX:XX:XX
    [bluetooth]# quit

    Unfortunately, the joystick driver in libindi forgets any remapping you may perform in the UI, despite saving and reloading the configuration. To work around this, I changed the button mapping at the OS level to match what I wanted, and have it automatically reconfigure each time the RPi reboots.

    apt-get install joystick
    cat > /etc/ < EOF
    jscal -u 8,0,1,2,5,9,10,16,17,16,315,304,305,314,307,308,310,311,316,317,318,319,306,309,312,313 /dev/input/js0
    jscal -s 8,1,0,127,127,-4194176,-4227201,1,0,127,127,4227201,4194176,1,0,127,127,2147483647,2147483647,1,0,127,127,2147483647,2147483647,1,0,0,0,2147483647,2147483647,1,0,0,0,2147483647,2147483647,1,0,0,0,2147483647,2147483647,1,0,0,0,2147483647,2147483647 /dev/input/js0
    echo "source /etc/" >> /etc/rc.local

    Be sure to add the 'Joystick' driver to the libindi server configuration in the web manager interface!

    That's it. It works great for me now!

  • Modifying a USB Nexstar hand controller

    Dane Gardner04/11/2017 at 00:20 0 comments

    The project instructions detail how to modify the serial version of the hand controller, which is more common on the smaller mounts like that found on my Nexstar 6SE. However, I also have an AVX mount for my other telescope that I'd like modified as well, but its hand controller is USB based.

    Turns out it's even easier to modify than the serial version because the pins on the USB chip are significantly larger! Please note that the USB chip is upside down when compared to the serial adapter chip of the other HC (pin 1 is to the lower-right, instead of the upper-left).

View all 4 project logs

  • 1
    Step 1

    Configure your Raspberry Pi running Raspbian to connect to your WiFi network, and enable SSH so you can go back later and install the things you need once you install it in the hand controller (HC).

  • 2
    Step 2

    Gather your components, and open the case on your Celestron Nexstar HC.

  • 3
    Step 3

    Open the case on the HC and using a multimeter identify the incoming 12V power line and ground. Wire up your 5V power regulator and prepare it for mounting.

    After soldering the power regulator to the incoming power, and the Raspberry Pi, I secured it to the HC's main board using a hot glue gun.

View all 10 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates