FS1000A and XY-MK-5V second range test

Two months ago, when I published first FS1000A and XY-MK-5V range test, I was little surprised that I was able to reach 315 meters of stable connection. And I was almost sure, that they can do more.

Having some free time during my summer vacation, I’ve left transmitter on a towel and took a walk with a receiver. In a surroundings just like that:

FS1000A XY-MK-5V test on a beach

Results? 332 meters with a FS1000A powered with 7.4V and 1000bps over-the-air data speed.

FS1000A XY-MK-5V range test on a beach

For the second time, I’m sure I can pull more from this setup. This time, there were two problems:

  1. Transmitter was low on the ground
  2. Other people on the beach blocked line of sight much faster than I expected

So, expect third attempt…

Read More

How to read PPM signal with Arduino?

More than a year a published a post called Generate PPM signal with Arduino. Today it's time for part two: How to read PPM signal with Arduino?. Strange thing: internet does not gives very useful information on this topic. Strange, right? Some links to pages that does it either very very wrong or in not simple way.

There is a one almost good solution. It's an example code by Hasi123. Short, efficient and actaully works almost out of the box. But it has 2 problems:

  1. It is not a library. You have to copy paste code
  2. It alters Timer1 and that means, that many other things stops to work: PMW output, Servo library or anything else that uses Timer1. Crap…

So, I've invested some of my time and, based on that code, I've created Arduino library called PPMReader. Advantages?

  1. It is a library (!)
  2. It does not alters any timers (!)

Example code, that reads PPM signal connected to Pin 2 of Arduino Uno or Pro Mini (and other using ATmega328) and prints decoded channels over serial port would look like this:

#include "PPMReader.h"

// PPMReader(pin, interrupt)
PPMReader ppmReader(2, 0);

void setup()

void loop()
  static int count;
  while (ppmReader.get(count) != 0) { //print out the servo values
      Serial.print("  ");
  count = 0;

The only required configuration is a decission of a pin and interrupt. Not all pins have hardware interrupts, so on many boards this is limited to:

  • Arduino Uno, Pro Mini and other based on ATmega328: pin 2 / interrupt 0 or pin 3 / interrupt 1
  • Arduino Pro Micro and other based on ATmega32u4: pin 3 / interrupt 0, pin 2 / interrupt 1, pin 0 / interrupt 1, pin 1 / interrupt 3, pin 7 / interrupt 4

PPMReader Arduino library can be downloaded from GitHub.

Read More

STM32 F1 and F3 versus LRS 433MHz interference issue

This topic first appeared on my table few weeks ago. Can a flight controller interfere with long range system running on 433MHz band like openLRSng?

STM32 F1 and F3 based CPU running most flight controllers (Naze32, SPracingF3, Flip32, CC3D, etc.) run on 72MHz. Actually this is 8MHz of external clock and 9 multiplier. But still, CPU itself runs on 72MHz. Most LRS systems runs between 413MHz and 453MHz, with most channels grouped around 432 and 433MHz frequencies.

This might create a problem, since 432MHz is a 6th harmonic frequency of 72MHz. Theoretically, perfect square wave should have only odd-number harmonics, but in the real life, both even and odd harmonics are present.

Are those frequencies from flight controller "visible" in 433MHz band and can they affect LRS systems? I do not have LRS system yet, so I can not answer the second question. But I can answer the first one with the help of a small RTL-SDR radio dongle.

The test

Tests were performed with a RTL-SDR and FM frequency antenna (I know, far from perfect) placed 20cm, 10cm and 5cm from running Flip32 10DOF flight controller (STM32F1 CPU at 72MHz).

According to SDR software, exact clock frequency was 72,MHz which was caught nicely on the radio spectrum.

Continue reading “STM32 F1 and F3 versus LRS 433MHz interference issue” »

Read More

FrSky X12S Horus spotted in the wild

Last weekend I had a brief opportunity to take a look at new radio from FrSky: X12S Horus. One thing is sure, this thing is quite impressive. For me it is slightly too big and too expensive. Plain old Taranis suits all my needs. Owner seems too be quite happy with his X12S Horus, and here are his main thought about it:

  • Big and heavy with a stiff frame. As long as you do not have to carry it attached to your neck for a longer period of time, it is completely fine
  • LCD screen is nicely visible in daylight
  • Nice Hall effect gimbals!
  • Rubber bumpers allows to put Horus on a car’s roof or hood without the risk of scratching it
  • Shipped with FrSky software, that is not as good as OpenTx
  • External antenna connector with a VSWR

FrSky X12S Horus

Read More

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 SiK Telemetry Radio or 3DR commercial version of it.

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:

Continue reading “DIY wireless telemetry link for UAV” »

Read More

Generate PPM signal with Arduino

In the beginning of this year I’ve written a short tutorial how to read PWM signals from RC radio with Arduino. While it is can be useful when building own RC equipment, it does not help much when one has to deal with PPM (CPPM) signal. Let’s be honest, PPM is much more useful than PWM: all RC channels are sent over single wire. On one side, it simplifies electrical design. On the other, it makes software part more “complicated”, since there is a need to encode multiple PWM channels into single PPM line in transmitter, and then decode PPM signal into multiple PWMs in receiver. And there are very little “ready and working out of the box” solutions in Arduino world.

In this short article I will show how to generate PPM (CPPM) signal using solution prepared few years ago by David Hasko. Originally it was posted of Google Code. But Google Code is not closed and who knows for how long it still will be available. So, let’s not let the knowledge got lost.

Code is relatively simple, and almost all work is done inside ISR(TIMER1_COMPA_vect) that is executed in the background by timer . Everything user has to do, is to put desired values to ppm array inside loop function. This code can generate both positive and negative signal. It can be easily ported to almost any project, as long as TIME1 is free to use.

Slightly more advanced example is available on GitHub.

Read More

HC-12 433MHz RF serial module range test

As I mentioned in my first post about HC-12 433MHz radio modules, I’ve put my interest in them for telemetry purposes. While S.Port telemetry I’m using in FrSky Taranis radio might have higher range than HC-12, it is closed environment. Since $10 for a pair of HC-12 is not much, I’ve decided for more open DIY solution.

Setup on a quadcopter consist of one HC-12 configured for FU3 mode and baud rate 9600bps connected to SPRacingF3 UART3 port and “air cooled” (shortened with a coil) 433MHz whip antenna. Well, to be precise, it’s 450MHz since I changed working frequency. Antenna is not tuned or scientifically computed. Just 433MHz version shortened a little using proportions. Antenna is mounted on GPS mast. In next version I will probably replace whip antenna with Vee antenna.

HC-12 Rf 433MHz module in quadcopter

"Air cooled" antenna on quadcopter

Continue reading “HC-12 433MHz RF serial module range test” »

Read More

HC-12 433MHz wireless serial communication module configuration


HC-12 are cheap 433MHz wireless serial port communication modules with a range up to 1800m in open space. Each costs about $5 when bought from China, and 2 of them can create wireless UART link that can be used, for example, to transfer telemetry data from UAV. Or drive IoT device. Or connect sensors. Or whatever else one can think of.

HC-12 433MHz wireless serial communication module

It is based on SI4463 RF chip, has build in microcontroller, can be configured using AT commands and allows to use external antenna. Working frequency is divided into 100 channels starting from 433,4MHz up to 473,0MHz with 400kHz channel separation. Maximum output power is 100mW (20dBm) and receiver sensitivity differs from -117dBm to -100dBm, depending on transmission speed. It accepts 3,2V-5,5V power supply and can be used with 3.3V and 5V UART voltage devices (5V safe). Continue reading “HC-12 433MHz wireless serial communication module configuration” »

Read More

Improving cheap radio range

Radio range of my first drone, UDI 829A was pretty pathetic. OK, it was (still is, I only have to finally replace motors) pretty indestructible, quite stable and reasonably priced. But effective radio range as quite short. More less 50 meters. Above that limit strange things started to happen. The reason was pretty simple. Just take a look at this picture.

Antenna too short

Can you see the transmitter antenna? Yeap, that it this short cable. Not only it does not go into “antenna cover” of the receiver, it is also horizontally polarized and when receiver is held in a normal way, pointing into a drone, it emits almost no signal in this direction. This and an additional single whip antenna on the receiver makes it virtually impossible to have a good radio range.

So, I’ve decided to fix that and install external antenna that would work with vertical linear polarization and actually emits some power in drone’s direction.
This tutorial shows how to do it for UDI 829A, but will work almost all cheap drones. Their transmitters are very similar inside and as long as there is antenna pad or connector, it can be done. Continue reading “Improving cheap radio range” »

Read More

10 channels for FlySky FS-i6 radios

This news might be not super fresh, but somehow it missed my attention. There is a good news for all owners of FlySky FS-i6 radios: there is an unofficial firmware that turns this cheap 6 channel radio into 10 channel one. Of course, there is a small catch, or even a few of them:

  • All 10 channels are available as PWM only using FS-ia10 receiver
  • PPM on FS-ia6B is still only 6 channels wide. To have all 10, iBus connection to flight controller or iBus to PPM converter required
  • PPM output still only on FA-ia6B and FS-ia10 receivers. No support for FS-ia6 RX module

FlySky FS-i6 (Turnigy TGY-i6) 6 channel 2.4GHz radio system with FPV mount

New firmware, as well as few additional mods, is available on GitHub. I did not checked that, since I no longer own FS-i6 radio, but I’ve read good oppinions: it is stable and functional. So, who will give it a try?

Read More