Stabilized antenna for boats


There is a base calibration to the magnetometer that is made when its installed to adjust for the materials on the dish, which isn’t much as its all composite and aluminum. For re-occurring calibration the dish does a full 360’ turn much like cell phones require. This is stored and adjustments are made.

The GPS is a simple chip that cranks out NMEA to the UART,

All i need is my LAT, LON and the satellite LON. Assuming the satellite is geo-stationary you can use some math to figure out how to adjust the dish. Below are the two functions for getting Azimuth and Elevation.

The values are then adjusted based on two additional items.

  1. tilt of the dish based on a tilt sensor (since they are mobile mounted), so if the dish is tilted forward 2’ for example it will add 2’ to the elevation.

  2. determines which direction to turn the dish based on its current position in 360’ by a position sensor and the magnetic direction, with adjustments for magnetic declination from the World Magnetic Model ( this is to know if it needs to turn CW or CCW to get where it needs without trying to turn past a physical limit.

once the dishes are near the target, i use a simple signal strength circuit to peak the dish position once im close.

This code below is QT C++ (, which runs very well on the Raspi… These functions are simplified with multiple variables to make them easier to read… Coords are in Decimal Degrees…

qreal Positioner::computeAzimuth(qreal sitelat, qreal sitelon, qreal satlong)
    qreal satellite_long = satlong;
    qreal azimuth;
    qreal g = (satellite_long - sitelon);
    qreal grad = convertDegreesToRadians(g);
    qreal lrad = convertDegreesToRadians(sitelat);
    azimuth = convertRadiansToDegrees(3.14159263 - ( -qAtan( ( qTan( grad ) ) / ( qSin( lrad ) ) ) ) );

    return azimuth;

Compute Elevation…

qreal Positioner::computeElevation(qreal sitelat, qreal sitelon, qreal satlong)
    qreal satellite_long = satlong;
    qreal elevation;
    qreal g = (satellite_long - sitelon);
    qreal grad = convertDegreesToRadians(g);
    qreal lrad = convertDegreesToRadians(sitelat);
    qreal a = qCos(grad);
    qreal b = cos(lrad);
    elevation = convertRadiansToDegrees( qAtan( ( a * b - .1512 ) / ( qSqrt(  1 - ( a * a ) * ( b * b ) ) ) ) );

    return elevation;

I don’t have a project page, this is all really just a personal quest to increase my personal misery level to levels once never imagined… :slight_smile:



I share myself your increase of misery levels… This is being a big headache…hahahah… thank you for the code… that is gonna save me another headache…
My antenna works similar but instead of using a tilt sensor I’m using an 9 axis accelerometer/gyro/magnetometer. (MPU9250)
The trick is to alternate roll and pitch to calculate elevation (only for stabilization, you will need to add the difference with the elevation calculated through your formulae for final elevation). Uses roll or pitch depending if the antenna is parallel to one or the other…
The sensor must be in the frame that doesn’t move… (ie the roof where the antenna sits).
Take a look at for the sensor fusion.



The MPU9250 will work great, although you would need some crazy fast motors (steppers?) to move the dish fast enough to compensate.

This project brings to light one of several conundrums…

  • To know if your level you need to show it whats level
    Or the oh so awesome… for a gps to tell you where your at, you need to tell it where its at…



Hmm as i look at these formulas I see they may need to be adjusted to work in the southern hemisphere… I never considered that since I dont plan to drive to NZ from Alabama, USA…

Ill report back…


I think the formulas will work good in the south… the only thing is the magnetometer will measure negative value… Not a big deal to find orientation… What the regular compass points over there?.. Should be the same…
I did an ellipsoid calibration to my mpu9250 and finally I had to change the sensor to avoid soft iron errors… Now it finds magnetic north almost 1-3 degrees of error and it perfect stabilizes any movement…
Next step is to add gps, your formulas and a web interface to select the satellite…
I’m very happy with the results right now…
I’ll post the code when it’s finished.


I think you could use the lat-lon coordinates from the GPS to determine which satellite to tune to. I don’t know you would scan the satellites for best signal when two satellites can be heard in one area and make a roaming determination. I suppose it could be based on too many packet errors.

–Konrad, WA4OSH


Sure… that’s a good idea. The only problem is how to test the roaming option…(I don’t know asking to the flight attendant if I can power on my antenna in the middle of the Atlantic at 40000 ft of height…) But for the other options should work ok based in a distance calculation to each satellite…


You really don’t need to drive, sail or fly anywhere to to test roaming algorithms. You feed the receiver simulated data through attenuators. You feed your GPS software fake GPS coordinates with a GPS sentence simulator. You attenuate the received signal and the RSSI and SNR go down, packet error goes up. Your roaming algorithm says holy bat signal and starts looking for an alternate satellite. It reads the GPS location. Ahhh we could be receiving another satellite it’s at … X degrees azimuth and y degrees elevation. The antenna re-aims towards the new satellite and detects the signal. This time, the RSSI and SNR are favorable … and the packet error is down. You have roamed.

The signal in fact could be the same satellite. There’s no reason that all the signals can’t be faked out to watch the roaming algorithm in action.

–Konrad, WA4OSH.


I apologize Konrad it was kind of a joke… Actually I already planned to feed the rssi to the antenna program so I can use the info to fine tune and now also for the roaming option. But if the antenna is too high to get WiFi from the c.h.i.p it will have to live taking the decision by itself based on the shortest distance between the antenna coordinates and satellite coordinates… ( Both known). I have no idea how to build a hardware rssi detector for the antenna… I’ll dig on it in a future…



I did not realize it was a joke,

I was given one of those automated dishes for RV’s and boats … for tracking Ku band satellites. I’m going to convert it to L-Band, Satellite roaming does make sense.

In my past life, I worked on Wi-Fi roaming inside of large airports to allow continuous coverage between 130+ access points.

I worked on putting Wi-Fi on trains at 150 MPH and had to roam between towers along the track – Amtrak NE Corridor.

Roaming algorithms are interesting and can be completely simulated before putting them to a live test.

–Konrad, WA4OSH


Wow that’s impressive!!!. That’s why it looks easy for you!! Hahaha… When I’m close to there I’m sure I’ll have questions about satellite roaming. I’ll appreciate if you can share some of that knowledge…



welp might as well turn it back in to ku band now…


Lol yea, what’s funny is all the software I wrote for a previous project I adapted to L-Band Outernet… the previous project was for a group of AVL-1278 KU band dishes! So we are full circle now…

I’ll just rotate the DC antenna switch back to the KU-band dish and run with it…

So sweet.



I was given a KVH Tracvision L3/S3 for my land yacht. I will be reading the KVH TracVision L3/S3 Owner’s Manual to see how it might be adapted for Outernet DC3.

It’s meant for Dish Network
—> New satellite coordinates
—> New LNB?

It’s probably similar to this YouTube Video KVH TracVision C3

–Konrad, WA4OSH


LNB might be ok as dish is also KU band… depends mostly on the LO the outernet DC3 rx is designed for… even so it’s an easy change…

I’m quite amazed that they were getting enough Sig without a dish focusing the Sig for the LNB. I wonder what the power output on that Signal was… if the sig is too strong then you point a dish to the LNB you can burn it up without attenuation…



Yes … Dish Network is on Ku Band. So it’s the satellite receiver that determines what programming can be seen on the feed, not the LNB. Interesting. People are leaving Dish Network and Direct TV in droves. There are tons of dishes around all over the place for FREE.

I’m pretty sure that pointing the dish at an LNB won’t damage it. Millions of satellite receivers using LNBs have been trained at the candidate satellites for decades.

The Outernet DC3 will be pointing at satellites that carry TV programming as well. Between the lines, @Syed will probably be using an Single Carrier Per Channel (SCPC) from one of the satellites. Instead of one wide TV channel, there are dozens of data and radio carriers in that channel. I’m guessing that Outernet will use one or two of them – a left and right channel, one for audio and one for data (just conjecture). Since these signals are much narrower bandwidth than the TV signals, so you don’t need nearly he signal strength to decode. You can use a bare LNB to hear these signals with the right filtering with an SDR. This makes for a much more compact and portable receiver.

–Konrad, WA4OSH


Your right it’s the receiver, but also the LNB needs to be designed for the same LO so the frequencies provided by the LNB match the frequencies the receiver is designed to tune to. If you have a 10.75 ghz LO LNB on a receiver designed for a 9.75, 10, 10.6 or 11.3ghz it wont tune properly. tuners are not VFOs, but channelized so they have to match.

You misunderstood my point. In syeds pic the LNB is pointed towards the satellite, without the dish to focus and amplify the signal. In the case of a dish setup, the LNB is pointed to the dish. If the signal is strong enough to get great Sig strength without the dish, then the concern is if the dish can overload it when focused and amplified.

Regarding smoking an LNB…
It absolutely can happen, I’ve got a 14.5 ft c-band dish (with KU band added) i use to point to low horizon KU sats, and by mistake pointed it to a strong KU Sig without attenuation and smoked the LNB. The LNB was designed for a smaller gain antenna.



I don’t know what the LO is for Dish Network for the KVH TracVision dish. I suppose it won’t matter because I’m going to listen to it with a SDRx. In this case, it is a VFO. But you are right, if I want to convert a Dish Network dish with an FTA receiver, I need to know the LO of the Dish Network LNB.

Well, not exactly. The satellite is not sending a signal that is any stronger than any other regular sized dish will have to deal with normally. The signal is not any stronger. It’s the IF bandwidth that is narrower.

Yes … of course a 14.5 ft dish. It’s got loads of gain. i can see how it might smoke a LNB. If the sun passes over in the wrong place, I think it could make things quite hot … for a few minutes.

– Konrad, WA4OSH


Yes, definitely SCPC.


I’m not gonna pick on details, my point was that we don’t know the details of the LNB (amplification lo etc) and the signal was strong enough to be reliably decoded while pointed by hand at the satellite without a dish to amplify it, makes me cautious about that lnb being used on a dish with that signal…

That’s all