Introduction: DIY USB Video Game Controller

There are a variety of do-it-yourself custom controllers out there, from classic arcade sticks to recreations of modern controllers, usually made from the same core parts.

For our final project in our high school Advanced Engineering class, we have taken it upon ourselves to make our own small controller that has a simple layout, and is built for playing simple games. This design is also an adaptation of another custom controller, which you can find here:

Due to some of the components being openly available at our school, it can be difficult do some of these steps, but if you either have all of the items listed below at your disposal, or want to try and improvise/adapt like we did, then feel free to follow our instructions to build your own DIY USB Custom Video Game Controller!

Step 1: Tools & Hardware

The items that you will need for this project:

  • 6x6x4.5mm Push Buttons (12)
  • Arduino Pro Micro w/ Micro USB insert (1)
  • Micro USB Cable (1)
  • 10KΩ Resistors (10)
  • Custom PCB (1) - Gerber file will be listed for order
  • 1/8" Acrylic - Any color
  • 10-pin male-female headers (2)

Hardware needed for project:

  • Soldering Iron (& Safety equipment)
  • Laser Cutter - May be difficult; Can be worked around
  • 3D Printer

Optional! - If you would like to test your results before you solder everything to the PCB, you can put the code on the Arduino, and set it up on a breadboard (as seen in Step 3), of which you will need:

  • Arduino Pro Micro (w/ code already installed)*
  • Large Breadboard (1-2)
  • Wires (Can use different colors to make it easier to differentiate) (12)
  • 10KΩ Resistors (10)
  • 6x6x4.5mm Push Buttons (12)

*These items can be reused for the final project. You don't have to get new ones, if you so wish

If you have all of your items hot and ready to go, let's get started!

Step 2: Uploading Code Onto Arduino

The code that we used was a modified version of the code from the Instructable we based ours on, as the Arduino that we used was different from the design that they went with. We changed around the ports for the different buttons to make everything much more simple.

Here is the original code if you want to try and use that:

In the Arduino software, make sure that the Arduino in the settings is an Arduino Mirco, and that the COM port is the Arduino Micro that you have plugged in. After you have checked that, you should just be able to click Upload, and the code should be on the Arduino.

Step 3: (Optional) Breadboard Setup


This step, if you didn't see in Step 1 or in the title of this step, is optional. If you think that everything can work without testing it on a breadboard, go for it. Since this was the first time we had ever done a project like this, we decided to test it as we didn't want to ruin the equipment we purchased or had available to us, and we also wanted to learn more efficiently rather than being thrown into the deep end without any knowledge. If you have any qualms about going on to do the other steps, than follow this step before moving on.

We got out breadboards and put them together to get a cohesive layout for the buttons, resistors, and wires. We laid out the buttons in a straight line pattern on the breadboard (except for the one button on the smaller board above, as that was our test button. You don't have to do it exactly like that). We then connected the wires and resistors to the buttons like the picture above. Before you set the Arduino down, make sure you followed the last step and put the code on there. If you didn't, it will essentially be a expensive piece of plastic that doesn't do anything.

We then put the Arduino down in a spot where all of the wires could be connected the different ports the buttons would commute to. If you use multiple breadboards, make sure to connect the power and ground to the both of them, as well as to the Arduino itself.

Step 4: Creating/Ordering PCB

The PCB that we have pictured was a custom design that we made for this project due to the original PCB the original used not being compatible with the Arduino we used. To make this, we used a program called Fritzing, which was very easy to use and very user friendly. We set up the button layout, the resistor layout, and picked an Arduino slot that would work for our Arduino, as the program didn't have our exact model.

The company that we used for ordering the PCB to make it was JLCPCB. The cost was about $30 with shipping from DHL, and there are cheaper options for shipping, but it will just take longer due to the manufacturing process. We also made it a custom red color, which put another $8, so in reality your PCB could be about $8-10 with shipping.

Step 5: Testing If Everything Fits

After your PCB has arrived, your Arduino has all of the code uploaded, and you have all of the rest of your parts, it's time to put it together. Test to see if the Arduino you have fits into the slots appropriately made for them, make sure the resistors and buttons fit in the correct places, and see if any of the wiring within the PCB was properly connected, and there are no breaks (if you used our design, there shouldn't be any issues, but it's always good to double check).

Step 6: Soldering

Once everything is put into the correct places, you now need to solder down all your pieces to make them have their connections. Before you get to soldering though, remember to use goggles, and a mask if you wish, and get the your solder ready. We used thinner lead, but you are happy to use any kind of solder, as long as it can be used to make the connections with the PCB.

We would recommend starting with the resistors so you don't have a bunch of thin pieces all over the place, and do them one at a time. A good way to keep the resistor in place while you're soldering is bending the long ends away from each other while it's stuck inside the holes of the PCB. Once you have it soldered, you can snip the long ends of the resistors with some wire snips, and while doing so, make sure not to cut too close, or you might cut the solder and lose the connection.

After all 10 resistors are soldered, the buttons are next. Stick all of the buttons into place rather than putting them in separate just to make things easier. Make sure to check if you are soldering all of the holes, as they are very close together.

Once those are all in and ready to go, it's time for the hard part: the Arduino. Stick the Arduino into the holes, and solder 1-2 of the ports to keep it in place, and then go on, careful, to solder the rest. Along with making sure you hit every hole, also make sure that none of the solder is touching the other solder, as if that happens, there is a chance of short circuit, which is something we don't want, or you'll be in deep trouble.