Have you ever had an idea that seemed easy, but proved hard, and you gave up on it? I’ve had MANY. This is one I gave up on, then came back to with the attitude of defeat is not an option.
It started out about two years ago when I was still 2E0KCI and found a little project called SARCTrac - SARCTRAC - SARCNET
It was an arduino based satellite tracker that used an IMU (inertial measurement unit) to detect the orientation of a motor controlled arm. IMUs are everywhere and you almost certainly have one in your phone. It’s the chip that lets the phone know which way up it is (thus changing the screen from landscape to portrait). Combine that with a magnetic sensor and you can figure out both compass heading and pitch, and therefore everything you need to point toward a satellite.
The problem with SARCTrac was it was written for the arduino using a serial connection and I wanted to port it to an ESP32 so I could control it over wifi. Simple, right? Well, it turned out not quite so. Not a single line of the original SARCtrac code is left. I’ve rewritten everything which is handy has SARC stopped all support for the project and the original source code is no longer available.
Anyway, here’s the first attempt using mostly my software, but the hardware as specified by the original project.
Using a helical antenna I built to attempt to receive L-band HRPT images from the NOAA birds. The ground plane plate is a PCB - that was an expensive experiment from PCBWay! Turns out massive circular PCBs are not very cost effective and I should have just gone at a biscuit tin with the snips instead.
Anyway, the tracker… It sort of worked, but mechanically it was awful. The 6mm output shaft of the azimuth and elevation drive motors was not up to the job of transferring the torque to that meter long elevation arm with the weight of the antenna (+ SDR + preamp) at one end and a counterweight at the other. The grub screw on a 6mm D shaft had a backlash of many degrees and often just failed completely.
I was also having terrible issues with the cheap IMU. It was fine at detecting pitch, but was stupendously inaccurate and unreliable at finding the heading. I should note I was still using the IMU specific code from sarctrac for version 1 of my ESP32 port.
I spent ages trying to get it to work, but it was so sloppy and unreliable, I just gave up with it and put it away in a cupboard.
Two years go by, then in January of this year I decided I’m going to have another crack at it. I’ll fix the hardware issues and rewrite the entire code base. How hard can it really be, eh?
I bought a better IMU module made by Bosch and began to code it all up. I was expecting to be able to just ask it what the pitch and heading was, but it turns out it’s not quite that easy as it gives you its orientation in quaternions. I didn’t know what a quaternion was at this point. I’m not very good at maths, you see. So here’s wikipedia’s brief explanation of what one is.
" Quaternions are generally represented in the form
a+bi+cj+dk,
where the coefficients a, b, c, d are real numbers, and 1, i, j, k are the basis vectors or basis elements"
Now if that sentence made any sense to you, then you clearly spent longer in school that I did. So began the pain. I can’t explain how hard it has been to get this software working. There were many up until 3AM instances.
I had another idea too. Using a high torque servo to handle the elevation control.
It was a bad idea. Servos don’t allow for speed control, so it was trying to throw that meter long arm at full speed to a new position of elevation. Workable with a light load, but tried to reverberate itself to bits if it was moving any sort of mass. It was rather compact though, so I put the IMU on a 20cm arm and used it as a desk based test device which I developed 90% of the firmware/web interface on.
But finally emerges the version I demo’d at the club. It only cost me a 3D printer, learning CAD software, about 3 months of trial and error and pulling my hair out, a (lame) drill press, taps, drills, endless experiments with various materials, and more money in R&D than a ready made Yaesu Az/El rotator would have cost…
The above is a pre-bought flange that came with 3mm grub screws, but since they take all the torque of the azimuth drive, I drilled and tapped it for M4, then drilled and tapped an aluminium disc with a 1/4 UNC thread in the middle so it could easily be attached with a camera tripod. Also, in an effort to improve the sarctrac design I added a thrust washer.
The Hammond cast aluminium enclosure I was using had a casting draft angle on the sides so I had to print some shims to square it up.
The internal mess of the almost finished unit. In the absence of yet designed parts, blu-tac made a convienient OLED mount.
So there, it’s working! Kind of. It’ll track a satellite, it can point to planets, it does what I made it for, but not reliably. The IMU can still have a fit, especially at high elevation passes, and in general it’s ok to use but only if you’re standing by ready to hit the motor kill switch when it “goes funny”. It’s ok for experimentation, it will track satellites more often than not, but I’ve come to the conclusion that detecting orientation with an IMU is a bad idea. They’re just not accurate. Ok for the beam width of a yagi, but for the microwave stuff, especially with a dish, it’s just too sloppy.
So, the latest thinking. I’ve sacked off the original sarctrac idea of using worm drives and an IMU, and instead I’m going for a much higher torque and accuracy approach. The only downside is you’ll have to manually calibrate it to level and north.
This is very early stages, but so far, so good.
Using an AS5600 hall effect sensor to handle rotation detection. It’s accurate to 0.09 degrees, excluding mechanical backlash. I’ve only physically tested the elevation control so far and the accuracy pans out. It’s really reliable!
Using an HTD5M drive belt and pulleys and a high gear ratio motor, this should comfortably lug around a 100cm satellite dish (I hope).
My “breadboard” prototype of the elevation system on a literal breadboard. Kitchen sacrifices are a necessary part of the hobby!
Next is the azimuth drive, and this is being problematic. The AS5600 only has one I2C address so I need to include a multiplexer, and mechanically it’s been a puzzle to solve, but I think I’ve cracked it. I wrote this whilst waiting for the printer to cook up some bevel gears… They’re done now, so back to work I suppose.
If anybody in the club wants code or CAD, just ask.