DIY Game Controller

I recently got into the game IL2. I’d been a fan of the original years ago, and WW2 era combat flight sims in general but always found looking around the cockpit with the mouse difficult to do while flying. That lead me to get an IR tracker, or more accurately, build my own. IR trackers are a simple array of 3 Infer-red LEDS you wear on your head either on a hat or attached to your headphones and then using a webcam, converted to filter out all light other than Inferred, and some free software online the device tracks your head movement, not 1:1 but after some getting used to you can basically use your head movements as a controller to look about the plane.

Take-Away food container lid for the frame
3 IR LEDs wired and taped up
AAA Battery Holder with on/off switch

Soon after building this however I picked up an Oculus Rift S Virtual reality headset and have never looked back. 

Flying in VR is amazing. Being able to look around the cockpit at all the instruments, look out the windows, move forwards towards the gunsight and turn your head around in all directions keeping an eye out for the enemy is the best use of VR I’ve seen.

The only downside of flying in VR is you can not see the keyboard anymore, and not having enough buttons on my joystick to do everything you need to take off, land, and drop bombs on the enemy made flying difficult. 

I decided to build my own game controller that would allow me to have move buttons and more analogue controllers for things like adjusting radiator positions and fuel mixtures. 

The buttons would be spread out and have a distinctly different tactile feel so I could find them while wearing the VR.

I used a Teensy 2.0 Android board to interface with the computer, once all set up Windows detects it as a game controller, and plugs in via a USB Cable.

If you’d like to build your own, hopefully, this guide will help. Once you’re done, be sure to tag me on Instagram @chrisburns_3d

Tool list & Parts guide with estimated prices - total cost: ~$60

1 x Teensy2.0 $12.30
1 x Jumper Sockets $1.10
1 x Jumper pins $1.71
1 x Electoral wire
4 x Potentiometers (make sure these are linear type and not audio) $4.00
4 x Potentiometer caps
1 x Sliding Potentiometer &6.58
1 x Engine start LED switch $5.94
1 x Push button switch $7.10
1 x Missile Switch $2.63
9 x Momentary push buttons $9.02
1 x Jiffy box $6.95
1 x Long USB Type-C Cable
1 x Contact adhesive $1
1 x Adhesive printer paper
1 x Rubber Gromit
1 x Heat Shrink $0.50
1 x Electrical tape

Above are the parts that I used in my build and the rough costings, but you should spend some time thinking about what controls you want to be able to do and the best type of button suited for it. In a game like IL2, there are still a lot of commands that I don’t have buttons for, but I now have enough to do the most common things such as engine management. It is so much better being able to set the water and oil radiator positions by turning a dial, rather than holding down Ctrl+Plus & minus and waiting for it to count up.


The Teensy2.0 board supports 6 analogue inputs, I knew I wanted two sliding dials for separate engine throttles, so the other four-axis could be dialled for water & oil radiators, fuel mixture, and flap position. I would recommend setting up your controls before buying or building anything to make sure that each control supports being assigned to an axis. 

I was not able to get the flaps to work being assigned to an axis and instead used this dial for engine cowling output shutters

When it comes to the buttons, I knew I wanted a big easy to find Eject button, keep in mind if you’re flying in VR you’ll be feeling for these controls, so having a variety of different buttons and a non-uniform layout helps.


I also wanted to have at least one illuminated button or LED on the controller to know when it is connected to the PC. 


I found the backlit Engine start button perfect for this. Another must-have was the Missile style switch with its big read safety cap, its just too cool not have on a flight sim controller.

 I have this hooked up drop bombs. You could use any type of buttons you like, just make sure that they are ‘momentary’ switches and NOT latching or toggle type ones.

If you use anything that latches, when you press it, it will be like holding down that key on the keyboard. I chose this style button as they are relatively cheap and come in a variety of colours. All the buttons I’ve chosen are momentary with the exception of the Missile switch.

Button layout

Once you’ve decided on your buttons and dials etc, next comes the layout. While I was trying to figure out how I was going to house all the electronics, I laid out all the buttons on the desk and Imagined which ones I’d use most often and in what order and put the most used ones in the most ergonomic positions. If you don’t intend on labelling all the buttons as I did, then you could not worry too much about this step as you can resign them later in-game. 

Experimenting with Button Layout
Making sure everything will fit

I knew that I wanted the Engine start button to be up the top left as it is the first thing you press each flight. Then the Eject up out of the way in the opposite corner. The engine dials all below that and colour coded to the colours used in-game. Then the missile switch and other bomb-related buttons such as Bomb Sight, Open Bombay Doors etc, all clustered together and the Throttle controls in the bottom corner where I can easily get to them.

labelling the buttons

Testing placement of text will fit
Note the red guide lines for cutting
Drilling holes and cutting slots
How the final thing looks

You could skip this step entirely, the other builds I’ve seen people make look good with just being left blank or use carbon fibre contact. I wanted to make mine look like an aircraft instrument, so I labelled each button and dial with an aircraft looking font and surround them with white boarders to group them. I also when with the greenish-blue background. I thought about using Letraset to do the lettering but a much easier method is to print out the design on adhesive paper and use that as my guide to drill the holes too.


Once I was happy with the design I printed it out on regular paper and attached it to cardboard and did a test fit of all the buttons just to make sure everything would fit in place, and I would have room behind it all to wire it up. This was worthwhile, as I found my original design had the labels covered up buttons surround, and my original design had the engine dials too close to the Eject button making it too difficult to use.


If you’d like to build my exact controller, you can download my Photoshop file here (75Mb) and edit it as you see fit. If you don’t have photoshop here are the finished images (10.3Mb). The Photoshop file was printed out at a 10% scale and fits exactly to the Jiffy box.


I used adhesive paper which worked really well, and once attached to the faceplate of the jiffy box I wrapped the whole thing in contact adhesive to protect the paper from getting damaged.


The design has the centre holes marked out making it easier to drill the holes, I used a centre punch to first mark these points, then used a hobby knife to cut the paper prior to drilling just to beside the paper didn’t rip. I didn’t quite have a large enough drill bit for the buttons, so I used a Dremel to expand the holes out and to also cut the slots for the Throttle sliders. 


The Throttle sliders were the most difficult to cut, so I’m glad there were only two of them to do, just take your time and use a small file to clean these slots up.

time to start soldering

I purchased a $20 soldering iron kit from ebay. It came with a case, stand, wire strippers, and a bunch of other accessories, it did the job for this small bit of soldering, but I would recommend spending more on a decent iron if you intend on building more projects like this, or have more buttons to connect than I did. I soldiered some jumper sockets onto the Teensy board and used some Alligator-clip jumper pins to test out each button functioned correctly. You could just solder wires directly onto the Teensy board, but using jumpers was easier to prototype. 


You will need to install the Teensy drivers and the Arduino IDE from here. Once you have your Teensy board plugged into USB, set it to be detected as a Joystick/Keyboard and it should be detected by Windows when you plug it in. Initially, the amber light on it should be lit up or flashing. Open the ‘blink test’ sketch and edit this script to increase the flashing rate, you can find the tutorial on how to do this on the PJRC site, it will give you an idea of how easy it is to update the sketch on the board. You just need to set the Teensy board to be used a Joystick, and you can download the sketch I used here, it is based off an example file, with the Hat switch test commented out.


I used a bread board to make testing the buttons and potentiometers nice and easy. Most of the buttons are quite easy to connect as they have only 2 terminals, the Start Engine button was a bit more challenging as it has a LED back light to connect up, and the large yellow ‘Eject’ button has the ability to be set either on when pressed, or on when not pressed.


To house everything I used a Jiffy box from Jaycar, these are cheap, come in a range of sizes and are made of ABS plastic so are quite durable. I went with the biggest size (197 x 113 x 63mm) as I need a bit of depth for the Eject button, I wouldn’t recommend making it’s much smaller though,  as once you connect up everything with wires it can get a bit cramped for space. Another alternative is to build a wooden box, I’ve seen some people build nice looking ones with laser cut wood, or repurpose an existing container. I did think about using an old ammunition box but thought it might be had to access the revised side to wire it all


Now the fun part of attaching all the buttons. Use a towel or soft surface to protect the faceplate during this step. Wiring up, connect all the ground wires first, you can daisy chain them together.  Then daisy change the VCC for the pots, and Engine start LED. I’d recommend testing each button works as you go, either with a multimeter, or connect to the Teensy, and plug it into the PC. I overheard a couple of the buttons when I was soldiering them up and melted them, so It is worth having a few spares. Once you’re sure everything is connected correctly and tested it, connect each button to the board. I found a small free space to mount the teensy to using a hot glue gun.

Drill a small hole in the side of the box for the USB Cable, You can use a Rubber Gromit to make this look neat.
here should be 5 wires inside the USB lead, take your time to make sure these are connected correctly.
Use heat shrink or electrical tape to make sure there are no shorts. Then tie a loose knot in the cable to prevent it being pulled back through the hole.
Lastly, press on some adhesive rubber feet to the base to stop it sliding around, I got these ones from some IKEA furniture.

Plug it in and map your controls in-game and enjoy! Be sure to share your project and tag me @chrisburns3d so I can see and happy flying!

Skip to toolbar