1. Introduction

There’s always point where you have to decide in any expensive undertaking, such as amateur astronomy, where it’s best to apply your hard earned currency. For any given piece of equipment, you have to determine what feature set is required, decide what commercial products, if any, suit your needs and finally, what your best purchase option may be. For me, there’s always been a desire to see if I can build a more cost effective solution first, before I proceed to purchase.

With that in mind, it’s been my goal for some time, to complete my automated and remote solution for my personal astronomical observatory. Not having found a cost effective remote focusing solution on the market, I decided to see about low cost DIY alternatives. During my search and evaluation I turned to the INDI platform for ideas.

My project goals were simple; I must have the following:

  1. Reduced complexity, easy to build.

  2. INDI platform compatibility. As a result, the basic solution should be deployable to any UNIX/POSIX based system.

  3. The ability to remotely support main scope focus, as well as a guide scope.

  4. Applicable to commercially available SCT scopes Meade, Celestron and guide scopes such as Orion 80ED.

  5. Use of Continuous Rotation Servos as an alternative to the higher cost, increased complexity and power requirements of a stepper based solution.

  6. Adjustable speed control.

  7. Keep It Low cost.

  8. Wireless Capability.

The ultimate desire was to have all of the above, yet have a completely integrated hardware and software interface to all of my equipment. INDI, it seemed, provided all of the features needed for imaging, guiding, tracking, control and focus in one integrated software solution, provided that my devices were all supported. They were, except for driver support for the servo based focuser I had envisioned.

No problem here, I decided, I would create my own software driver based on the excellent examples provided by the INDI site.

How did I put all of this together? I actually created two solutions, one direct wired via USB and one wireless solution:

My solution utilizes an Arduino UNO board with a simple wiring diagram to interface directly to 2 servos. It’s really quite simple, and should work with any Arduino board that can drive a servo. In my ‘direct connect’ solution which was used for testing, I connect directly to the Arduino board using a USB cable and a local indiserver instance running on the same Linux based PC as the INDI client. For deployment, I installed the INDI platform and INDI server to a Raspberry PI Rev2 and use an 802.1n USB dongle to provide remote/wireless capability to allow remote access from anywhere on my local network. First, a little bit about servos. I used ‘standard’ servos which are of a size and shape similar to those seen on hobby RC airplanes. There, the similarity ends, as RC controlled airplanes use limited travel angle servos. Their control protocols are very much different from continuous rotation servos and are not suitable for this application.

NOTE: This solution and software driver absolutely will not work with limited travel angle servos without necessary changes to the driver (and maybe not even then). The servos used for this solution must be ‘continuous rotation’. They’re available for around $9.00 USD or maybe less from vendors such as Parallax or Futaba etc.

2. Design considerations

  1. Continuous Rotation Servos are Open Loop devices.

    • Input Pulse Controls Direction and Rotational Speed

    • Digital pulse of 90 Stops Rotation, Smaller Value equals Clockwise rotation, Larger Value equals Counter-Clockwise Rotation, speed increases relative to absolute integer value of the pulse from 90, plus or minus. Greater the value plus or minus from 90 the greater the speed.

    • There are 3 wires on a servo, 2 wires for DC power, 1 for control, typically uses 4.8 volts.

  1. There were some tradeoffs to all of this.

    • This solution is NOT good for varying loads

    • There is no feedback on position, so automated focus mode, which requires some sort of closed loop feedback, is not an option.

    • Manual push button operation is the ONLY supported mode at this time.

  1. This basic solution should be deployable to any Unix/Posix based system upon re-build/compilation.

    1. This was developed on Ubuntu/Kubuntu Linux

    2. Currently, tested on Ubuntu/Kubuntu Open Source distribution 13.10

    3. INDI Drivers also compiled and tested on Raspberry Pi ‘Raspbian’ distribution of Linux

  2. Two (2) Servos maximum are supported in current design.

  3. No current support in this release for alternate configuration of Arduino hardware control pins to other than 8 and 9.

  4. This solution becomes wireless-enabled when drivers are deployed to Raspberry PI.

DISCLAIMER: Any decision to implement a strategy or recommendation contained in this design is made solely by you. This is what worked for me; it may not work for you. Please check your design and implementation strategy carefully. The user is responsible for ensuring suitability of this or any design and direct interfacing of all hardware.

3. Construction & Operations

The Arduino UNO board layout, as illustrated below, shows a direct connection to the Servo’s pulse line (which in my case was the white wire) from either pin 8 or 9 depending on the servo I wanted to control. I attached the red and black to the power and ground, respectively.

Direct USB Connection Wiring Layout

For Wireless Connection it’s almost as simple for the wiring layout. Except, here we connect the Arduino to a powered hub, the powered hub to the Raspberry Pi and we install the focus driver on the Raspberry instead of the client Linux machine. It’s that simple.

The added benefit, of course, is that we now have the option to run more devices remotely by adding new device drivers to the Raspberry Pi. Be sure your powered hub can support the demands of your devices.

4. How do I run all of this?

Direct Connection using USB from client Linux machine to the Arduino

  1. Launch KStars on Linux client.

  2. Connect required devices via USB.

  3. Open an XTerm session on the client and start an INDI Server with any device driver(s) including the focus driver

  4. Connect to the INDI server instance, using the IP address and port number of choice or the typical default of 7624.

  5. Use the INDI control panel to connect to the Focus Driver.

Remote/Wireless Operations from client Linux machine to the Arduino

  1. Install INDI software on Raspberry Pi

  2. Install Focus Driver software on Raspberry Pi

  3. Connect Wireless 802.1n ‘dongle’

  4. Connect Powered USB hub

  5. Power up Hub, then Raspberry Pi

  6. Connect devices to the powered hub.

  7. Open an XTerm session and initiate an SSH session to the Raspberry Pi, start indiserver with Focus Driver

  8. Start the KStars Client on the Linux Client.

  9. Connect to the remote instance of the indiserver via Tools/Devices/Device Manager/Client

  10. Use INDI Control Panel to Manage Focus and other devices.

5. How much will this cost?

For me the out of pocket cost wasn’t too bad, as I already had some of these components lying around.

Total Out of Pocket Hardware Cost - $ 97 USD

    • Raspberry Pi Rev2 $35 USD

    • Wireless Dongle $9 USD

    • Arduino Uno $35 USD

    • Servo $9 USD x 2

Total Out of Pocket Software Cost - $0 USD

    • Operating System $0 USD

    • KStars $0 USD

    • Driver $0 USD

6. How do I connect the focuser to my telescope?

First of all, I had to be creative. I don’t have a metal lathe or machine shop. There are many examples of custom mechanical solutions connecting servos to focusers on the web. Some use pulleys; others use a direct friction drive. Most are very clever and use available hardware and other common items. I’ve found that the ½ inch PVC pipe end caps available in most hardware stores fit the focus knob on the CPC-800 and the legacy LX series Meade I own perfectly and are a nice snug fit. I plan to alter my current arrangement of a friction wheel and attach the PVC cap directly to the servo using a small set screw and then use a small hardware brace made from aluminum to attach the servo to my SCT.

The Arduino is housed in a small hobby box, along with the Raspberry Pi board. Both are attached via small straps to the optical tube of my SCT. Low tech, but effective.

7. Summary

This design appeals to me in its simplicity and its low cost. Hopefully, it will enable you to create your own solutions and may be a starting point for your own design. Good luck!