A Cheap DIY Satellite Tracking Mount

I’ve wanted an azimuth/elevation mount for a while, but never had the money for a real one! Even used models go for $700 and up, so the sticker shock always kept me away. Building my own always seemed complicated and confusing, since it combined all the skills I’m only sort of OK at. Aligning motors, balancing things, programming motion, reading a sensor, and automating the whole rig just seemed like a lot of work!

Fortunately, a few factors made this project relatively easy! First, I got a used pan/tilt camera mount from Ax-Man Surplus. This is a nice robust unit designed to move old-fashioned heavy security cameras, so it can take some weight and doesn’t need too much balancing.

Next, I discovered I could modify the design and code from the SARCNET Mk1 Tracker to use this camera mount. The original project had options for different motors, including a homemade mount assembly and a pair of regular old TV antenna rotors. My camera mount was functionally and electrically similar enough to a pair of rotors that it worked just fine! The main modification I did to the mount was to remove the side cover and slide the vertical limit switches farther apart. This lets me move the mount a full 180 degrees. So far the tracking software hasn’t needed to go a full 180, for overhead passes it just spins the dish and then goes back down the other side. If your camera mount can do a 90-degree elevation, that should be sufficient.

The SARCNET project is aimed at Yagi-Uda antennas for 2m and 70cm (VHF/UHF). This is a typical setup for contact hamsats and talking through the amateur radio repeater on the International Space Station. I wanted to use a parabolic dish for L-band (~1700Mhz). That would let me receive images from satellites like the NOAA POES series, Russian METEOR series, European METOP satellites, etc. While some of these satellites also transmit images on VHF, the L-band signals are higher bandwidth, higher-quality images and contain more data. The VHF signals can be received with a stationary antenna like my QFH rig, but L-band usually requires an aimed directional antenna that tracks the satellite as it passes overhead.

My take on the SARCNET Rotator worked great with a dish! I’ve used this dish for other projects in the past, it was originally a 5.8ghz wireless network antenna, given to me by another local ham. This project would also work with a Wifi grid dish or any small lightweight antenna (even an umbrella covered in foil!). Note that this is a pretty beefy pan/tilt mount, mine is a model PT570. It can handle my reflector without any counterweights, but if you use a lighter-duty camera mount you may need to balance it with a weight opposite the dish. Some larger pan/tilt mounts do exist, and some apparently have built-in position sensors. Mine just has 5 wires for control. One common, and one for each of the 4 motion directions.

My control box was also slightly different than what SARCNET used. I had a slightly different Arduino, and I couldn’t find the Triac control board they suggested. I ended up using relays to run the motor, which seems to work just fine. The things do make a lot of clicking and clunking at low speed and for fine tuning, so hopefully I’m not wearing them out too fast! They only cost a few dollars on Amazon, so I’m not too concerned. I’m using the same sensor suggested by SARCNET (the LSM303DLHC). Calibrating it is a little fiddly and took me a couple tries. They have a video about the process here.

My wiring is pretty messy in the above photo, so here’s a diagram of what I did:

I mounted the parabolic dish flat on the top of the camera mount, and placed the sensor at the rim of the dish. My reflector is made of aluminum, so it doesn’t affect the sensitivity of the accelerometer / compass chip. I had previously tried placing it closer to the base of the dish, but the sensor was confused by the motors in the camera mount.

For the radio system, I’m using an RTL-SDR Blog v4 on a laptop, connected to a Nooelec SAWBIRD GOES on the dish (these links give me a small Amazon kickback if you buy from them!)

I followed the Compilation and Set To Work instructions on the SARCNET website. Once the Arduino code is loaded, and I had Hamlib and Gpredict on my PC, my procedure for use is as follows (using Linux):

Ensure rotor has enough play to follow sat (check position of cut-off switches underneath)

  1. Connect SDR
  2. Connect 24V AC to pointer
  3. Connect USB from pointer to PC, Dish will rotate to Az 0, El 0.
  4. Open terminal, run “rotctld -m 202 -r /dev/ttyACM0 -s 9600 -C timeout=500 -vvv -T 127.0.0.1 -t 4533”
  5. Open Gpredict
  6. Select / open desired module
  7. Options -> Antenna Control
  8. Select target sat and click “Track”
  9. Select rotator device (“MediumDish”) and click “Engage”

Dish will run to initial Acquisition of Signal (AOS) position and wait

If serial connection crashes (rotctld window start showing errors and dish stops moving)

  1. Unplug 24v
  2. unplug and re-plug USB
  3. Ctrl-C rotctld and re-run. May need to change ACM0 to ACM1
  4. Go back to Gpredict rotator controller and re-select “Track” and “Engage”
  5. Re-connect 24v

Settings for Gpredict:

  1. In Preferences -> Interfaces -> Rotators
  2. Host: 127.0.0.1
  3. Port: 4533
  4. Azimuth type: 0->180->360

Recording and processing the satellite pass is the same as with a handheld dish. I use N2YO.com to look for upcoming passes (Select your satellite, like NOAA 18, click on “10 Day Predictions”, then “All Passes”, and look for ones with a high El number for the max altitude.
My procedure for each pass is as follows:

  1. Open SDR++ on the laptop
  2. Select the SDR device (sometimes I have to refresh), make sure the sample rate is as high as you can go (2.56Mhz for the RTL-SDR) and click the Play button at the top.
  3. Make sure the BIAS-T function is checked. Sometimes I need to do this several times to get the power light on the SAWbird filter to come on
  4. Set the gain, I sometimes start with max and drop it as the signal improves, or you can use AGC or whatever works best for you
  5. Set recording settings to Baseband, WAV, Int16
  6. When the satellite is in view and the antenna is tracking, click “Record”
  7. When the signal drops and the pass is over, stop recording
  8. Open SatDump
  9. Select the appropriate satellite pipeline from the list at the top
  10. Set the Input File to the baseband recording I just made
  11. Set the Output Directory to wherever I want the images to go (I usually make a new folder for each satellite and pass)
  12. Make sure the Baseband Format and Samplerate are the same as SDR++ (this should automatically update once the Baseband recording is loaded)
  13. Click Start
  14. Once the processing is done, open the Output Directory and see what I got!

As with all of my projects, this too plenty of trial and error, and didn’t work right on the first few tries. Eventually everything came together and worked smoothly! I’m looking forward to repeating this with some other types of antennas, like VHF/UHF Yagis. I’m also planning to do a bigger dish in the near future!

Leave a comment