How to hack the PPM signal from any receiver (Futaba) with Arduino


Intercept the PPM signal is the best way to obtain all the channels from any receiver, for a lot of reasons. The first one is performance, and the second is the simplicity (in code =P). This hack is based on this tutorial from Paparazzi Autopilot.

For more information about the PPM frames click here.

For this hack i'm using a Futaba receiver FP-R127DF. Almost all the Futaba receivers came with the BU4015BF Shift Register chip, if your are able to locate this chip, you just need to solder a single wire in the pin 1 or 9 (clock), and you are done!
Here is the Data Sheet of the IC:BU4015.pdf

Another good way to find the PPM signal pin is using this code with arduino:

void setup()
{
Serial.begin(57600);
pinMode(3, INPUT);
}
void loop()
{
Serial.println(pulseIn(3, LOW));
}


Then upload the code to arduino, and with a wire connected to the pin 3, start touching all the pins and spots you can of you receiver (don't forget to also connect ground to ground), until you see random values between 300 to 9000 on arduino terminal (that means you found it).

After that, just solder a wire on it and use this code to decode all the channels:

#define channumber 4 //How many channels have your radio?
int value[channumber];

void setup()
{
Serial.begin(57600); //Serial Begin
pinMode(3, INPUT); //Pin 3 as input
}
void loop()
{
while(pulseIn(3, LOW) < 5000){} //Wait for the beginning of the frame
for(int x=0; x<=channumber-1; x++)//Loop to store all the channel position
{
value[x]=pulseIn(3, LOW);
}
for(int x=0; x<=channumber-1; x++)//Loop to print and clear all the channel readings
{
Serial.print(value[x]); //Print the value
Serial.print(" ");
value[x]=0; //Clear the value afeter is printed
}
Serial.println(""); //Start a new line
}


This a video where you can see everything i explained in action:

Views: 41319

Tags: arduino, hack, jordi, ppm, uavs

Comment by Alec on June 10, 2008 at 1:10am
interestingly my dirt-cheap 4 channel receiver that i bought with the intention of doing this too also has a 4015 ic.
As a foot note - the 4015 is part of the 4000 series logic chips, so it has many manufacturers, for example, Philips makes the HEF4015 which is pin compatible with the BU4015.

100KM
Comment by wayne garris on June 14, 2008 at 7:25am
cool stuff jordi ! PPM code for Basic-X , now all you have to do is program bad frame recognition / rejection
the FMA FS-8 does this and can even "lock" onto a specific receiver . I've turned on my other receiver right next to it ,still had control . if you can cram this into the rest of your AP you could get it flying , turn of your transmitter and go have a cup of coffee.
Comment by Cory on June 30, 2008 at 7:30pm
bad frame recognition / rejection

Do you have recommendation for the best way to recognize bad frames?

So far I was thinking of summing the pulses, and using the sum to verify frame length, and that the proper number of pulses occurred in that time. Also verifying that all the pulses are within expected width.
Comment by Christopher Macdonald on August 10, 2008 at 6:17pm
this is great Jordi, it explains a lot to me, thanks!
Comment by corey on March 10, 2009 at 7:05pm
i'm building a mikrokopter, but because we can't use the suggested 35mhz receiver in the us, i need to look at 72/75mhz or 2.4 Ghz options. this is a little difficult, however, because i need access to the "sumsignal" or PPM. would an arduino board+this code installed between the receiver and the navictrl mikrokopter board do the trick? or does anyone maybe have a link detailing a receiver hack?
Comment by Frank Zhao on March 12, 2009 at 7:18pm
The VEX receiver I have outputs PPM just like this receiver does, I use my 16 bit timer's input capture interrupt to store the pulse width of a PPM pulse with high accuracy. Since it uses interrupts, you don't have to wait for a pulse to finish to run other code.
http://frank.circleofcurrent.com/vexrx.php
Comment by Aldo Vargas on March 1, 2010 at 8:25pm
what is the best way to read two servos channels?? using the ppm? or using 2 inputs and pulsein??

i've tried with 2 inputs and pulseIn... i have glitches on the servos.... what can be wrong??

val1=pulseIn(ser1in,HIGH);
val2=pulseIn(ser2in,HIGH);

ciLat.write(val1);
ciLon.write(val2);

its better if i use the PPM??
Comment by Marcus Fahlén on November 21, 2010 at 7:33am
Anyone who has bee able to find a PPM signal in a Futaba R149DP?
I have bee poking around (without a scope) with no success so far...
Any help much appreciated!

/ Marc
Comment by Jamie White on November 29, 2011 at 9:34pm
Marcus. I know this is old. I'm trying to locate sum signal on R149dp for my new hexa build. Please can you help me with this. I prefer 72 MHz. Over 2.4.
Comment by Jason Beach on August 17, 2012 at 5:04pm

You don't by chance know if there's a similar hack for Spektrum (or Spektrum compatible) receivers do you?

Comment

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

Join DIY Drones

© 2014   Created by Chris Anderson.

Badges  |  Report an Issue  |  Terms of Service