DIY wireless telemetry link for UAV
Telemetry link between UAV (drone, airplane, boat) and laptop/mobile/ground station device can be very useful. Not only to get current drone position, altitude or battery level, but also, when wireless link provides such a possibility, to update drone parameters in-flight. Some radio links, like OpenLRS provides such a possibility out of the box. They include transparent serial bridge and almost any kind of device can use it to communicate with flight controller. Unfortunately, most RC radio systems lacks this functionality and additional telemetry links have to be used. Like 3DR 433Mhz radio link.
One can buy or one can build something by his own. Some time ago I've chosen the second way and decided to build my own wireless serial link to archive 2 way communication between drone and ground station software. My objectives were:
- 433MHz since it is legal in my country
- has to allow to use my phone with EZ-GUI, since I do not like to carry my notebook to an airfield
- as cheap as possible
To satisfy those objectives I've decided as follows:
- HC-12 433MHz wireless serial modules will be used. They are cheap, pair costs less than $11
- Since I would prefer not to have my Android phone cable connected to any external devices, HC-06 Bluetooth module will be used to connect to mobile phone or tablet. Once again, it is cheap, single module costs between $4 and $5
My telemetry link is build from two parts:
- Mobile - it is attached to drone and consists of single HC-12 and antenna connected to flight controller, SPRacingF3 running INAV
- Ground Station - it acts as Wireless-to-Serial-to-Bluetooth bridge
Mobile part is very simple. It is just HC-12 module connected to flight controller's spare UART port. No additional hardware, so schematics is extremely simple:
One thing that has to be considered here is baud speed that will be used for communication. In case of HC-12, the lower the speed, the bigger the range. Personally, I've decided to use 9600bps. It is fast enough for two way communication and slow enough to provide a range of about 500m.
For 9600bps there is even no need to configure HC-12. By default it is configured for 9600bps and FU3 mode that works just fine. If you will want to use different serial speeds, HC-12 has to be reconfigured to support it. You can read how to do it here.
The other thing is the antenna. HC-12 is sold with a small solderable spring coil antenna. I wanted something better, so instead of spring coil, I've build air cooled 433MHz antenna and attached it using U.FL pigtail.
Because of low baud speed, SoftwareSerial ports can be used.
Ground Station or Wireless-Serial-Bluetooth bridge is slightly more complicated.
It consists of HC-12 433MHz RF module and HC-06 Bluetooth module connected to each other with TX-RX lines crossed. Power is supplied via LM1117 3.3 LDO voltage regulator from LiPo battery.
Since here antenna size is not a problem, I've used half-wave dipole antenna made from steel wire and connected with U.FL pigtail to HC-12. Half-wave dipoles are very simple to build. You can use this tutorial for example.
Once again, if default serial speed of 9600bps is used, HC-12 does need any configuration. The same goes for HC-06 Bluetooth module, since it also uses 9600bps by default. But you might want to change Bluetooth device name and PIN. Just in case. I've showed how to do it in one of my previous posts.
Flight controller setup
Configuration of any flight controller to use this setup is very simple. The only requirement is free UART port. More, it is protocol independent, so it can pass MSP, MAVLink, LTM or any other serial telemetry protocol. In case of Cleanflight / INAV and EZ-GUI one has to only enable MSP protocol in Ports tab in Configurator.
Important notice: Cleanflight and all its derivatives supports up to 2 UARTs with MSP protocol enabled. You can not enable third MSP port!
Since from EZ-GUI point of view, this is normal Bluetooth link, so no special configuration is required. There is only one catch: refresh rate of 100ms is too low for 9600bps and should be increased. I find it works well with values between 400 and 500ms. Data is polled from Cleanflight / INAV less often, but often enough for logging and flight parameter updates.
Step by step:
- Open settings, choose Bluetooth connection and pair HC-06 device with your phone
- Select proper firmware version. Betafligh and INAV should use Cleanflight setting
- Configure Refresh rate. Start with 500ms.
So, how does this telemetry link works? What is the effective range for a below $20 telemetry system? Better than I expected before I started. I wanted something with a range of 500m and this is what HC-12 documentation says about it: ~500m at 9600bps. Last weekend I've archived an effective range of 760m.
Probably this is the limit, since in a next flight link was broken at about 680m. Still,I'm happy.
If you have any comments or questions, or just want to say "Hi, Pawel, good job!" you can always drop me a tweet!