Google Ad

Project #019 - RC Joystick Tx V2

Updated 27/07/12

DISCLAIMER: This design is experimental, so if you decide to build one yourself then you are on your own, I can't be held responsible for any problems/issues/damage/injury that may occur if you decide to follow this build and make one yourself.


I started FPV and long range RC flying by using a standard Futaba 9C connected by way of the trainer port to an external 430mHz system (Thomas Scherrer's LRS).

Then I designed and built a joystick which by way of an internal Arduino pcb connected to the trainer port of the 9C. Flying my Quadcopter using the joystick is a blast, but the trainer cable and forgeting the 9C was by me on the ground I was always tripping over it.

So (I must be mad) I re-invented the wheel per se by building my own standalone Joystick Radio Tx using a couple of old PC joysticks, an Arduino and the Tx pcb from Thomas Scherrer's LRS kit.

It's powered from a 1500mAh 3S Lipo. About 4hrs continious use I reckon, charge socket is on the side.
Battery voltage detection sounds a buzzer at 10.8vdc or less.

DISCLAIMER: With this design, including both the hardware & software I offer no guarantee that it is bug free or reliable. So, if your decide to build one and your plane, quad etc crashes and/or causes damage/harm to you, others or property then you are on your own. This project is experimental.



The actual joystick isn't native to the base because the hand control that came with the base isn't 3D thus no rudder control, so I installed the control from a different joystick.

1 * Speed Link Black Widow arcade stick (Base).
1 * Logitech Extreme 3D Pro (Grip).
1 * Matrix Orbital 2x8 LCD (P/N=LCD0821). Note: Must be put into TTL mode.
1 * Thomas Scherrer's 430mHz LRS kit (any model will do) c/w antenna, connector & coax.
1 * Battery (i.e. 3S Lipo, 11.4v 1500mAh).
1 * 10k Potentiometer, panel mounting type.
1 * Toggle Switch, panel mounting type.
1 * Arduino Nano.
1 * Small piece Vero board & SIL headers for wiring.
2 * 100uF 25v Electrolytic Capacitor (supply decoupling)
1 * 15k resistor.
1 * 10k trimpot.
1 * 5v buzzer.



The 4 buttons on the Tx are as follows:-
- Function.
- Down Trim adj, Off/No & Enter/Exit Timer mode.
- Up Trim adj, Ob/Yes & Start/Stop Timer.
- Lo/Med/Hi rates select.

1. You can exit the timer mode and it will remain active. Also, it isn't the most accurate, it'll probably lose 1sec every couple of minutes.
2. Press Down Trim & Up Trim at same time to enter I/O Test mode.

Close up of the 8x2 LCD showing some of the screens including:
Battery capacity/voltage, Hi/Mid/Lo Rates, Ael/Ele/Rud Trim, Timer & the Test mode showing PPM output (uS) & Raw analogue inputs (counts).

Main screen showing battery capacity (%) and the voltage. Also, the current Rates selected.
Note: 0 - 100% battery capacity corresponds to 10.8v - 12.6v, i.e. the working range of a 3s Lipo. The alarm buzzer activates at 10.8v or less.

You can trim Aelerons, Elevators & the Rudder. The settings are saved independently for Hi, Mid & Lo rates. The screenshots here show the Mid rate trims being adjusted.

The flight timer can run up to 99mins, 59 secs. It will run in the background if you need to switch screens.

The Test Mode allows all the PPM output channels to be displayed in uS, and the raw analogue inputs in counts 0-1023.

Elevon mode selection.

Exponential mode selection.

Invert mode selection.




Here's the PPM output from the Arduino showing 6 channels running. The PPM protocol is a very simple serialization of the servo PWM commands, separated by a long syncronization pulse. The range of each channel pulse is 700uS to 1700uS, and you can see ch.3 (throttle) at minimum, whilst ch.5 (aux switch) is at maximum.
The refresh rate of the entire PPM stream is set at 22mS.



There are a few versions available for download, the I/O mapping detailed below is based on the latest 8ch version.

Analogue Input pins (0-5vdc):
Pin 0 = Elevator potentiometer    --> PPM Ch.2 - Elevon mix Aeleron 2 (averaged) (Invert mode) (Exponential mode)
Pin 1 = Aeleron potentiometer     --> PPM Ch.1 - Elevon mix Aeleron 1 (averaged) (Invert mode) (Exponential mode)
Pin 2 = Rudder potentiometer      --> PPM Ch.4                        (averaged) (Invert mode) (Exponential mode)
Pin 3 = Throttle potentiometer    --> PPM Ch.3                        (averaged)
Pin 4 = Aux potentiometer 1       --> PPM Ch.6
Pin 5 = Battery Voltage (2.2v at input to display 12.6v)
Pin 6 = Aux potentiometer 2       --> PPM Ch.7

Digital Input pins:
Pin 2 = Function panel button
Pin 3 = Trim adj panel button
Pin 4 = Trim adj panel button
Pin 5 = HI/LO rates set panel button
Pin 6 = Thumb stick AEL up
Pin 7 = Thumb stick AEL down
Pin 8 = Thumb stick ELE up
Pin 9 = Thumb stick ELE down
Pin 13 = Aux switch 1             --> PPM Ch.5
Pin 11 = Aux switch 2             --> PPM Ch.8

Digital Output pins:
Pin 10 = PPM output
Pin 12 = Buzzer output
Pin 1 = Txout, Serial LCD (TTL mode)

1. Use a 5.6k & 1k voltage divider (or a trimpot) so the input sees 2.2v approx. for a 12.6v battery voltage.



This isn't a full wiring diagram, but offers the basics as to what the wiring effectively looks like. 6ch example shown.


Just about any Arduino version can be used, incluing the Atmega 168 models, however I chose the NANO due to it's size and the fact it has the mini USB jack built in.


Download the latest code here.



Other folks have taken on this project:

1. speeder06 over at has made a youtube video .



Added labels on the buttons/switches. This photo shows the 8ch implementation for my own AeroQuad:-


The joystick for controlling Ael, Ele & Rud and making use of the thumb-stick at the top for trim adjustment. On the body of the unit itself the throttle and there's 4off pushbuttons for rates & trim adjustment, the 8*2 LCD and the TI (Thermal Intelligence) pot and switch. This is on the 6ch version software:-


Charge socket on the side & the 430mHz Tx bind/failsafe button in the foreground:-


Power switch, buzzer (via small hole) and Antenna.


Arduino USB port.


Internal view showing the battery, Arduino, 430mHz Tx board & LCD etc.