FPV flying

One of the things I first didn’t wanted to do with my planes was FPV flying. It looked nice when others did it, but I was afraid of the price of equipment and also about loosing my plane when sudden signal loss occurs. But once I’ve learned to fly a bit with the trainer glider, I realized the delta wing planes are not for me (nothing much to do there), aerobatics planes don’t act as nicely as in simulator (due to small imperfections), I decided to give the FPV a go.

First I had just a camera recording to SD card on the plane, but that isn’t a real FPV if you just watch it afterwards. So I bought a 5.8 GHz transmitter and receiver and I thought I’ll be OK without some on screen display, watching the received video on a TV in the trunk of my car, with engine running to not to drain the car battery. Now this had several wrong assumptions in it:

  • watching the video on TV instead of FPV goggles feels wrong – this isn’t immersive experience and thus removes half of the joy of FPV flying (for me)
  • having a car with running engine (thus car keys in the ignition) while you stand behind the car and watch TV in the trunk feels unsafe – anyone could sit in the car and drive off, while I would first try to land the plane before handling the situation
  • possibly breathing exhaust smoke from the car (but I didn’t want to add additional batteries to the system, so powering it from car first looked like a good option)
  • no OSD (On Screen Display) in the video to tell you where you should return with the plane when the signals gets worse
  • no video recorder / GPS received from plane to have the last position stored in case of plane crash, to be able to recover the plane
  • not very strong video signal
  • the list of things I needed to pack in the car (and which I shouldn’t forget home to be able to fly) was growing, and forgetting some cable once wasn’t a thing I enjoyed that day


This was the time when I decided to add sending of GPS coordinates from plane to ground – for return-to-home direction, for last GPS coordinates storing and viewing, but I didn’t want to add additional transmitter on the plane, so I’ve developed a AFSK encoder (for plane) based on STM32 MCU and decoder (for ground station) running on notebook with linux, written in Python + Qt for UI, and it felt nice for one or two flights…


…but very soon I felt that having additional devices (notebook + power brick) to pack and not forget, and also the booting up of notebook annoyed me – the last thing you want to do when you are about to enjoy the flight with the plane is to wait for GPS to acquire a satellite lock while you wait for notebook to boot, while you wait for TV to start, and so on.

About the AFSK data transfer – the data is sent by encoding data into audio signal and feeding it into the 5.8 GHz video transmitter in the plane (instead of silence or motor noise on plane), then the sound is received along with the FPV video by the 5.8 GHz received, and the audio signal is decoded back to digital data. The transfer speed is low (around 30 bytes per second), but it’s enough to send the GPS coordinates of plane (or just azimuth and elevation towards the plane) once per second to the ground station with antenna tracker. You can see the AFSK signal here – bits encoded as higher and lower frequencies (the more dense waves vs the less dense waves):




So it was time to get some goggles – I bought Quanum DIY FPV Goggles as they were one of the cheapest (although I would love something from FatShark, but not for the price they cost :-D ), then I’ve bought like 3 different video recorders (DVR) from China to find out that 2 were not very good – e.g. stopped recording when the video signal gets lost for a while (which does happen a lot with FPV), so the last one and best out of those 3 was HMDVR. I’ve also bought a better 5.8 GHz receiver with diversity - Quanum RC540R 5.8GHz 40CH Race Band FPV Diversity Receiver.

I’ve also remade the AFSK decoder on BluePill (STM32 board, Arduino compatible), so I could avoid bringing and booting whole notebook, while it would also control the servo which would then point the directional helical antenna towards the plane. Now this felt good for a one flight or two, but then I’ve noticed that:

  • I could get a decent video in one direction from 800 meters, while in the opposite direction I could get only like 300 meters
  • I was expecting longer range with 200 mW of TX power, circular polarized TX antenna and helical RX antenna
  • without the elevation servo (with azimuth only) flying over my head was also causing signal loss



My guess was that I didn’t calibrate the servo good enough to point exactly to expected azimuth angle, and thus it was pointing slightly off to side and thus loosing signal. One solution would be to add a digital compass chip on near the receiver, so I could rely on the measured real azimuth instead of manually calibrated servo-angle-to-azimuth thing. That would be the theory, but in practice I saw (in my first job) how the digital compass chip can be ‘distracted’ by many things (like having a servo or piece of metal nearby) and thus having totally wrong readings. So manual calibration wasn’t good enough, compass could even worsen the situation.

That was the moment when I thought it would be a good idea to rely on the RSSI from receiver to tell me which direction is the signal stronger (no matter the received azimuth), and thus inspired by SUPER SIMPLE 5.8GHz RSSI ANTENNA TRACKER by Antti Vainik I decided to something similar, but instead of hacking my original receiver like Antti did,  I decided to buy some RX5808 modules (5.8 GHz RX modules) and create my own diversity receiver, with 2 directional antennas and 1 omni-directional antenna, plus having a spare place for additional receiver for future elevation extension.



I’ve based my code on Antti’s code for the left-right movement detection, and the SPI control of RX5808 modules was based on rx5808-pro-diversity project by sheaivey. The tests I’ve made behind my house showed that:

  • the distance of 20 meters between TX and RX is too little, so the signal is too strong and there are possibly reflections from other houses, so the RSSI on left and right receiver vary a little, which prevents me from testing it (behind my house) to see if it’s working as expected
  • left and right receiver, together with two different antennas (same helical type, but some manufacturing differences are possibly present) result in the RSSI from those two receivers to be different, even if both are the same distance from TX and pointing directly to TX. This could end up in the RX wandering off to left or to right and that could lead to signal loss and thus plane loss.

The 2nd point (different RSSI levels) was bit concerning, and even though it could be possibly ‘calibrated’ away by adding / subtracting some RSSI value from one RX or the other, I didn’t had a good feeling about it.


A solution would be to have just one RX to scan the whole servo range from left to right, that way I could rely on not having twp different RSSI values of two different RXs. So I did just that – separate single scanning receiver. But the tests then showed that:

  • having one servo sweep the whole servo range slowly finds the plane nicely, but takes few seconds, which makes me worry that the plane would move enough to loose the signal while the sweep would find the plane again
  • I’ve made a modification to the code to do one full and fast sweep, then 3 smaller but slower sweeps around the angle where the place was found with the faster sweep, but this ended up in failing to find the plane reliably
  • the missing elevation still makes a large difference – pointing the helical antenna bit higher or lower changes the RSSI values a lot.





So now I’ll have to find a decent solution I can rely on, which will give me desired coverage. I didn’t mention this yet, but I would like to have a range of 1 km around me, so I’m not aiming to do long range flights. This should be doable possibly without antenna tracker, the antenna tracker should make it even more reliable, but with all my antenna tracker solutions I feel like I’m walking around in circles.

The 1 km range would be fine as there are obstacles around me (trees, road, …) which I don’t want to cross anyway, and in case of crashed plane I’m not in a mood to walk more than 1 km ;) A walk of shame doesn’t sound that bad at first, but walking through wet corn / wheat / grass due to morning dew is terrible – clothes and shoes get wet, cold and muddy. So even 1 km of that kind of walk is more than enough.

If you have a hint how to achieve 1 km range without antenna tracking, feel free to let me know ;)

Comments are closed.