Introduction: Bartop Arcade Cabinet
This Instructable is for a 1-player retro bartop arcade cabinet, based on a Raspberry Pi 3 running RetroPie. Instructions for building these are all over the Internet and Instructables itself, but I figured I would throw my version into the mix!
I started out buying the Pi RetroCade set from Sparkfun Electronics, but I soon realized that their bare bones controller was not going to cut it for me! The Sparkfun kit comes with a joystick, 5 buttons, quick disconnects, connector wires, and an SD card loaded with PortaPi Arcade from RetroBuilt Games. The set they sell comes in a cardboard box, and the idea is you cut holes in the box (which is pre-marked for you and comes with a utility knife to do it with) and screw the components into it, connect to a Raspberry Pi 2 or 3, and hook it to your TV via the HDMI cable.
But I got to thinking, 3 buttons (plus a start and select button) are not enough to play some of the fighting games like Mortal Kombat and Street Fighter. Also, I wanted a standalone arcade cabinet that I could share with my 2 boys, and waste countless hours reliving the glory days of my youth, where I wasted countless hours playing arcade games!
Here is the parts list for this project, as I built it. Total cost was about $300.
- 1/2" MDF, two 2'x4' panels
- 1/8" plexiglass, 2'x2'
- Raspberry Pi 3
- standoffs to mount the RPi
- power supply for the RPi (use a Canakit, or other 5V, 2.5 amp power supply)
- HDMI cable
- Sparkfun Pi RetroCade kit (you don't have to use this, but it was a great place to start for me)
- Kit contains: 5x Arcade Buttons,1x Joystick, 1x SD Card with Porta Pi, 20x Female quick disconnects, 20x 6-inch M-F Jumper Wires, couple other things not use
- In addition to the kit you need:
- 3 more buttons (I used these)
- More quick disconnects, and more M-F jumper wires
- Drill, with various bits, (definintely get a 1-1/8" spade bit for the button holes)
- Table saw
- Band saw
Step 1: Cut Out the Panels and Construct the Cabinet
My plans for the cabinet were based on other designs and my own thoughts about how big it should be. The final dimensions are 17.5" H x 14" deep at the bottom, by 13" wide. I didn't take any pics of the pieces all cut out, until I screwed them together, unfortunately. But here is a list of the pieces and their dimensions. All are 1/2" MDF except for the screen cutout, which is 1/4" MDF.
- Base: 13" Dx 12" W
- Front bottom: 13" W x 4" H
- Control panel: 7.5" D x 13"W
- Screen panel: 8"H x 13"W (1/4" MDF)
- Angled piece above the screen: 3.5"D x 13"W
- Top: 12"W x 7.5" D
- Back panel: 17.5" H x 13" W
- 2 Side panels: The little paper cutout above shows the dimensions of the side pieces. Clockwise starting from the back (longest side, labeled "A") the measurements are 17.5", 13", 4", 7", 8", 4", 3", 7.5" (I know that G says 3 in the pic, but in reality it was 4")
- Marquee: 2 pieces of 1/8" plexi: 13"W x 4.25"H (I did 2 pieces so I could sandwich the vinyl art between the pieces)
- Screen cover: 1/8" plexi, 13"W x 8" H
Cut all MDF pieces with a table saw, except for the angled parts of the side panels. A jigsaw or a band saw can be used for these. Plexiglass is easy to cut to size, a quick Google search will give you details. You just need a box cutter and some clamps.
The trick with these is getting the angles correct. You can use CAD software to lay everything out, but you don't need to. Here is what I did. I measured out the straight parts first: (Using the photo of the paper cutout for reference) A,B,C,G, and H. C is 4" high, and I wanted the screen section, E, to start at 5" from the bottom (so the panel rises one inch). I drew a straight line horizontally across the piece, 5" from the bottom. The control panel section, D, is 7" deep, so I wrapped some string around a pencil, measured it to 7" and drew an arc from the front of the panel (where C and D meet). Where the arc intersected my 5" line is where the cut should end! I did a similar trick to get the angle of F, since I wanted the top of the screen to be at a point 1 inch lower than the bottom edge of G. Hopefully that makes sense!
I cut the straight edges on a table saw, and the angles were done with a band saw. Wear a mask when cutting MDF! You don't want to breathe in the urea formaldehyde glue that is sent flying into the air when you cut into or sand MDF.
Screw the side panels to the bottom and top panels, so that the side panels are on the outside. Then, screw the front bottom front panel (C on the cutout) on the outside of the side panels. Also screw on the under-marquee panel (F) on the outside of the side panels.
Use your display as a guide and mark a cutout area on the screen panel. I used a jigsaw to cut out the shape. Pretty sloppy, but you can cover that later.
Use screws to connect everything, but make sure you drill pilot holes, since just screwing the screws in without pilot holes will split the MDF. Sand everything to make it even, but wear a mask when sanding MDF, since the particulate from this material is Nasty.
Paint the assembly, and for now don't attach the control panel piece or the back panel, but paint them. I went with black, ultra glossy, but do whatever you like!
Step 2: Grafix!
For the control panel, I created an image file in GIMP, the same size as the MDF panel. and then placed marker holes for the the joystick and buttons in a pattern that seemed like it made sense. According to the Internet, the joystick should be around the midpoint of the two rows of buttons, and the buttons should be in kind of an arc. Then Start and Select buttons are above, in a straight line.
I used this site for reference, but the file for the control panel is above, if you want to use it! Be aware though, the images I chose are highly anachronistic. We've got a Death Star II getting attacked by the Millennium Falcon (okay that is accurate) and a T-70 X-Wing (not accurate), which are being pursued by a Vader's TIE fighter (unlikely since he is dead). But hey, it looks cool!
I brought the image file to a FedEx Print Shop and had it printed on adhesive backed vinyl, which came out really nice.
After slapping the vinyl onto the MDF panel, I drilled a 3/4" hole for the joystick and then used a 1-1/8" spade bit - which makes the perfect sized holes - for the arcade buttons. Probably should have put plexi on top of it, but I didn't. It is already a little scratched up. Next time I would probably use 1/4" MDF for the control panel and place 1/8" plexi over it. I would have to duplicate the holes into a separate image file and laser cut them... Hmmm... Anyway--
I made the Marquee (also in GIMP) to fit the entire front of the marquee spot on the cab, 4"x13". In retrospect I should have made it smaller, so that I could put a frame around the thing. The image file is shown above. I also printed this at FedEx, on transparent vinyl, also very impressed with the quality. I sandwiched the piece between 2 sheets of plexi and drilled holes in them, then screwed them to the cabinet.
To light the marquee I put the LED light strip about an inch inside of the cabinet, behind the marquee. The one I got had adhesive on the back so I just used that to plaster the strip to the top and sides of the cab. The strip is USB powered, so it is just plugged into the power strip.
For the side art, I decided to just print out a few decals on my inkjet printer. I just used adhesive backed vinyl sticker paper, and they came out nicely. I did a bunch of Star Wars images, and some art from a couple of other games. The trickiest part is cutting out the shapes. I don't have a Silhouette machine, so I had to use a utility knife. I put a black border around the images I chose, so they would blend into the black paint on the cabinet. But, some of the stickers had white, raggedy edges where my cuts were sloppy, so I went over those parts with a Sharpie to cover it up.
For the back of the inside panel I drew a member of Team Dino, based on stories I tell my son at bedtime. Team Dino is a crack squad of helpful dinosaurs who solve problems all over the valley. I colored in Super Rex with colored pencils (Prismacolor). Go Team Dino!
I attached the back panel with 2 hinges on the side. Then I added a spring loaded clasp so it will stay shut. I drilled a 1.5" hole near the bottom of the panel, which is big enough for the cord to fit through, and I can also turn the system on using that hole, since it gives me access to the power switch on the power strip.
You can use a different method, but it is important to have a removable/openable back panel so you can access all the fun stuff inside!
Step 3: Put in the Hardware
If you use the Sparkfun kit, there is a nice tutorial for how to wire up the buttons and the joystick to the RPi (Raspberry Pi). Actually even if you don't get the kit you can reference the tutorial here. However, if you add the 3 extra buttons you need to dig a little bit deeper. I'll explain below.
I'll divide this section into 3 parts: 1) Controls; 2) the Raspberry Pi 3; and 3) Display, audio, and lighting.
The buttons and the joystick are both essentially the same thing: microswitches. Each switch has 3 tabs on it, but you only need 2 of them. You need to wire up the ground tabs (the long tabs on the bottom of the switch, and the NO (Normally Open, labeled on the switch) tabs on each switch, and connect them to GPIO pins on the RPi. Since all the ground wires can go to one ground pin, you can daisy chain the wires together using your wire crimpers and the quick disconnects (see photo above, stolen from Sparkfun) The NO switches each need their own connection to a GPIO pin on the RPi.
To make the wire harnesses: (The following is also stolen/adapted from Sparkfun) You will need a pair of crimpers, or there may be a crimp tool on your wire strippers already. You will build two wiring harnesses for ground. One wiring harness will have 8 quick disconnects daisy chained together for the buttons, and the other will have four quick disconnects daisy chained together for each ground pin in the joystick. Then 12 individual wiring harness for each button and each of the 4 directions on the joystick. The ground on the button switches are the lone tabs on the long side of the switch. The same goes for the joystick.
The jumper wires are about 6 inches long, so I went ahead and ordered a pack of male-to female jumpers, so that I could attached these to the ones coming out of the wiring harnesses, to give myself some extra length to reach the RPi. The female end will slip right onto the GPIO pins, so you don't need to solder anything.
RetroBuilt Games has a good FAQ on how to map the GPIO pins. But with the RetroPie software suite, the pins are already defined, you just have to plug in the correct button to the correct pin. The software takes the input from the switch and sees it as a keyboard press.
For my control panel my buttons are arranged like this:
joystick(UDLR) A B X
Y L R
Here is the way they should be wired up. The numbers are for the GPIO pin number, NOT the physical pin number, so you'll need to use a guide to figure out which is what. Luckily, the guide is attached above!.
- joystick Up - 02
- joystick Down - 03
- joystick Left - 04
- joystick Right - 17
- Start (aka Enter) - 09
- Select (aka Esc) - 07
- button A - 22
- button B - 27
- button X - 25
- button Y - 24
- button L - 25
- button R - 11
This part is pretty easy, in terms of hardware setup. You'll need to get 4 standoffs to mount the RPi on, so you can attach it to the bottom panel. After I wired everything up, I drilled a 1.5" hole in the side of the cabinet, so I could access the USB ports on the RPi. Then I screwed in 3/4" standoffs to the RPi and glued them to the bottom panel.
Aside from the jumper wires attached to the GPIO pins, you'll need to attach an HDMI cable, the power supply cord, and the audio out cord. And that is pretty much it for the RPi hardware setup!
A note on Power - A regular power strip with a couple of USB ports is what I used for powering all the components. A hole in the back panel of the cabinet allows the main power cord to reach the wall outlet. The power strip I got has 4 outlets and 4 USB ports, more than enough for this project.
Display, audio and lighting
Display: The display I got off Amazon works great, but did not have an instructions. But, it was fairly easy to put it together using the product pictures on the Amazon page. Essentially it came with a driver board, a ribbon cable, a power cord, a small panel of buttons to control the display (like brightness/contrast, etc), and the display itself. I fit it into the rectangular hole I had sawed out of the 1/4" MDF panel, and put a 1/8" piece of plexi over it, and screwed the plexi onto the MDF frame. I duct-taped all around the sides of the display on the back side, to keep it in place, and also to cover up the non-straight edges of the hole I had sawed! The tape, and the friction of being in the frame holds it in place pretty well.
Audio: I got a cheap pair of USB-powered computer speakers, and basically just velcroed them to the inside of the cabinet, right behind the marquee. My original idea was to drill holes in the panel directly over the screen, and have the speakers point down. But in the end I pointed the speakers toward the back of the cabinet, with them resting on their sides. The sound is fine, and better if I open up the back a little.
Lighting: To light the marquee, I got a USB-powered LED strip, with an adhesive back. I stuck the strip to the top and sides of the cabinet, about 1.5" back from the marquee window. It is very easy to do, and looks great! The strip just plugs into one of the USB ports on the power strip, so it is always on, as long as the power strip is on.
Step 4: Software
To make this arcade work you'll need a few different pieces of software. Luckily they are all open source and free. It will take some configuring, but these programs are pretty user-friendly, and there are loads of pages with documentation and forums out there to explain pretty much anything.
The software you need is:
- RetroPie - the download contains RetroPie, RetroArch (this helps setup external USB controllers, which are better for some console games) and Emulation Station (emulates the look and feel of dozens of game systems),
- RetroGame (by Adafruit)
- Etcher (for writing the disk image)
- Game ROMs
First, download RetroPie from https://retropie.org.uk This includes all the software needed to play thousands of arcade and console games. Insert your MicroSD card (the really tiny ones that go in your phone) with the full-size adapter so it will fit into your desktop. Once the file is downloaded, use Etcher to write the disk image to your SD card. Then take the card out of the adapter and insert it into the RPi. The RPi 3 has a slot on the underside just for this. The SD card acts as the RPi's hard drive, since it doesn't have any inherent storage. Then, fire it up! Look here for details on installation. https://retropie.org.uk/docs/First-Installation/
The key to this kind of setup - with the joystick and buttons hardwired to the RPi - is a program called Retrogame. To get it, go to the command line (after installing Retropie), and enter
Then reboot and follow the prompts to set up your system. You can specify the number of buttons and add other customization. Note that if you use the Sparkfun kit, the included card has this on it already.
RetroGame allows the RPi 3 to read input from the buttons as keystrokes. Adafruit also has information on this cool program here https://learn.adafruit.com/retro-gaming-with-raspb...
All the above software is free and available to download. The games (known as ROMs), are another matter entirely. For that you need to Google around, and with a few clicks you will find information on this sticky topic. The main problem is copyright law. You'll see. However, reports indicate that the Internet Archive seems to have found a way around this so have a look for that. Look on the RetroPie website for instructions on how to get and save ROMs.
The other great thing about this project is that RetroPie is built on Raspbian (the RPi OS), and you can activate the Pixel desktop environment from the setup menu (once everything is installed). That way, you can exit out of RetroPie, plug in a USB keyboard and mouse, and the arcade cabinet becomes a fully functional laptop, complete with Internet browser and other cool, Linux-y stuff!
That about does it for this 'Ible. Any questions, feel free to ask away in the comments. Thanks for reading!
Participated in the
Microcontroller Contest 2017
5 years ago
Everything turned out pretty smooth. The tablet's usb connector powers the encoder, which also has two 5v out connectors which power the led buttons and some spliced battery operated Christmas lights. The only thing left to do is to finish drawing the side art and get it printed and stuck on. I happened to stumble upon this orange and blue marquee while browsing the internet, and it looked too good to ignore, considering it matched my color scheme of orange with blue accents. Thanks for your help.
Reply 4 years ago
Nice work! This turned out great. Love the light-up buttons. Thanks for the update!
5 years ago
Do you think that this setup could work with an old android tablet, which has a 10.1 inch display like your screen? The tablet's about an inch thick, and I was thinking of doing something very similar, except using a zero delay encoder, Led Buttons, and mame4droid on a Toshiba Thrive.
If nothing else, your instructable has massively helped me out in finding a place to start. Thanks.
Reply 5 years ago
I think that can definitely be done. I am not sure how to hook up the buttons and joystick to the tablet, but you wouldn't need to deal with the Raspberry Pi so that might make things easier. Glad the instructable was helpful, and good luck! Please post a pic when you are done!
Reply 5 years ago
My tablet, a Toshiba Thrive, has a built in full size usb port, so I am about 98 percent sure I can get the controller part to work, as I've used an xbox 360 wired controller with it in the past. If the encoder doesn't work, I've been soldering since I was a teenager, so worst case scenario is that I have to butcher a gamepad's circuit board and solder connections to it. I was just looking for bartop cabinet plans mainly. I'll let you know when I get to work on it.