Jump to content

DIY Console - DIY Rudder Controls - Cessna 172

Recommended Posts

Having learnt to fly Cessna 152 and 172 a few years back, I wanted a set of controls based on the Cessna 172 design and I wanted them to have a more realistic look and feel, however I didn’t want a set of controls that would take over my computer desk area like a cockpit.



After a lot of brain rattling, design and construction time, I came up with a design that consists of a Flight Simulator Control Console and a Flight Simulator Control Foot Unit.


Flight Simulator Control Console:

The console unit consists of a 19” rack cabinet ( U3). I didn’t use the front 19” panel due to the thickness of the aluminium. This gave me a metal box 420mm x 127mm 335 WxHxD. I kept the rack handles as it makes it easier to move about.


On the front of the console I have the main flight control handle for the aileron and elevator. I 3D printed this in 5 parts and screwed together using 2.5 mm diameter screws. Within the handle are 2 tactile SPST switches with resistors providing a 2 wire connection for an analog reading to determine which of the two switch’s is pressed.


The flight control handle is attached via a flange to a 12mm hollow stainless steel shaft and this is connected to a DC 12 volt motor which can apply rotation torque pressure. Also attached to the DC motor is a GT2 pulley and this is connected via a belt to an optical rotary encoder for aileron movement readings. The rotary encoder is a 600 pulse per revolution – 2 phase. Being two phase, this encoder can give 2400 pulses per revolution although it can only rotate 213 degrees giving 1420 encoder pulses.

The DC motor and optical rotary encoder are mounted on an aluminium bracket that is attached to two 12mm linear bearings which allows the control handle to be moved back and forth for elevator control.

Attached to this assembly there is a GT2 belt that connects onto another DC motor and optical encoder to provide torque and elevator movement readings. This gives a full elevator movement of approx 130mm – 4978 encoder pulses .


Across the front of the console are a number of switches which are laid out similar to the Cessna 172 aircraft. The rotary switches are 12 position types that can be limited to a set number of switch positions. These are used for: Fuel tank selection, Flaps position, Ignition/Magneto, Panel/Radio light dimmer.

- The Ignition/Magneto switch has been modified by using a soldering iron to change the internal detent to make it spring back from the start position. A custom made knob was made to look like a key in a lock.

- The Master Alt/Batt switch is a dual 1 pole switch which has been modified by fitting a small steel shaft to make it operate like the Cessna switch. (There are only 3 setting that can happen with this switch)


The panel/radio light dimmer switch while it is wired its not currently being used. It is reserved for future use if an instrument panel is used (Can provide a digital I/O or PWM signal if required for external light dimming).

Other switches are used for: Aircraft Lights, Pivot heat, Fuel pump, Carb heat, Parking brake, Primer.

The primer switch is a toggle type and was modified to not lock on.


On the front panel there is an elevator trim wheel, this was 3d printed and it has been fitted onto a mechanical rotary encoder. It can continuously rotate – no mechanical stop position.


Also there is a throttle and mixture sliding controls, the knobs were 3D printed and are attached to a 12 mm shaft that slides though a linear bearing. On the rear of the 12mm shaft there is a square block of Teflon which has been drilled out and a spring and round rubber piece fitted (tap seal) , this arrangement stops the knobs rotating and provides some resistant when sliding the control. On the rear of each of the square Teflon blocks there is a metal plate. I am using acoustic sensors to determine throttle and mixture position and the metal plate allows a good echo.

The acoustic sensors mounting supports were 3D printed.

On the front panel there are two indicator levers for displaying Flap position and Elevator trim. These are driven from RC servo motors.


On the rear of the console there is a mains power socket (230VAC) with a mains power On/Off switch that also includes a mains power fuse.

After the mains power switch, power is connected to an 8 amp 12volt DC power supply. The power supply output (12 volt DC) is connected to a fuse block and then is connected to four Arduino processors as well as two dual H-bridge driver PCB’s.

The two dual H-bridge driver’s supply DC power to the aileron, elevator and rudder DC torque motors.

(Only half of the second H-bridge circuit is used).

There are two connectors on the rear panel, these are for the output for the foot control unit rudder DC torque motor power, and logic data signals.


There is a USB female to female connector on the rear panel. I use a male to male USB cable from the PC.

Connected to the USB female connector is a 4 port switched hub. For normal use all the USB switches are off. With the flight simulator mains power off, the PC doesn’t see any USB devices. Only when the

flight simulator mains power is turned on will the PC see the USB devices.


This setup makes it easy when loading programs to any of the four Arduino’s. With the flight simulator mains power off, I can just turn on the switch on the Hub for the Arduino I wish to program.

With having multiple same types Arduino’s connected to a PC, it’s normally hard to determine which PC port is connected to which Arduino when they are the same name type.


Flight Simulator Control Foot Unit:

This is an original design… took a lot of brain rattling to come up with this…


The foot control unit consists of two foot peddles which are connected via ball joints to a rotate bar that is attached to a 60 tooth GT2 pulley. The 60 tooth GT2 pulley is fitted to a 12 volt DC geared motor (8mm dia shaft) which can provide torque to the foot peddles. Also attached to the 60 tooth GT2 pulley via a belt and it is connected to another optical rotary encoder for rudder movement readings. Total travel - at toe end of peddle is approx 60mm - 580 encoder pulses.

On each of the foot peddles there are 20kg load cells for the right and left aircraft wheel brakes. These load cells are wired to an HX711 interface PCB. The Hx711 is located in plastic box - front middle of frame.


The foot control unit is connected via a harness to the console.

- 2 wire - PWM - 12 Volt– Supply for the rudder torque motor.

- 8 wires - 0V & +5v – Supply for the rudder optical rotary encoder and the two load cell HX711 interfaces - (Two data signals for the optical rotary encoder, four data signals for two HX711 interfaces).


The foot control unit was designed to have the peddles in a very flat position to allow use on smooth surfaces. This was to reduce the foot control unit moving away from the user without nailing it to the floor. A flat peddle position also reduces leg strain. The foot control unit can still be mounted in a more upright position if desired.


I found I had to use a 12 volt DC geared motor for the foot torque rather than a direct drive as done with the hand controls in the console unit…. All down to hands being more sensitive than feet.

Also found it best to use the foot controls without shoes as it gives better feel with your toes when using the foot brakes.


The cover over the geared torque motor was 3D printed in four pieces using ABS. It was then glued together using dissolve ABS plastic with acetone to create a glue of the same colour.

The cover was coated with some black vinyl auto paint.


The use of ball joints on the end tips of the foot peddles has allowed lighter materials to be used.

I was surprised when I tried connecting the ball joints closer to the hinge area of the foot peddles just how much more pressure occurred on all the linkage mechanism and foot peddles.


The frame design has 4 x square hollow aluminium extrusion 25mm x 25mm 1mm thick.

Front 340mm wide, middle frames 300mm each, rear frame 325mm wide.


The foot peddles were made from 10mm thick polycarbonate. I think I could have used wood material but as I had the polycarbonate I used that..

Peddle length is 350mm and are 120mm wide with 15 mm indents on the sides. I stuck on some ribbed rubber floor matt.


I used a pair of stainless steel door hinges to hinge the foot peddles. I positioned the hinges not at the end of the foot peddle but 75mm away from the hinge. This gives more of a rocker type movement which means the user rotates their ankles rather than moving their complete leg which allows for more precise controlled movements… all down to body mechanics….

I used hinges that don’t have much sideways movement and also made the rotate bar at the back wider to create a outward pull effect on the peddles.


The main idea was to keep the foot control unit to a simple design and make the construction simple.


The foot brake pads were kept simple as they are only used during taxing and final landing.


Calibration of the foot brakes load cells didn’t create any issues.

The main concern is you have to calibrate each foot pad one at a time, thus you need to get the same pressure on each foot pad (load cell). I found it took a couple of goes to get it right.


I did test this foot unit on its own with a Arduino Pro Micro without using the torque motor and found it very good for controlling an aircraft in Flight Simulator – Rudder - Left & Right Wheel Brakes.

The peddles won’t centralize without the torque motor but it wasn’t too bad to control. Still I do like having the torque motor feature.


By using a Arduino Pro Micro, the foot control unit could be used as a stand alone unit for flight Simulator. A spring system could be added to centralize the foot peddles.

The Arduino Pro is able to provide the +5 volts for the optical encoder and load cell HX711 PCB’s.



Flight Simulator Control Decals:

A Brother labeling machine that could print white writing on clear tape ( 24mm wide labels) was used for the decals on both the console and foot control units. Doesn’t photograph well but still looks OK.



Software Programs:

I am currently using the flight controls with FS2004 (Plan to upgrade soon) on a Windows 10 PC.

I am using a program called Link2FS -A big thanks to Jim (from New Zealand) in providing this program which allows the direct input and extraction of signals between Arduino processors and Flight Simulator programs.

One of the things with Link2FS you still need to have a joystick to input certain control movements.


Flight Simulator Control Console Processors

Four Arduino Processors: 2 x Leonardo, 2 x Uno.


Arduino Processor # 1 - (Leonardo – Note: must be a Leonardo to be used as a Joystick)

- Communicate data to PC - Runs a joystick library and thus is seen as a joystick.

- Outputs joystick data for : Aileron – Elevator – Rudder – Throttle – Mixture - Left Wheel Brake - Right Wheel Brake.

- Communicates via I2C to

- Processor # 2 Obtains Throttle, Mixture and Foot Brake data.

- Processor # 3 Obtains Engine RPM and Airspeed - used for torque motors

- Aileron – Elevators – Rudder.

- Processor # 4 Obtains switch status for Carb Heat and Magneto settings – used to reduce

engine RPM as FS2004 doesn’t do this function.


Arduino Processor # 2 - (Leonardo )

- This monitors the acoustic sensors for Throttle - Mixture and foot brake sensors.

- Only communicates data to Processor #1.


Arduino Processor # 3 - (Uno)

- Communicates data from PC via Link2FS and outputs data to Processor # 1 via I2C

- This is used to extract flight data from Flight Simulator via Link2FS.

- (Flap position, Elevator Trim Position, Engine RPM, Air speed).

- Controls RC servo motors to display Flap setting and Elevator Trim.


Arduino Processor # 4 - (Uno)

- Communicates data to PC via Link2FS and Processor # 1 via I2C

- This is used to input console panel switch status to Flight Simulator via Link2FS

- Uses a 6 x 5 Matrix with diodes in line with each switch contact to read switch status.

- ( as multiple switch contacts can be active, diodes must be used).


Rotary Encoders:

One of the issues with using rotary encoders to monitor control movements is that you have to use Arduino interrupts to monitor any movements. Basically if a movement occurs, you need to stop running the main program and update the encoder counters, thus the need to use I/O interrupts

To get the best resolutions you need to use two interrupts for each rotary encoder. This means 6 interrupts for 3 rotary encoders. The other thing with rotary encoders is that they are excellent in keeping track of movement distance and direction but not there physical actual position. To obtain actual position I have the processor encoder count programmed as not to go below the minimum count or go above the maximum count. This means on power up a movement of the control fully one way and then the other way automatically sets the encoder counter to the correct physical position. As it is a standard preflight procedure to move controls though there full movements this syncs the encoder movement counters correctly.

I did try using the DC motors to move the controls on power up, but found it better not too and just rely on the preflight procedure.


On thing I did find with Flight simulator FS2004 was that a flight can start with different panel switch positions. As not to over load the USB ports, I have only changes of switch data being outputted. On normal startup and flight select, I don’t have an issue, but have found sometimes resetting a flight the switches aren’t set to the default.

I added that the if the primer switch is pulled, it outputs all the switch settings thus saving having to toggle each switch or use Link2FS to disconnect and re-add the Arduino #4 .





Overall this has been an interesting project…

I do like the torque effect on the controls. The controls are easy to move when the aircraft is on the ground and the aircraft engine is off.

The torque on the controls increases when the engine is started and as airspeed increases the torque increases more. Very nice when flying loops as you fly the aircraft downwards to built up speed and then pull back and the airspeed slowly drops away at the top of the loop and then increases again as you descend and then you have to pull back up..




Due to the limited number of I/O pins on the Arduino #1 Leonardo and the functions I required, I ended up having to use another Arduino - Arduino processor #2. This required using I2C communications to be able to get the data back to Arduino #1 for the acoustic and load cell sensors.

Also used I2C communications to get data back from the other two Arduino processors.


Then there was all the programming of the four Arduino’s.

Started off programming each function to prove it worked then combined them all together..

One issue I had was changing the default PWM frequency for the driving of the torque motors.

I had to increase the frequency for timer 3 and timer four – too low you hear the motors squealing and too high the motors don’t run.

A lot of time went into working out sizes and positions for the controls. I really had nothing much to go on apart from measuring peoples hands and feet to be able to designed the components to a useable size and position.


BAK - Rotorua New Zealand.












Link to comment
Share on other sites

  • 1 year later...
Hi there, congratulations for the project. How is it holding up? I'm looking forward to build something similar to this, and would be very much appreciated if the schematics of the build were available. Thank you and congratulations again!
Link to comment
Share on other sites



Hi, Its holding up great. I can't upload full schematic as the JPG is too large, 1 have uploaded as 8 pictures. You should be able to rejoin them together with MS Windows paint to get a good detail... Main thing was working out the Arduino I/O pin set functions e.g. PMW, interrupts, I2C communications.


Just been working on a set of gauges as per following pictures.. Finally got them working after a lot of programming, using 6 Arduino nano's (one is connected to the PC for extracting data.. Will publish details once I have it fully finish. I had to design the PCB.. Gauges were 3D printed... Cheers Bruce


Link to comment
Share on other sites

Wow! This looks amazing! Super clean and professional design, specially that attitude indicator and PCB, very well made, looking forward to read the post about these instruments. Also, wanna thank you again for providing these connection layouts, they are surely giving me a north. I'll start with the yoke system, already ordered similar encoders from AliExpress, and until they arrive, will be gathering other materials. I'm probably going to use wood instead of metal to build the main structures, since I have the tools to work with it, that should be fairly easy. The first challenge I'm facing right now (probably the first of many haha) is finding a way to get more stable readings from the ultrassonic sensor, since it tends to fluctuate a lot, even in closed chambers. Any tips on this matter? Thanks, regards ~José
Link to comment
Share on other sites

Hi Jose,

I found it best to divide the ultrasonic sensor value by 10 and filter out any values out of range.

Also as I use I2C communications which creates a interrupt which can occur after a sound pulse was sent and before its is sensed. I set a flag when an interrupt occurs to allow the last reading to be ignore.


I did try some data averaging but found it just created delays and didn't work well.


You will have fun with the encoders, far nicer than using pots, you just have to set up to use two interrupts to monitor each encoder movement...

I started out just trying one control type on an Arduino. Then latter combining all the programs together.. it will take some time and you will learn a lot...


You can contact me (Reprot) via the Reprap forums private messaging.



Hope that helps cheers Bruce..

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...