2-Player Bartop Arcade Machine (Powered by Pi)---Raspberry Pi project sharing
The 'Galactic Starcade' is a DIY retro bartop arcade cabinet for two players. It is powered by the Raspberry Pi micro-computer and plays multiple types of retro games - primarily NES, SNES, Megadrive and arcade (MAME) games. Using a Pi keeps the cost, weight and complexity to a minimum but the cabinet could also house a more powerful PC-based system to play more modern games.
I've always wanted an arcade machine for authentic retro gaming but they take up a lot of space and cost a lot of money. Making a custom bartop cabinet like this one solves both of those problems. It also lets you play potentially thousands of games on a single machine. This project costs under £200 (approx. $320) to make, whereas a prebuilt custom cabinet can set you back four or five times that amount!
Step 1: Tools and Materials✍️
- Raspberry Pi model B - £24 (Amazon)
- Clear case for Pi - £3 (Amazon)
- Heatsink for Pi - £3 (Amazon)
- 32gb class 10 SD card - £12 (Amazon)
- 4-way extension lead - £1 (Amazon)
- Fused switched mains inlet socket - £7 (eBay)
- HDMI to DVI cable - £2 (Amazon)
- Joysticks + buttons + USB interface - £44 (ultracabs)
- 19" LCD TFT monitor with built-in speakers- £25 (eBay)
- 12mm MDF board 1829 x 607 - £15 (B&Q)
- 9mm MDF board 1829 x 607 - £9 (Wickes)
- 6mm MDF board 1829 x 607 - £7 (Wickes)
- 3m x 15mm coloured t-molding - £6 (arcade world)
- 750ml all-purpose white primer - £9 (screwfix)
- 400ml matte black spray paint - £3 (screwfix)
- 600mm brass piano hinge - £5 (Wickes)
- Flexible LED strip kit - £13 (Amazon)
- Plexiglass 500 x 240mm - £3 (screwfix)
Approximate total spend = £191 ($305)
You will also need the following tools
- USB keyboard and mouse
- Drill with ~28mm, ~12mm, and ~2mm bits
- Table saw
- Wood glue
- Paint roller and small brush
Step 2: Designing the Cabinet✍️
I did a lot of research before building this cabinet. Mainly looking at other people's designs. There are a lot of great instructables already for custom arcade machines - I've kept track of my favourites here - but none of them covered exactly what I was after. After taking in a lot of inspiration I decided the main criteria for my design would be:
- classic 80s arcade style
- relatively portable
I wanted to make something that would look vaguely 'real' with authentic controls for a convincing arcade experience at home. A couple of sketches later and I was on my way!
I designed several iterations of the cabinet using SketchUp, a free and easy-to-learn tool for 3D modelling. I already had a basic shape and style in my head, but the modelling process helped me figure out the angles and dimensions that worked best aesthetically.
Step 3: Designing the Controls✍️
I wanted a versatile setup that could handle all the main gaming platforms I was trying to emulate. After some research I settled on a six-button Capcom-style layout with additional Start / Select buttons on the front. This layout is perfect for beat 'em up games and has enough face buttons to adequately represent all the consoles the Pi can emulate.
I knocked up an instructional poster to explain the control schemes for each console, as it can get a bit confusing for new players switching between systems otherwise. This will be framed and hung on the wall as an official reference guide for arcade machine newbies.
In terms of dimensions and button spacing I used a lot of trial and error and prototyping to see what felt right. I feel that the final design is wide enough for two players and with enough wrist support to be comfortable during long gaming sessions - very important!
Step 4: Designing the Marquee✍️
The marquee is the backlit title graphic found at the top of all arcade machines. I chose the name 'Galactic Starcade' as I felt it evoked the somewhat cheesy feel of classic cabinets while also being (at the time of writing) an entirely unique name. Hence the zero results on google.
I found a great resource for hi-res arcade graphics, Arcade Artwork, and photoshopped some iconic videogame characters into a spacey marquee graphic. The starry background is from the original Space Invaders cabinet and the title style is a kind of homage to classic arcade game logos.
Step 5: Cabinet Prototyping✍️
I would highly advise full-scale prototype modelling if you're designing a cabinet yourself. That said, if you want to work from my designs exactly, feel free to skip this section!
Using some spare cardboard, I taped together a pretty rough mockup of the cabinet design. I had only really designed the arcade machine digitally and wasn't certain it would look and feel right in the real world.
The full size mockup allowed me to assess the size of the cabinet in context (i.e. on the kitchen counter where it is destined to live) and figure out if I'd left enough space for two people to play side by side. It also helped me figure out the optimal playing/viewing angles for the control panel and screen.
Overall I was very happy with the size and shape of the mockup and only made minimal changes.
Step 6: Control Panel Prototyping✍️
I ordered a full control panel set from ultracabs which included two Japanese-style (i.e. ball-topped) joysticks and eighteen buttons of various colours. After designing my control panel layout on the computer I drilled a few holes in some scrap wood and set up a standalone controller to test out the setup before committing it to the cabinet. This is a great way to test the ergonomics of the design with some actual factual game time.
I wired up the test controller and played a good few games on it to see how it felt. See later sections on how to wire up and configure the controls. Overall I was pretty pleased but the prototype taught me that the buttons should go a little closer together and that a little more space at the bottom for wrist support was needed. I then fed these realisations back into the final design. Better to tweak now than when its too late!
I left the prototype wired up and used it to play games on my computer to scratch that retro gaming itch while I was working on the rest of the arcade machine. If you made it look nicer the standalone controller could be a full project in its own right!
Step 7: Cutting the Panels Pt.1✍️
Let's get dusty! Armed with a dimensioned print out of the design (IKEA style because, well, why not?) we took to the shed to cut out the MDF panels. Big shout out again to 1up Living who helped a lot with the next few stages of the operation.
First up we cut some 12mm MDF into 500mm wide panels on the table saw. Once one edge of each was squared on the mitre saw, we simply worked through the panels (base, rear, monitor face, control panel, little strip on the front, and marquee), setting the fence and blade angle on the table saw for each cut.
For the screen cut out, we carefully measured the screen and cut a hole in the panel using the jigsaw. The screen was then laid in place and chunky bits of wood were glued and screwed up against the edges to provide a tight fit. That's the prep work done - more detail on the monitor mounting later.
Step 8: Cutting the Panels Pt.2✍️
For the sides we taped a printed template onto a bit of 9mm MDF and cut through it with a stanley knife to mark the shape. This was cut out using a jigsaw, and given a little love with some sandpaper to round off the edges and suchlike. Its important none of the corners are too sharp to ensure the T-molding will fit properly later. The other side was cut from this using a template bit in the router so we knew they would be identical.
The side panels are thicker than the rest of the cabinet at 15mm, with a 3mm channel running along the edges the whole way around the perimeter. The channel needs to be completely central and will house the plastic trim (T-molding) later on. The side panels are a bit chunkier than the rest of the cabinet because they also act as legs and will be supporting the weight of the whole machine. Also T-molding just so happens to come in 15mm but not 12mm.
There are a couple of ways to achieve this but with the tools at our disposal we found the simplest way was to form the 15mm panels using two pieces of thinner wood (9mm and 6mm) sandwiched together. The 9mm piece was cut and sanded exactly to size as explained above. The 6mm piece was cut out very roughly with a few cm of bleed all the way around and then cut accurately using the router's template bit again to ensure it would fit its other half exactly.
We then set the router to a depth of 3mm and cut a rebate all the way around the edge of the 9mm panel, making sure to cut into the inside edge rather than the face edge. Once happy with that we got some heavy duty wood glue on the go and sandwiched the 9mm and 6mm pieces together, ensuring the rebate was in the middle to form the 3mm channel. The two sides were held together overnight with as many clamps as we could lay our hands on.
Rinse and repeat for the other half and you've got two side panels ready to go!
Step 9: Assembling the Cabinet✍️
Time to put all these panels together into something vaguely resembling an arcade machine! This stage uses a lot of wood glue, clamps and caution.
The first step is to knock up some little batons to act as internal bracing for the rest of the panels. These won't be seen in the final piece so can be made of any scrap wood. My batons were cut from lengths of 20x20mm wood that was lying around. Drill a few countersunk holes in all of the batons to make it easier to screw them into the cabinet panels from the inside - it can get pretty fiddly otherwise, and possibly split the wood. These will be screwed and glued to the panels along each edge that was joining the side panels.
We printed out a full scale sectional diagram of the cabinet and used it to trace all the important points on the side panel in pencil. Then by laying the panel flat on the floor the other pieces can be placed on top of the drawing. Once we were sure everything fitted together and the angles were right, each piece was glued carefully in place, getting a clamp on there wherever possible.
This was then turned over and placed on top of the other side, lined up with marks from the same template, and glued and screwed in place. It takes a pretty small screwdriver to get to some of the screws around the control panel and it gets a bit fiddly, but it leaves the outside with no visible screws so I think it's worth the effort.
Step 10: Paint It Black✍️
Before applying any paint I used white surface filler to fill in the 'seams' between panels. I rubbed the filler in with a finger along any edges that had a slight gap - corners too. This needs to dry and can then be sanded smooth with 120 grit sandpaper. I also applied a thin layer of filler all around the inside edge of the screen cutaway to give it a smoother and nicer finish, again carefully sanded down before the next step.
I spread out an old blanket to protect the rest of the shed and went at it with some white primer. I used a little roller for the most part and a small brush to make sure all the corners and edges got enough coverage. I did my best to avoid brush marks though as I was aiming for a smooth finish. A little sanding between coats can sort out most of the marks though. Two coats should do the trick.
Next up was the black finish which was achieved with a few coats of spray paint. It's worth having a read to learn how to apply spray paint properly. In a nutshell, hold the can about 20cm away, keep the can moving, and try to do a lot of thin coats rather than generous coats. It's also important to wear a good quality mask, and work somewhere well ventilated.
Step 11: All the Trimmings✍️
T-molding is the plastic trim which really gives a cabinet that genuine arcade look. I bought a strip of yellow T-molding from Arcade World UK. It comes in several sizes - I opted for the 15mm, although its worth noting that most distributors have a wider selection of colours in the industry standard 3/4 inch size.
Installing the T-molding is fairly straightforward but it does take a bit of time. Start from the bottom to make sure any seams remain hidden. Slot the plastic into the groove a little section at a time, with a tiny drizzle of glue to hold it in place. Use masking tape to hold the T-molding fully in place while each section dries, although be careful to use tape that won't wreck your nicely painted finish.
In theory the channel should be tight enough for the T-molding to pop into and then hold firm by itself, but the way we made the side panels necessitated some use of glue just to be sure.
Step 12: Mounting the Screen✍️
I used a refurbished 19" 4:3 LCD TFT monitor I found online pretty cheap. 19" is perfect for a cabinet of this size, but its hard to find anything to buy new as nobody manufactures 4:3 aspect ratio monitors anymore. Plenty of people are selling old monitors on the cheap on ebay though. It doesn't matter if the casing is a bit battered as it will be hidden within the cabinet.
The front of the cabinet was cut at an earlier stage to precisely fit the dimensions of the screen itself. The wooden surround for the monitor - that is, four supports, one for each side - are fixed permanently in place. The monitor is then slotted firmly in place and more supports are added at the back to hold the weight and keep the monitor in check. These support panels are easily accessed and unscrewed for removal of the monitor in case it needs any maintenance.
This will vary from screen to screen, but for this project the monitor had to be mounted upside-down to fit properly in the right position. If you have to do this its very easy to set the Raspberry Pi to output everything rotated 180 degrees so its still visible as normal. This can be achieved by typing
sudo nano /boot/config.txt
into the commang line, followed by adding the line
to the bottom of the config file and hitting save. On reboot everything should be upside-down (that is, the right way up)! Setting display_rotate to 0 or deleting the line will revert everything to normal if necessary.
Step 13: A Note on Audio✍️
For big beefy sound you would want separate speakers - and maybe a little subwoofer - to be mounted inside the cabinet somewhere. Websites like Arcade World UK sell special arcade speakers with little audio grilles which can go wherever you like.
I got very lazy for this stage however, and settled for using the speakers built into the monitor. This is not ideal but saves a lot of work. It can go plenty loud enough for my needs and the old school sounds that come from these old games sounds just fine through cheap monitor speakers.
I used a standard 3.5mm audio cable to connect the Pi's audio out to the monitor's audio in port. Its worth setting the Pi to always use this port for audio (rather than trying to output via HDMI). This setting is easy to change, just type
from the command line to open the configuration screen, then select 'advanced options', 'audio' and choose to force the audio out through the 3.5mm jack.
Step 14: Wiring the Controls✍️
This step can be pretty fiddly. The buttons will just slot nicely into the pre-drilled button holes and should be held in place by tightening the plastic washers on the inside of the cabinet. That's the easy part.
The tops of the joysticks are unscrewed and temporarily removed, allowing the stick part to be slotted through from inside the machine. It can then be painstakingly screwed into place from the inside using a tiny screwdriver and plenty of willpower. Its important to make sure the stick is aligned properly so that it can move properly in all directions. You can test this by holding it in place from underneath and twiddling it. You will hear and feel the microswitches click as you move in each direction.
The all-in-one arcade controls set comes with a USB interface and pre-crimped wires which just slot onto the interface at one end and the buttons on the other. The picture makes it look really confusing but as long as you keep track of your progress its simple business.
The set comes with instructions and the distributors made this how-to video to explain the wiring in more detail. In essence, each button (and direction on the joysticks) will have two connectors which should be wired up to the USB interface. One into a general input and the other daisy-chained to the ground connector. Be careful not to bend the metal connectors or use too much force when attaching the wires - I snapped a microswitch clean off one of the joysticks and had to order a replacement part.
It doesn't matter too much at this stage which input each button is connected to - once its all set up and plugged into the Pi we can use a system tool to figure out which button is on which port and map them accordingly.
Step 15: Wiring Everything Else✍️
At this stage its a good idea to install a universal and easily accessible switch to allow everything to be turned on and off at once. The switch I bought takes a standard kettle lead and is just slotted into a pre-drilled hole and screwed in place.
The next step is to chop the plug end off a cheap extension lead and wire it into the back of the on/off switch. This is where having a wire crimping set really comes in handy. If you don't have one its time to get the soldering iron out. There are plenty of guides online if you're not a pro at rewiring. The extension needs enough sockets to power the monitor, the Pi, the lighting and the speakers (optional).
Next thing is to get all the kit plugged in and organised with plastic twist ties to stop everything getting too chaotic. Gotta make sure all those wires are tidy!
Step 16: Lighting the Marquee✍️
I got the marquee graphic printed professionally onto reverse print backlit film paper, which is usually used with lightboxes. It has a plastic film on the back which diffuses the light as it passes through. I've seen a lot of people online printing their marquee graphics at home on normal printer paper and it seems to look okay done that way. Definitely an option if you want to avoid a trip to the local print shop.
Once printed, the graphic is then sandwiched between two sheets of clear perspex / plexiglass to hold it flat. These perspex sheets are cut to size and fixed inside the marquee box. The thickness of the perspex is not too important, so long as its not bendy. The sheet I used was about 3mm thick which was more than enough.
The cabinet is designed so that the marquee box and graphic are removable, to make it easy to swap out graphics or replace the lighting if necessary in future. Before putting the marquee box in place and screwing it down, I stuck down two strips of LEDs with hot glue and popped the wires through a predrilled hole on the surface. They can then be connected up to the power source we wired in the previous step.
It is common to use a small strip light for the marquee, which is fine, but we happened to have some LEDs lying around the house so we just used them. We figured they would be easier to install and give a more spread out light that wasn't so focussed in the middle.
Step 17: Access Hatch✍️
Almost done now!
Once all the wires are looking neat and tidy and the marquee box has been fixed into place, it's time to attach the access hatch / back door any way you see fit. For this step I cut a brass hinge down to size and screwed it straight into the back of the cabinet. I attached the hinge to the door half first and the cabinet half second. Its useful to stick some folded paper under the door to hold it at the right height while screwing the hinge in place, and to use a gimlet or nail to pre-mark the spots where the screws will go.
I also screwed a small piece of scrap wood on the inside of the frame to stop the door from angling into the cabinet itself. A small magnet hot glued onto this wood, and the appropriate spot on the inside of the door, gives it a nice snap-shut sort of feeling and stops the door from swinging open when the cabinet is carried around.
Lastly you can affix a small handle or drill a finger hole to allow the door to be easily opened. Not much more to it than that!
Step 18: Raspberry Pi Config✍️
Only thing left now is to get the hardware and software set up and working!
I won't go over the setup in too much detail as there are a lot of tutorials online for setting up emulation on the Raspberry Pi. As a complete newbie to the Pi and Linux in general, I found a few things a little confusing so I will outline the basics as best I can for anybody wanting to follow along:
- Download the latest RetroPie SD card image. This is a preconfigured setup for the Pi running EmulationStation, which is basically a pretty front end for navigating and launching games for multiple emulators (also included). You could install all the emulators manually but using the pre-made image saves a great many hours of work.
- Write the image to your SD card. You will need at least a 4GB card just to run RetroPie. Buy a bigger card as you will need space for the games and any future updates. I went for a 32GB card which is probably overkill - 8GB should be plenty. There are many ways to write SD card images, but the simplest options are to use third party utilities like Image Writer for Windows or Pi Filler for Mac. I'm assuming Linux users can do this step without my help.
- Set up the Raspberry Pi. If you haven't already, install your heatsink on the Pi. It literally just sticks onto the big chip in the middle. The heatsink is optional but will help the machine stay cool when playing games and allow the Pi to be overclocked further without crashing. Pop the SD card into the Pi, make sure you have a keyboard plugged in and power her up! It should boot straight into EmulationStation and ask you to configure the keyboard for the menus. Now's a good time to make sure all the hardware is working as expected.
- Download ROMs. You're on your own for this step. I should note that it is illegal to play game roms that you don't already own in physical form and I can't condone it. I have heard its possible to torrent large batches of roms but you'll have to ask google for more information on that. Moving on.
- Transfer games to the SD card. Do this over the network using something like CyberDuck. Game roms are stored in the appropriate folder on the Pi and will be read automatically by EmulationStation.
- Configure your controls. This is the part I found the most frustrating, mainly because I'm such a Linux noob. The physical controls need to be wired up before you can tackle this part. It involves figuring out the ports that each button is wired up to and then editing the controls config file to map the keys to the right buttons in-game. The websites linked further down cover this in a lot more detail.
- [Optional] Add a custom splash screen. I designed a splash screen to match the cabinet graphics. It really ties the room together!
Step 19: Finish Him!
There's a few things I would do differently but overall I'm very happy with how this turned out. It proves that a little thing like the Raspberry Pi can happily power a near full-size arcade machine. Please post your own DIY arcade projects in the comments, I would love to see them!
Special note: The author of the above article is rolfebox, Original shared link：https://www.instructables.com/2-Player-Bartop-Arcade-Machine-Powered-by-Pi/👩🎤👩🎤👩🎤