Introduction: Bartop Mini Retro Arcade - Raspberry Pi and Customised Icade
"Approaching" middle age, wanting an excuse to play with a Raspberry Pi, and having great memories of 80s games (mainly spectrum, sega master system, neo geo, and Atari ST) i decided to build a mini arcade machine / retro emulator.
Hopefully some of the things i learnt and successes (as well as mistakes) i made along the way will help others as others helped me.
Step 1: The Kit
As a guide this is the kit i used and the sources but part of the fun is finding alternatives (e.g. for the screen you could also use an IPAD replacement screen and controller board ).
- Icade Cabinet - £29.99 at Amazon
- Raspberry Pi 2 - £28.94 at Amazon
- 8" 4:3 LCD screen and HDMI board - £45 from Ebay ( similar to this one except 8" and 4:3 )
- Micro SD card ( class 10 and at least 4GB) - £5
- Zero delay USB encoder PC to Joystick - £6.50
- USB speaker
- 6mm MDF ( 224mm x 200mm, 224x45mm, 224x500 mm)
- 3mm clear acrylic ( 224mm x 200mm and 224mm x 45mm)
- Black card (A4)
- HDMI lead
- Vinyl side and top stickers (optional)
- Black all surface paint (optional)
- Push button (optional )
Step 2: The Cabinet
First off the cabinet. I decided to use an Icade cabinet rather than build my own to save time and cost.
The Icade is a bartop retro arcade-style cabinet and bluetooth arcade joystick that is meant to be used with an Ipad. Sounds a great idea but there's hardly any games that support the Icade and there's no diy fun just plugging in an ipad :)
If you can't get hold of an Icade you could make similar with some 10mm MDF and some joystick parts (available from many online sellers including ebay).
Step 3: Strip the Cabinet
I didn't like the graphics on the Icade so i pealed off the front and top stickers, removed the side graphics (mine were quite brittle and came off in small pieces), sanded the sides lightly and then painted the side panels with one coat of black all surface paint.
Although i'm going to put vinyl graphics on the sides i didn't think they would stick too well to bare mdf hence the paint.
Step 4: The Joystick and Buttons
The Icade joystick comes attached to a bluetooth board. To connect to the pi (and be recognised easily by the emulators) you're better off with USB however.
I bought a "no delay usb joystick board", unplugged the bluetooth board and connected up the usb board. This is very easy to swap out as the connectors all just pull off/snap on.
The only gotcha is that there's about 16 screws to get into the joystick housing and 2 of them are security screws requiring a T8 center pin star security screwdriver bit ( i bought a set from Maplin for £5 ).
If you don't want to use USB (e.g. to save cost or save a usb port ) you could also connect up the joystick directly to the PI's GPIO board and use Adafruit's retrogame utility to map the joystick/button inputs to keys ( more on that later as i use it for the exit button ).
Step 5: The Screen Sandwich
The screen took the most thought - what size, landscape or portrait, resolution, how do i mount it, does it need perspex, what kind of bezel etc.
I initially ordered a Tontec 7" 16:9 screen with HDMI/VGA board off Amazon but didn't like the size or aspect ratio. A 9" 4:3 would be perfect but they are extremely rare/expensive currently ( unless you can find an hdmipi screen). In the end i bought a Tontec 8" 4:3 screen with HDMI/VGA board off Ebay which i'm very pleased with.
The screen is 6mm deep so i bought some 6mm MDF to make a housing for it and painted it black ( although this isn't necessary).
The screen is secured in place with two MDF battons on the back with the HDMI board screwed in place behind the screen. I bought some clear acrylic to cover the front and drilled four holes in the corners to bolt everything in place to form a sandwich including a "bezel" cut out of black card to hide the silver frame of the screen.
My first attempts at cutting the acrylic ended in disaster ( due to a blunt Stanley knife which couldn't even cut paper ). In the end i bought the acrylic cut to size and just drilled the holes myself.
FYI: Portrait or landscape is a personal choice and depends on what games you're likely to mainly play but i decided on landscape ( i also had some performance issues when i tried portrait due to the extra processing the pi has to do to rotate the output ).
Step 6: Speaker
I used a cheap spare USB speaker i already had that plugs straight into the PI and can charge off a usb cable.
Step 7: Back Panel
The Icade doesn't have a back panel as such and i didn't want to leave the wiring and Raspberry exposed so i created a panel out of the same 6mm MDF as the screen mount.
Rather than leave it blank i thought it should have some air/sound holes so i drew and printed out a space invader graphic, stuck it down with masking tape, and carefully drilled out the holes.
I drilled a few test holes on a spare piece of wood and found the back exploded after a few holes. To counter this i duck taped the reverse side too, put another piece of wood under the main piece of wood when drilling, and used 3 drill bits of increasing size.
Once drilled it had a very light sanding around the holes and a coat of paint (applied with a small roller).
Step 8: Connecting Up
Before screwing everything in place its worth connecting everything up to test its working.
This caused some considerable delays to the progress however but resulted in some new high scores :)
I (eventually) mounted the Pi inside, connected up the USB joystick, USB speaker, HDMI lead to the screen, front LED, and added an additional side "exit" push button.
The exit button is a simple bush button connected to pins 39 (ground) and 40 (GPIO21) on the Pi's GPIO connector.
I wanted to make the front LED light up when powered on so i connected this to pins 14 (Ground) and 16 (GPIO23).
I also plugged in a usb extender cable for when i want to connect up a second controller (e.g. a PS3 controller) for 2 players or a keyboard.
Step 9: The Marquee
For the marquee i used a 224mm by 45mm piece of perspex with the same size mdf behind it.
I drilled through both and bolted together to form another sandwich.
In the middle i've got a graphic i put together and got printed at Snappy Snaps for £3 ( it's £3 for a 9x6 so you can print 3 different designs on a page and then choose the one you like best - this worked out better value than printing on A4 ).
Step 10: The Side Art
I ordered the vinyl side art off ebay. I provided the sizes in a pdf template and received back some nice vinyl stickers.
To apply the stickers you have to line up the graphic and then tape down one side ( i used the long back edge) and use this as a hinge to take off the backing paper.
You can then use a credit card, working from the middle, to put the graphic in place whilst smoothing out the air to leave no bubbles.
This worked very well, however don't do what i did and use sellotape! This left a sticky mark on the first graphic i did which i've struggled to get off. Using masking tape worked much better on the 2nd one.
To get a neat trim i laid the cabinet on its side and used a Stanley knife (with new blade) to trim off any spare.
Step 11: The Raspberry PI (and RetroPi)
I used a Raspberry Pi 2 model B with RetroPi ( an image you can download to your SD card) which includes Emulation Station ( a graphical front end ) and a number of emulators.
Once connected its really just a case of mapping the joystick, buttons and the exit button in the appropriate emulators (and copying up the relevant roms for any games you own).
You may also need to set the screen resolution. For my 4:3 800x600 HDMI screen i edited /boot/config.txt to set the following:
hdmi_group=2
hdmi_mode=9
By default the N64 emulator sends sound out of the HDMI if HDMI is connected so i had to edit the following setting in /opt/retropie/configs/n64/mupen64plus.cfg to get sound out of the analog:
# Audio output to go to (0) Analogue jack, (1) HDMI
OUTPUT_PORT = 0
To get the exit button to emulate someone pressing the escape key i used Adafruit's retrogame utility and edited retrogame.c to add the following to the ioStandard table before the line which has "{ -1, -1 }}; END OF LIST"
{ 21, KEY_ESC },
I then compiled it (i.e. typed make), and made sure this started on boot by adding the following to /etc/rc.local:
echo "Starting Adafruit's retrogame utility to map gpio inputs to keyboard presses"
/home/pi/Adafruit-Retrogame/retrogame &
To get the front LED to light up via the GPIO pins i created a small Python script and saved it as /home/pi/arcade_led_on:
#!/usr/bin/env python2.7
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.OUT)
GPIO.output(16, True)
To get this to run on startup i edited /etc/rc.local again and added the following to the end:
echo "Turning on arcade LED via GPIO pin 16)"
/home/pi/arcade_led_on &
Step 12: Improvements
Potential improvements i'd like to make:
- Replace the joystick and buttons with something better quality. They work fine but the joystick gate isn't great, and the buttons are quite noisy and can result in an aching hand (more practice required!). If you are going to do this its probably worth making your own cabinet at the outset rather than using the Icade.
- Replace the mdf behind the marquee with another bit of perspex and add some form of lighting.
- Try and get one power supply to run off and a master on/off switch - currently the pi needs one and the screen needs one ( i tried running the screen off the PI's 5v output but it flickered on/off every few seconds).
...but they're all nice to haves - for a good while i'll just be playing some games :)
Hope you find some of this useful if you're thinking of trying similar.