26. June 2017
So, it’s no secret that I love retro gaming. I collect old game consoles, and (much to my girlfriends dismay) I have an entire closet in my living room filled with old games and the obligatory CRT TV to play them on.
A few years back, I made a full-sized arcade machine out of old wood my dad had laying around, an old Windows XP machine, and an old LCD monitor. It was….not very pretty, but it worked and I was proud of it. Since it’s creation, I’ve moved to a different city and found an apartment with my girlfriend. Suddenly my arcade machine felt out of place in our living room and I decided I would refurbish the big monstrosity into a tabletop arcade machine.
Since I have a limited array of tools, I needed an almost prebuild frame. I started researching and quickly found so-calledd “IKEA hacks” where IKEA furniture was refurbished to different uses than originally intended. I searched the IKEA webpage and eventually found the perfect furniture: the Bekvëm stool.
I purchased the stool in my local IKEA, went home and started my project. The first thing I did, was measuring the controls and drawing the layout of the buttons on the first step of the stool. Then I drilled the holes and inserted the buttons and joystick.
Next up, I connected all the wires of the buttons to the 2Player microcontroller circuit board that I got from a Chinese website. I found the diagram for the microcontroller via a quick Google search since it wasn’t included. Other microcontrollers most definitely have a different layout, but the same basic principle applies. All the buttons are connected by one of their legs via the same wire to “ground” on the microcontroller. The other leg of each button are then connected to button 1, button 2, button 3, and so on. The same is true for the joystick.
In my setup, I have a single 4-way joystick connected, 8 front facing buttons and a player 1 and player 2 select button. There are two reasons as to why I have a player 2 select button even though it’s a singleplayer machine. First, the retropi software that powers the machine makes you define a Select and Start button on boot. This two buttons act as exit when pressed at the same time in a game. Without these two buttons, you would have to turn of your Raspberry Pi everytime you wanted to play a different game, which isn’t optimal. The second reason for the player 2 button, is that I plan on making a separate arcade control panel in the future, which would connect to the Pi via USB in the side, and therefore enable two players to play on the machine. This is just a far-in-the-future project, but it’s good to prepare your project for future improvements.
Now it’s time to mount the Raspberry Pi. I have a model 3, but a model 2 or even a model 1 or Zero would have had enough power to run the software. I simply used some spare screws I had lying around to secure the Raspberry Pi to one of the legs of the machine.
When the Pi was secured, I went ahead and burned a copy of Retropi to the SD card. An extensive tutorial on how to download and install it can be found on retropis official webpage. It is recommended to have at leas a class 4 SD card with 8 GB of memory. If you plan to have a lot of ROMs from a lot of different consoles installed, I recommend getting a bigger SD card, since the ROMs are saved on the SD card itself and not the USB drive.
After connecting the Pi to a TV via HDMI and turning it on just to test if it boots correctly, I went ahead and found the monitor from my old arcade machine. The monitor works just fine, but it’s a little too wide for the chassis. Therefore it was necessary to rotate the display 180 degrees and hide away the excess screen underneath the control panel.
On the second image, the speakers are already installed, but more on that in a minute.
The screen is screwed in place at the top of the chassis and is held in place at the bottom of the chassis by using one of the wooden plates from the stool. The wooden plate is basically keeping the screen in place by forcing it not to move. I’ll explain later how I rotated the screen in the Pis config.txt file and made the Pi ignore the part of the screen that is hidden beneath the control panel.
The speakers that I had, fitted almost perfectly just next to the screen. I simply just screwed them in place onto the wooden legs of the stool and connected the 3.5mm jack stick to the Pi.
The monitor I use only has a DVI input, and since the Raspberry Pi 3 only has an HDMI port (and a DSI Display Port which could also be used, but would not be suitable for me) I had to get an adapter. Luckily DVI is a digital standard just like HDMI, and what that means for me is that a DVI-to-HDMI adaptor is typically cheaper than, for example, a VGA-to-HDMI adapter which needs a little circuitry to convert the analog VGA signal to a digital signal that HDMI can understand. A quick google search later, and I found the cheapest model I could find. I ordered it, and a few days later it arrived in the mail.
Now, as I mentioned earlier, the monitor is rotated and half of the screen is hidden beneath the control panel. In order to let the Pi know that it needs to rotate the video signal 180 degrees and ignore half of the screen, I inserted the micro SD card to into my computer – I choose to use insert the SD card directly into my computer instead of using SSH. The reason for this, is simply that I find it easier to do this way, though it would be possible to do via an SSH connection. If you would rather use an SSH connection, a great tutorial can be found here.
The SD card should be name boot. Locate it, and open the file explorer so that you can see all the files on the SD card.
Next up, locate the file config.txt and open it.
The file should look something like this:
Scroll to the bottom of the file and paste this line:
# Rotate display
You can alter the “1” to rotate the screen so it matches your setup.
Next up, locate this section in the config.txt file:
Overscan is a remnant of the CRT monitor screen days, where the electron beam creating the image could be manipulated to make shorter or longer scanlines. By uncommenting (deleting the “#”) the “overscan_bottom = 0” and replace the 0 with the number of pixels that is hidden underneath the controlpanel, you tell the Pi to ignore that number of pixels in the bottom of the screen. This may take a few tries, where you save the changes you made, put the SD card back into the Pi, boot it up and see if the image is as you want it to be. If it’s not, put the SD card back into your computer, make the necessary change, save and try again. When saving, you may get a popup message telling you that you cannot revert any changes made. Just hit okay. If you’re scared that you break any settings in the config.txt file, just make a copy of the file before you make any changes and save to your desktop. This way, if you make a change that you don’t like, and you can’t figure out what you did, you can just copy the old file into the new files place and all the original configurations will be back.
Now it’s time to connect everything, plug in the power, and boot up. Booting up may take a few minutes if you’re using the Raspberry Pi 1, but shouldn’t take long if you’re using a model 3. When the Retropi splash images have come and gone, and the “Emulation Station Loading” screen has shown itself, Retropi tells you to configure the inputs. Simply follow the onscreen instructions. These are simple and straight forward. A good advice is to map the player 1 and player 2 buttons to Start and Select respectively since these will act as Insert Coin and Start Game when playing an arcade game by default. All of these configurations can be changed later on and configured exactly as you want to, and the splash screens can also be altered to your liking. I won’t describe how to do this, as there are tons of tutorials on YouTube that explains how to do this. If changing the splashcreen and startup sequence is that important to you, I suggest watching this tutorial.
In order to actually play anything on the arcade machine, you need to install some ROMs. To do this, you just insert a USB drive into the Pi, boot it up, wait a few minutes, then insert the USB drive into your computer. You should see a folder named retropi. Navigate to retropi -> roms -> and then whatever system you want to emulate. In this case, I will drop a bunch of ROMs in the arcade folder. Then insert the same USB drive to the Pi again and turn it on. Now you should see a list of all the systems that you have installed your ROMs to.
I’m not going to link to any ROMs or where to find them for legal reasons. Here, as always, Google is your friend.
Congratulations, your IKEA tabletop arcademachine is now playable! Fire up a game, test out the controls, the sound, and if everything is working fine, you can now call yourself the proud owner of a homemade arcademachine.
The first and obvious improvement of this project would be to mount side plates and paint the machine. I plan to do this in the near future, but since my apartment isn’t nearly big enough to house a workshop filled with tools, I have to wait until I can borrow some equipment.
Another obvious improvement would be to install a coin acceptor. Two kinds of coin slots dominate the market: mechanical and electrical. Mechanical coin acceptor work by just sorting coins by their size, only accepting coins of the right size. These coin acceptors can easily be fooled and are mostly only used in old cabinets – in fact, I don’t even know if these kinds are produced anymore. The second kind of coin acceptor works by measuring the magnetic field produced by the coin when it’s in movement – leaving retrogaming and entering electromagnetic physics (which is an interesting subject on its own but is not so relevant here). By comparing this field to a reference field, the coin acceptor is able to determine if it’s a valid coin. If not, it gives it back to the user, if it is, it gives the player a life in the game. My plan is to build my own mechanical coin acceptor some time in the future – but again, that’s far of into the future.
So there you have it; how to build a tabletop arcademachine from an IKEA furniture and a Raspberry Pi.