RomTaStick: the 3D printed arcade console

Gilles Grousset
Hack Like a Pirate
Published in
7 min readJul 29, 2016

A few months ago I started exploring another side project involving a 3D printer: designing and printing a 3D arcade console, RomTaStick.

Never say never…

I bought my first Raspberry Pi nano computer (model B) back in 2013 and was looking for a new, interesting project to use it for. At the time, the two most popular project types were: media centers and retro-gaming consoles / arcade cabinets. As I wasn’t interested in doing what everyone else was doing, I decided to do something different. Yet at the end of last year, things changed after I bought an Ultimaker 2 3D printer.

After testing it on various small projects I decided to find something bigger to print to improve my 3D printing skills, which brought back my idea to create a retro-gaming console!

In the end, Justin Bieber was right: never say never!

Designing the console

Before diving into design, I had to find out what I really wanted to do: this is very important when working on a side project because in such projects you can easily run short of time or money.

There are many, many ways to build an arcade console. But what I wanted was really basic:

  • A plug’n’play system so that my kid can use it
  • At least two real arcade controllers with hotkeys to exit games or add credits
  • Being able to play four-player games

On the other hand, I had some limitations to consider:

  • My printer cannot print objects larger than 22 centimeters
  • Keeping in mind the gamers’ comfort, buttons and sticks should not be too close
  • The larger the console, the most difficult it is to handle and the longer it takes to print

Given all of these points, I had to make a few tough choices: I decided to stay with two arcade controllers, but to allow users to plug USB controllers on the side of the console to allow four-player gaming.

Finding parts

Once I had an idea and rough sketches of what I wanted, I had to find which hardware parts were available to build the thing and, very important for the modelling part, determine their dimensions.

Here is the first list of material I came up with:

  • A Raspberry Pi 3 with its power adapter and an SD card: the latest Raspberry Pi model with Bluetooth and Wifi support (ideal for uploading game ROMs without plugging / unplugging network cable on each update)
  • A 2-arcade controller set with a USB controller bought at ultracabs.co.uk: using a USB controller is safer than plugin controls on the Raspberry GPIO and it is supported by most emulators
  • 2 panel mount USB plugs to plug extra controllers into the console
  • A panel mount micro-USB plug for the power adapter
  • A panel mount HDMI plug for the display output

Modelling

Once the main parts were ordered, and while waiting to receive them, I started the modelling of the console.

I modelled a first draft while keeping in mind my printer’s size limitations, and tried to make the most 3D printed-friendly model to avoid additional problems when it was time to print (such as overhangs). I used SketchUp Make for that.

As I wanted to create a feeling as close as possible to a real arcade, I did some research on how I could place controller buttons in such a way that one would think of arcades whilst playing. This took me some time because there are many “academic” layouts depending on the country, the number of buttons, and the type of games you want to play.

After some testing, I decided to go for a standard Japanese arcade layout remixed (first column is lower, others are aligned).

At this step, I decided to print a scaled down version of my draft to make sure everything was right before proceeding.

As I was happy with my scaled down model, I decided to finish the work and added missing details, such as: screw holes, plug holes, supports for the Raspberry PI and the joystick controller (actually supports for 2 controllers: one on the left and one on the right as I heard that some software may have difficulties to detect 2 controllers on the same board).

I also added a lid on top of the Raspberry to be able to access it when the console is closed.

Unit testing parts

3D printing is long, very long… So before launching the final print of all my parts, I made some unit test prints on small relevant parts of the model to make sure that everything was in its right place and was the right size.

Here are some tests I made :

  • How parts fit together (joints, corners)
  • Check the sizes of: screw holes, joystick holes, button holes
  • PCB supports (for joystick, USB controller and Rasperry Pi)
  • Full size print (to make sure it would fit into the printer)

After a few adjustments, I was ready for the final print to begin!

Go time: the final print

Printing the whole box took more than 72 hours, and a lot of failed tries…

Why did it fail? This was mainly because of the printer’s build plate leveling: when printing large objects, the nozzle must be as close as possible to the plate (but not too close, of course) to make sure the first layer of material sticks well to the build plate, otherwise warping occurs. I also had to add a brim around objects to make sure they don’t move until the print finishes.

For materials: I used ColorFabb nGen for lower parts (rendering is not as smooth as PLA but supposed to be stronger) and classic PLA for top parts.

I also used DimaFix anti-adhesive spray instead of a glue stick for build plate adhesion: it made large parts easier to remove from build plate, and also a nice and flat rendering of the object on the build plate side.

For more details on print settings, take a look at the printing instructions.

Assembly

Once I received all the components and all the parts were printed, it was time was the most exciting part of the process: putting them all together!

I began by mounting sticks and buttons on the top parts and started wiring them.

Then I moved to the bottom part to assemble the 3 parts, put the Raspberry Pi and the USB controller board inside, and screwed in and plugged in the panel mounts.

However, I started having problems when I first tried to put the top and bottom parts together…

The first issue: the controller wires were too short for the right controller. I had to unscrewed the controller board and move it closer to the center.

The second issue: the left stick was hard to put in place because it was touching the left USB panel mount plug. Fortunately: the panel mount is in soft plastic and after pushing on it I was able to put everything inside the box.

The last problem was the most annoying: the start buttons (those on the center part) were touching the power supply and HDMI panel mount plugs, but this time buttons were too long, and I had to find a fix. I decided to add an extra part on top of the console to move them up.

Just a few more screws and the hardware part was ready!

Let’s play!

The software part was the easy: I decided to go with Retropie, a plug’n’play Linux distribution for the Raspberry with a nice front end ( EmulationStation) and more than 50 systems supported.

All I had to do was to burn the image onto the Raspberry Pi SD card.

For more details on Retropie configuration, have a look at the official documentation or refer to one of the many tutorials you will find on the Internet.

Just a little trick: out of the box, Retropie detects only one controller connected to the USB board. To fix the issue : log onto the Raspberry (SSH), edit the file /boot/cmdlne.txt, and add this line as first line:

usbhid.quirks=0x16c0:0x05e1:0x040

Then, save and reboot.

All I had to do after that was adding ROMs and play!

Make one by yourself!

Maybe you own or have access to a 3D printer? Then feel free to build your RomTaStick.

3D model and STL files are available on Thingiverse.

And here is the complete bill of material to build it:

This project is the most ambitious 3D printing project I have done so far. I learnt a lot about modelling for 3D printing, and on printing large objects.

And the end result is a useful toy I can play with my kids!

Originally published at https://www.backelite.com on July 29, 2016.

--

--