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

Views: 14503

Comment by Tim O'Brien on July 25, 2010 at 6:25pm
That Teensy looks pretty awesome, I hadn't seen that before.

I'd like to see more on your project! You've got some awesome stuff (and great photos of it too).

How are you sending data, as ascii text, or as bitwise data in packet form? I keep getting intermittent dropped data with my xbees, so I use checksummed packets and it works well.

Comment by John Arne Birkeland on July 25, 2010 at 8:32pm
Thanks. I am doing the same as you. Each of the eight R/C channels are converted into a 0-255 value and transmitted as a 11 byte packet with header and checksum at 40hz. Resulting in 440bytes/sec, leaving 760 bytes/sec free for telemetry. I know 256 steps for servo control does not sound like much. But in reality (with the exception of some high-end digital servos) a normal servo is not capable of being controlled any finer then 256 steps.
Comment by UFO-MAN on July 26, 2010 at 2:59am
Nice. Do you plan to publish details and source code?
Comment by Tim O'Brien on July 26, 2010 at 5:32am
Here's is what I've done:

That file is used by both my remote and receiver to get and send data. The remote code I'm using is called Combo Remote (also on my websvn), and it uses a adxl345 digital accelerometer and a gamecube remote for human interaction. There'll be a writeup soon, once I have my quad working again.

I'd really like to see how yours works.

Comment by John Arne Birkeland on July 26, 2010 at 8:37am
Sure, I just included the source code in the blog post.
Comment by Carlito Oliveira on July 26, 2010 at 7:05pm
Well done mate!

I've been working commercially with Zigbee from Telit and from Digi and I can tell u that the Zigbee Stack wasen't designed to support continuous stream of data, instead it was designed to send small packages and go stand-by.

So the best thing to do(on uav application) is what u've done! Just be carefull with the wrong data that could crash your plane.

Have u measured the latency of this 433Mhz modem?

thanks in advance.
Comment by Carlito Oliveira on July 26, 2010 at 7:07pm
Just to mention, I had an idea of transmitting the plane's data through the video transmitter audio channel, do u think it's possible with an D/A? thanks again.
Comment by Greg Fletcher on July 26, 2010 at 8:14pm
Impressive Project, now I must say--why go to all that trouble. I use a 15 yr old 72 MHz airtronics and a good double conversion receiver and have more than enough range. Farther than you can see a small plane. I also have tested an pair of Xbee 900 pro's (50 mW) At 1.2 miles on the ground in my car. I was recording GPS data from the ardupilot system in the car back home on my customized Ardustation (sd card data logger). Then I viewed it on Google Earth wear the 1 Hz dots stopped.
Anyhow I believe you should have regular RC control and a failsafe multiplexer system in case of a computer glitch.

@ Carlito, Yes that is very much possible and has probably been done. They make DIP chips for this. 1 in, 1 out. Look for an FSK chip (Freq Shift Keying). They send one tone for a 1 and another for 0.
Comment by Carlito Oliveira on July 26, 2010 at 8:53pm
Ohhh... I didn't Know that! I was looking at the internet for the IC you told and I found the decoder in the link bellow:

And I found some explanation of how FSK works in the link bellow:

Do u think that this decoder is good enought?(500KHz band)

If this possibility really works(band), then some other possibilities would appear such as not needing a zigbee inside the plane and using a GSM mobile as the transceiver of the plane.


Comment by John Arne Birkeland on July 26, 2010 at 9:21pm
@Carlito: The modem latency is 12ms. Not ideal, but plenty good enough for the kind of flying you do with UAV's. As Greg mentioned there are solutions for transmitting data trough audio channel. In fact it is not that long ago we all used analog voice band telephone modems to connect to the internet. But when you look at how much noise and signal ghosting there is on a typical analog video link, you would need a robust transmission system.

@Greg: First of all there really wasn't all that much trouble to go trough. 1 day to get a feel for the modems and 2 days to implement the system. With the 433mhz modems I get both radio control and two-way telemetry in one system. And since the system is two-way both airplane and ground station instantly know when the connection is lost. I always do extensive ground testing with any new code, and the control loop is designed so that the proven manual control code remains unchanged and unaffected by autopilot changes. And with the kind of range we are talking about here, there is no way you can manually recover the plane if there is a glitch far out anyways. One of the uses I envision is to be able to observe and do adjustments from the ground station while the UAV is performing large area type of missions like photo mapping. 900mhz is not an option since I am operating in Europe, and as I said earlier I have had some issues with Xbee. So I wanted to try something else.


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service