Giant Retro Gamepad

by joegaffey in Circuits > Arduino

4314 Views, 19 Favorites, 0 Comments

Giant Retro Gamepad

gamepad.png

So we decided to make a giant working gamepad... ¯\_(ツ)_/¯

The basic idea was to use up some scrap wood and add some inexpensive electronics to make it functional while keeping the overall costs low. I already had most of the materials lying around my garage but you should be able source most of this stuff fairly inexpensively from you local hardware store and popular web sites that sell electronics parts.

I decided to go for a fairly simple design by crossing the classic NES gamepad layout with the additional buttons of the SNES. I think this design fit well with the wooden construction and gave it a cool retro style.

Due to the simple design I didn't need to do a lot of up front sketching. I just marked out the cuts directly of the largest piece of board I had and worked loosely off the center lines rather than precisely measuring everything.

Woodwork Tools and Materials

WARNING: USE CAUTION AND APPROPRIATE SAFETY EQUIPMENT WHEN OPERATING POWER TOOLS

Tools

  • Screwdriver and screws
  • Table saw or circular saw
  • Chop saw
  • Jigsaw
  • Drill and misc bits including 60mm & 25mm hole saws
  • Sanding paper/blocks
  • Steel wool
  • Router and bits:
    • Round corner
    • Round cove
    • Chamfer
    • Straight

Materials

  • 19mm (3/4") boards - I used laminated boards I had left over from cabinet work but ply or MDF would likely work as well with an appropriate finish.
  • 60mm dowel for the face buttons - this was left over hand rail from my stairs. Alternatively you could cut these from the board with a hole saw and fill in the center hole with wood filler
  • Wood stain, varnish and thinners

The D-Pad

DSC_1935.jpg
DSC_1937.jpg

I first marked out the D-Pad button on a piece of the laminated board by tracing around a piece of wood of roughly the size I was going for in both the horizontal and vertical orientation to make the plus shape.

I then cut it out using the jigsaw and sanded it down until it was smooth and fairly uniform. I also rounded off the top edges using the router with the corner rounding bit.

When I was happy with the overall shape I laid the D-Pad button on top of another larger board to be used for the top of the game pad.

I traced around the D-pad with a pencil to cut out the D-Pad shaped hole. When cutting this out I first marked out the corner points with small drill holes and then used the jigsaw to cut out the main shape.

I took some time to sand down the edges of both the D-Pad button and the hole to get it to slide in and out smoothly. You'll want it pretty loose but with minimal lateral movement.

The Buttons

DSC_1947.jpg
DSC_1945.jpg
DSC_1958.jpg
DSC_1960.jpg

Next I cut the face buttons from the 60mm dowel and the smaller pill shaped buttons for Start and Select from offcuts from the top board. I then cut equivalent holes in the top board using the 60mm hole saw for the larger buttons and the 25mm hole saw and the jigsaw for the start and select buttons.

I cut the dowel in a chop saw with a slightly dull blade so the face buttons got a little charred in the process as you can see in the pics but that didn't matter as I was planning to stain them in a dark color anyway.

To give the face buttons a nicer feel I rounded off their top edges using the router with the corner rounding bit. I just sanded down the top edges of the Start and Select buttons as they were a bit too small to work on with the router.

At this stage I also rounded off the corners on the top board using the jigsaw (marked out using a varnish tin lid) and added a beveled edge all around using the router with the chamfer bit.

Adding the Base Board

DSC_1962.jpg
DSC_1966.jpg

The base board houses the electronics and is just another piece of 19mm (3/4") board. I cut it to shape by placing the top board on the slightly larger base board, tracing its shape with an extra 1/2" using a spacer and then cutting it with the table saw and jigsaw for the corners.

I also rounded both top and bottom edges of the base board using the router with the rounding corner bit.

Wood Finish

DSC_1972.jpg
DSC_1967.jpg
DSC_1974.jpg
DSC_1973.jpg
DSC_1971.jpg

Starting with the the buttons, I used some dark Polyurethane based stain/varnish that gave a nice soft, plasticky finish to the buttons which worked perfectly for those.

I stained the base board using a dark wood stain applied with a cloth, trying to match the color/hue with the buttons as closely as possible while retaining more of the wood grain.

I then finished the top and bottom boards with clear satin varnish using multiple coats and rubbing down with the steel wool and thinners in between coats to fix any blemishes.

It is important throughout this stage to continually check that the buttons are still fitting well and do any necessary adjustments as you go by sanding any areas where things are starting to stick.

Wiring Preparation

DSC_2015.jpg
DSC_2027.jpg
DSC_2018.jpg
DSC_2022.jpg
DSC_2023.jpg
DSC_2025.jpg
DSC_2024.jpg

In order to make some space for the electronics I cut a cavity in the base board using the router and the straight bit.

I also cut wiring ducts to all of the buttons using the cove bit. I first marked out the location of the button holes on the baseboard in pencil using the top board as a stencil.

This allowed me to route the easily route the wires later.

I also cut a cavity into the rear of the top board to allow extra space for the micro-controller and breadboard.

The USB cable access was cut with a smaller straight bit so as to leave it snug in its routing duct and avoid any movement.

Electronics Tools and Materials

Tools

  • Multimeter/connectivity tester
  • Soldering iron

Materials

  • Arduino Leonardo/Pro Micro with USB HID joystick profile (I used a cheap clone)
  • Microswitch buttons (the smaller and flatter the better)
  • Mini breadboard (or however you would prefer to wire up the controller)
  • Connecting wires (I mainly used Dupont jumper wires)
  • Electronics solder (still had my original rosin core reel from college)
  • Heat shrink tubing
  • Glue to attach wires and switches to the wood e.g. Glu Dots or a glue gun

Wiring the Buttons

DSC_2029.jpg
DSC_2030.jpg
DSC_2031.jpg
DSC_2035.jpg
DSC_2037.jpg
DSC_2077.jpg
DSC_2081.jpg
DSC_2078.jpg
Giant gamepad wiring test

After trying out a number of ways of getting the buttons to work reliably I found the approach that seemed to work best was to use a number of micro-switches wired in parallel for each button such that if any of the switches were triggered the button would be "on".

This required wiring a loop for each of the buttons and wiring each of these loops back to the mini-breadboard. The loops were soldered and wrapped with the heat-shrink tubing and each loop was connected back to the breadboard using Dupont jumper connectors.

During this stage it is important to continually test connectivity using the multi-meter/continuity tester and finally test with the actual wooden buttons.

Wiring the Controller and Code

DSC_2082.jpg
DSC_2083.jpg

Wiring the controller was pretty straightforward due to the use of the mini-breadboard and Dupont connectors which meant I could easily move the wires around as necessary.

The code is pretty basic too. I reused some of the code from a previous gamepad project (you can ignore the joystick axis bits which are not needed in this project).

This code uses the excellent Arduino Joystick Library You can learn more about getting started with that from this handy instructable.

Assembly and Testing

DSC_2095.jpg
DSC_2086.jpg
Giant gamepad integration test
DSC_2097.jpg
DSC_2101.jpg

I used the Glu Dots to attach the micro-switches to the base board for convenience but a glue gun would likely do a more permanent job.

I made some feet using the hole saw cutouts from the face button holes. I also bezeled these on their bottom edge using the router with the chamfer bit.

I then screwed the base and top boards together though the feet.

After some testing by the project QA lead we discovered that the buttons were getting stuck and of course would fall out if the gamepad was turned over.

The solution to these issues was threefold.

  • Firstly, I drilled holes in the base board at the button centres so that a screw could be loosely slotted through and then screwed into the button.
  • Secondly, I added extra micro-switches (they were very inexpensive) to avoid the button getting pushed into a dead space and getting stuck. This also added a nice extra clickiness to the buttons.
  • Thirdly, I added pieces of spring so that the buttons wouldn't move around (optional but a nice enhancement).

This solution actually works pretty well and made the gamepad function as desired. It also allows the individual button heights, play and springiness to be adjustable via the center screws.

Final Thoughts

DSC_2087.jpg
DSC_2085.jpg

This was a fun project and I was quite satisfied with the end result. The pad was heavily stress tested at an all-day tech demo and held up to continuous usage by some pretty enthusiastic players with no problems.

If you are interested in building your own version, check that it is compatible with the console or computer that you want to use it on. It should work fine on any device that supports the USB standard HID joystick profile. I tested it on Windows and Android and it works perfectly on both.

It also works great in web browsers that support the HTML5 gamepad API which I use in a couple of retro games I developed along with the gamepad - Invaders from Space and Galaxeroids. Check them out too!

Thanks for reading this far and let me know what you think in the comments!