Let's Make a Game Controller!

92,034

785

78

I love flying games, but it feels like there are never enough buttons on my joystick.

This instructable will show you how to build your own switch panel in no time.

It will work with any game and computer that supports a joystick. I also encourage people to adapt this guide to make foot pedals, joysticks, or other input devices.

What skill level is needed?
This is a great starter project, all the wiring and code is very simple, just repeated for each button.

Out of any project I've done this has had the best ratio of skills needed to reward, so with relatively little effort you will get a great reward.

Step 1: What Will I Need?

Tools

  • Wire snips + thin wire
  • Soldering iron + solder
  • Drill + drill bits
  • Dremel (optional) + safety glasses

Bits

  • A Teensy(or arduino that supports HID)
  • Buttons! Lots of buttons and switches
  • Potentiometers (optional, used for sliders or axis control)
  • LEDs (optional) + equal number 220ohm resistors
  • Perf board
  • Female pin headers (optional, but recommended)
  • Enclosure

Notes:

I used the dremel because I had some square buttons, using just round-base switches is way easier and faster!

The female pin headers are great so you can take the Teensy out and use it for the next project—highly recommended.

You can also use an Arduino instead of the Teensy, just be sure that it supports HID (Human Interface Device), this is a great standard that ensures it'll work easily with any computer.

I found all my buttons and the enclosure at a local hobby electronics shop.

Step 2: Start Laying Out

The quickest way to plan where the switches will go is just draw them on with pencil.

Bonus

I wanted an extra crisp look, so I redrew all my markings on the computer and printed it out.

Then I glued the paper to my case and pasted over it with clear tape, so the oils in my hands don't ruin the paper.

In the end I chose the standard Russian green colour, makes it a bit more fun, and apparently helps reduce eye fatigue for pilots.

Step 3: Manufacture

Next drill out the holes you marked with pencil, or on your printed decal.

(Optional) If some of your buttons are square, you'll have to use a cutting tool.

Test fit everything together, and become eager with anticipation.

Step 4: Electronics

Snip the pin headers to length for each side, then solder them to your board.

Test fit the board and trim if needed. Leave a few pins on each side of the teensy.

The first step of wiring is to attach the ground wire to one of all the button pins, if there are three pins on a button, attach it to the middle one. For the potentiometers attach ground to one of the outside pins, doesn't matter which.

Now is also a good time to glue in the LEDs, if you're using them, and solder the negative pin onto the same ground wire that we used for the buttons. (All round style LEDs have a flat spot that mark the negative side)

Step 5: Wire Buttons

I've included the diagram that comes with each Teensy, it shows each pin number and what they can do.

Button

One side of the button goes to Gnd, the other to a digital pin on the Teensy.

Each button will take up one pin (marked in grey on the diagram), and a few of my 3-position switches will take up two. Keep track of what pin numbers you are using, but it's not necessary to know exactly which button goes to each pin.

LEDs(optional)

With the flat side of the LED attached to ground, the other side will attach to one side of a 220ohm resistor, and the other side of the resistor will attach to a digital pin.

Notes

Some 2-position switches have three pins. With the middle pin attached to ground, choose what side you want to be "on" and attach that to a digital pin on the Teensy.

Step 6: Potentiometers (optional)

It doesn't matter which side gets wired to 3.3v and which to Gnd, but the middle pin must go to an analog input on the Teensy (marked in orange on the diagram from the last step).

Notes

A potentiometer is a variable voltage divider, basically one side gets the whole voltage, the other side gets no voltage, and the pin in the middle gives a reading somewhere between the two.

I used B10K potentiometers.

The B means linear, as in it increases in a straight line when plotted, these are used for digital things. Type A potentiometers are usually used for audio applications and increase exponentially.

10K means 10,000ohm max resistance. This is pretty standard, but because what we're measuring is a ratio most values work fine.

Step 7: Code

First step is to install Arduino if you don't have it and the Teensy plugin for Arduino. It's a quick install and comes with lots of great libraries to play around with.

Now either download and change my code to the number of buttons you have, or try to make your own using the included Teensy examples. If all you have to do is a few buttons, it's super easy.

When you want to upload the sketch, set the board to your Teensy version, and change "USB Type" to "Keyboard + Mouse + Joystick"

Step 8: Testing

Presto!

We now have a joystick input device, but does it work?

If you used some LEDs you can flick some of the switches to turn on the lights, but you might have to change some of the pin numbers in the code to match your controller.

Now either load up a game, or on Windows press "Win + R" to run a command and type in "joy.cpl"

This is Windows' built-in joystick utility, select the "Keyboard/Mouse/Joystick" and press "Properties" now we will see live input from our custom game controller! Exciting stuff.

Step 9: Package It Up

I used some double sided foam tape to hold my board in place, anything works, just be sure the circuit doesn't touch any metal inside your case.

Drill out a hole for your usb connection. Tilting the drill back and forth a bit will help make it wide enough without using a huge bit.

Step 10: Finishing Touches

Because I forgot to get proper LED carriages I quickly printed some little rings to make them look more proper.

I also had some knobs from an old stereo for the potentiometers, but I decided to print off some little knobs that match a cockpit a bit better. Any place that sells potentiometers will also sell the knobs, or make some, or download some from a 3D share hub to print yourself.

One last finishing touch was a carbon-fibre type decal on the side. Not very traditional, but looks cooler than the plain plastic.

Step 11: Rejoice!

It's done. Didn't take too long, did it?

Now load up your favourite video game, bind some keys and get to work flying, ejecting, or firing missiles! Heck even change radio stations or run macros.

Thanks for reading along, and hopefully giving it a go too!

Thoughts:

If I were to take this project a step further, I would probably make my own enclosure. You can use a laser cutter to cut the pieces, holes, and etch the design in painted acrylic, all in one go! That'd be the dream.

Epilog Contest VII

Runner Up in the
Epilog Contest VII

First Time Author Contest

First Prize in the
First Time Author Contest

3 People Made This Project!

Recommendations

  • Plastics Contest

    Plastics Contest
  • Optics Contest

    Optics Contest
  • Make it Glow Contest 2018

    Make it Glow Contest 2018

78 Discussions

0
None
marko10912na

Question 7 months ago

Hi, nice build. How do you connect the arduino to the computer so the arduino can send information to the sim?

1 more answer
0
None
travershenrymarko10912na

Answer 7 months ago

Hey, it connects as a USB HID. Basically, a standard joystick or game controller. If you use a teensy or arduino that supports the Human Interface Device protocol (HID), it is recognized by default as a joystick in most games, so you don't have to use any plugin or anything, just bind each button or axis to the control you want in-game.

0
None
AgustineM

8 months ago

Hey bud this is awesome!!! Can I use this code and bind differently the buttons for toggles to play Il2 BoS ?

1 reply
0
None
travershenryAgustineM

Reply 8 months ago

Yeah, certainly. Any game that can accept a standard game controller.

0
None
JakeH120

10 months ago

Hey, I realise this is pretty old at this point but I just wanted to know what you've set your dials to do? I'm in the process of making one and don't know what to set them to do. Thanks.

1 reply
0
None
travershenryJakeH120

Reply 10 months ago

I think I used them mainly as a trim input for pitch, and for flaps.

Replacing the pots with a multi-position switch is also fun for selecting modes.

0
None
theshinyknight

10 months ago

Awesome tutorial!
Question about the program: how do you change the number of buttons used and the analog controls? I did try it with 4 buttons and no pots, and when I switch a button the hat control and the analog inputs just go crazy, instead of staying where they should. Trying to disable anything I don't need, but can't find references to the joystick library you used. It seems different from the one that is made for Arduino, since this runs on the teensy board. Thanks!

1 reply
0
None
travershenrytheshinyknight

Reply 10 months ago

Hey,

Yeah the library that comes with the Teensy is a bit different than arduino. But I think the fix would be to remove all mentions of the inputs you don't want to use from your code. Sometimes buttons are funky if they don't have a pull-up resistor to make the input "stick" to the right digital voltage.

Hope you've figured it out already, though. Cheers!

0
None
shachar2like

1 year ago

Nice article, I might make one for myself in the future.
Do you have another article on making a screen one? (for altimeter/speedometer

1 reply
0
None
travershenryshachar2like

Reply 1 year ago

Hey, afraid I do not have one for a display one.
A game controller just sends commands to the game, but a display needs the game to send information to the device. This is harder to do, and must be done with plugins for each and every game.

0
None
efe00

2 years ago

Hi!

Can I use Teensy 3.0 for this project? Will it work?

'Cause I think Teensy 3.0 is great and now it's just $9.50!

Please reply me!

Have a good day..

4 replies
0
None
anv3Defe00

Reply 1 year ago

will an arduino uno work?

0
None
travershenryefe00

Reply 2 years ago

Hey, yes I believe the 3.0 can also work as a HID device like a keyboard or joystick. Good deal!

0
None
efe00travershenry

Reply 2 years ago

Thanks for answer. After you said it can work with 3.0, I tried to buy but the shipping cost was $19 :D

I have an another question, can this code run on arduino mega?

0
None
travershenryefe00

Reply 1 year ago

Hey, didn't notice your second question.

It wont work on a mega, but it should work on a Leonardo or Micro

0
None
esteban941017

1 year ago

Sorry if the question is dumb, but i have no experience at all with teensy or aruino, do i have to buy one of them? both? is teensy an extension for arduino? can teensy work for this project by itself? can arduino work for this project by irtself? wich one do you recommend the most? Tahnk you very much, really nice project

1 reply
0
None
travershenryesteban941017

Reply 1 year ago

No dumb question here.

A Teensy is just like an Arduino, but uses some different chips and is developed by another company. The Teensy boards also work with the Arduino programming language, so they are almost interchangeable. I personally like the Teensy boards very much, but an Arduino Micro or Leonardo cab also work as a game controller, just with a bit different library. Choose either a Teensy, Arduino Micro, or Arduino Leonardo for this project.

0
None
travershenryTheoM28

Reply 1 year ago

Hey, I used the Teensy 3.1, but I believe they all support HID.

0
None
fyborg

2 years ago

I have arrived late to read this proyect, please tell me where to find the PDF with schematics and so on, many thanks