After having had some performance issues with 2.4ghz Xbee modules I just finished up a quick project for long range two-way communication. The system is based on HACCOM HAC-LM96 500mW 433mhz 9600 baud radio modems. Range is 2km (1.2 miles) ground level, so the system should be good for really long range communication when the plane is up in the air.

Components used:
HAC-LM96 radio modem - $52
Turnigy UBEC - 3A switched DC-DC converter - $8
Teensy 2.0 - Arduino compatible board - $19

To make it plug-and-play with my Futaba 9C radio I took the casing from an old defect RF transmitter module and put the UBEC and Teensy board inside. The UBEC is connected to the 9C V+ pin (9.6-12V) and supply 5V for the Teensy board and the HAC radio modem. Sadly the HAC modem is slightly to large for the transmitter module casing, so i had to use an extra box for the HAC modem.

The Teensy MCU converts 8 channel PPM from the 9C radio into serial data for the HAC modem. The Teensy board is my favorite Arduino compatible board, has more i/o in a smaller formfactor and a proper USB interface.

In the airplane the serial data is received by the HAC modem and either transmitted directly to the autopilot or converted back into servo PWM pulses using another Teensy board. This way I can use the HAC modems as a pure R/C control system if I need to, freeing up the 2.4ghz band for live video link etc.

To use the system as a two-way telemetry system you connect the Teensy board in the RF transmitter casing to a computer using a USB cable and either talk directly using the USB interface or use a virtual serial driver for normal two-way serial communication.

Edit: Here is the source code for the Teensy PPM decoder and rf433 transmission system.
Teensy_PPM_Decoder.pde rf433.h
E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • @John: Yep, good tips, and well done on your version too btw. I calculated as you have done that 9600bps is pretty useful and good enough for what we are doing. Ended up with 38.4kbps purely as i was experimenting with baud rates vs errors and thats where i left it!! So for anyone else reading, you dont need to go to 38.4kbps, Johns solution is great as it is. I had considered getting some 900Mhz xbees to get better range? Will look into other modems too.

    @dunk: Well done too. You have taken things to the next level. I see the value in using standard R/C gear for reliability, but I think it would be cool to bring this part of the system into the open source world eventually too. Your approach is getting closer to that goal.
  • Developer
    Nothing beats the feeling of building something yourself. Never mind if it has been done a hundred times before, or if the parts cost more then a commercial version. It is the process and learning that counts :) And while talking about the Cypress chips, I remember reading about a DIY 2.4ghz spectrum analyzer project using the CYR6935 (
  • @John:
    o, absolutely. sorry if that reads a little more critical than i meant it.

    i've spent a great deal more time than i expected implementing a 2 way communication method where as you've skipped that step with off the shelf modems and got 90% of the functionality with 10% of the time/hard work.
    if the end goal is to get a system flying quickly and easily pre-made radio modems are the way to go.

    it shows my stubbornness that i stuck with the CYRF6936 once i had started.

    now i have my project working though i just thought it might be of interest.
    other options are always interesting right?

  • Developer
    @Simon: Nice build. If you wanted to, it would be very easy to swap the xbee's with a long range modem. Since they both pipe serial data over the air. One more thing. If you can, try lowering the baud rate. Lower rates give you more range.

    @dunk: I understand the need for talking directly to a chipset if you are doing a commercial grade low latency R/C control system. But remember the goal of my system was to get long range control and easy two-way communication with the autopilot. And since I did not feel like reinventing the wheel (for a change :p), using a modem that already has built in support for serial communication seemed like the logical choice. Also I wanted to keep the 2.4ghz band free for a video link in the future.
  • i've been following the project Thomas links to from a distance.
    it is a very well conceived project but (in my opinion) does lack a central project page so there is a lot of reading of the rambling RCGroups thread before you can appreciate the details.
    in summary it uses embedded 2.4GHz modules that come with embedded microcontroller and access to free development environment for the microcontroller.
    you essentially have all the electronics you need for either TX or RX on the one pre-made (and fairly inexpensive) module.
    range is around 2km if i remember correctly.

    while we are all posting alternative projects, you might want to look at mine:

    while i accept all the XBee and radio modem solutions out there are easy to implement (and "good enough" for UAVs) none of them are ideal in terms of latency and packet control for real time applications.

    my project uses CYRF6936 based RF modules.
    because you have direct control of the CYRF6936 RF chip you are not tied to any timing structure and are free to implement whatever structure you like.

    in my system data packets are recalculated before retransmission if they occur in a different PWM frame so latency is always less than the 20ms servo update time.

    i'm currently getting 100% transmission success out to around ~1km. RF link status and battery life data is currently displayed on blinkenlights on the transmitter or display of all telemetry data can be achieved by plugging a laptop into the TX.

    the next step in my project is to move away from the pre-made RF modules and start using the CYRF6936 directly so i can use fast RF switches to switch between diverse antennas.

  • Here's another example of a DIY two-way rc system. I've been experimenting with the modules (using some PCBs from the thread, some I've designed myself), and there is a lot you can do with just the chip alone! I'm working up to a combined radio rx / autopilot / imu that I"m hoping to get down to the size of an xbee.
  • btw i have had mixed results with the Intuitive Circuits OSD. It has a nasty habit of freezing up on me (either losing sync with the monitor or dropping the serial link - not sure which yet). Think i might try something else...
  • I have built and use a similar system using 60mW xbees running at 38.4kbps. I know this has been tried before by a few with mixed results, but im pretty happy with it. It is much shorter range than what you have (range test i get about 200mtrs max) but im flying helicopters, not fixed wing so its good enough for me. My general system is that the aircraft is the master. It sends a byte to request the latest info and the hand controller replies with a packet (header+data, no error checking). I have not noticed any problems with the data integrity, no glitches or pauses (other than going out of range).

    I have a Intuitive Circuits OSD feeding to a 7 in headrest DVD screen in the centre - i dont like small monitors. Anything about xbees that i have not noticed that i should be aware of?

    I have not measured the latency, but is not human perceivable at least.

    I have modified a arduino nano as a receiver - an xbee in a sparkfun shield plugs straight in.

    Can post the code but i honestly have not done anything tricky.
  • Very nice post. i was looking into getting a amp and panel antenna for my dx7 but i might check this out
  • Great work, John.
    Thanks for sharing...keep the data flowing.
This reply was deleted.