Arcade Picture Frame

The arcade picture frame is a Raspberry Pi based arcade emulator built into a picture frame.  I got this idea after dragging my previous project, the Guacamelee arcade cabinet, into the game room.  Arcade cabinets take up a lot of space.  I started thinking about how I could get an arcade machine to take less space, and get it to a part of the house not usually used for games.

So I thought about mounting it on the wall.  I did some research and found that box frames are a thing that exist.  I figured if I could find just the right TV, I could mount it in a box frame with a raspberry pi.  I originally hoped to have compartments on the sides for the controllers, so they would not be visible when not in use.  That proved to be beyond my woodworking skills.

Here are my original plans:

The first thing I needed was the correct TV.  It needed to be very thin.  It needed HDMI input for the Pi, and a powered USB port to power the Pi.  The plugs needed to lay flat, instead of being perpendicular to the back of the unit.  I found this Seki TV that had everything I needed on sale for about $100.

DSC_0003

Once I had the TV, I downloaded RetroPie (The web page is in my notes above) and “acquired” the games I wanted to install.

The biggest problem was what to do when not playing games.  I wanted it to display a picture, since that is what picture frames do.  I also wanted to have the picture to change occasionally, to prevent screen burn.  I do not know if screen burn is a problem on modern TVs, but better safe than sorry.

I eventually figured out that you can run a bash script from the DosBox menu.  So I created this script:

#!/bin/bash
joy2key -terminal -axis 0 0 0 0 -thresh 0 0 0 0 -buttons q q q q q q q q &
fbi /home/slideshow/*.* -a -noverbose -u -t 600
pkill joy2key
pkill joy2key.py

This script took quite a while to figure out.

Joy2key captures input from the control pads and converts it into keystrokes.  Because there will usually not be a keyboard connected to the Pi, I needed something to let the controllers break out of fbi.

Fbi displays the images.  The command above displays all images in directory /home/slideshow as a slideshow, changing the image every 10 minutes.

The two pkill commands kill joy2key, so it does not capture the controller inputs while you are playing games.

This script works well.  When you leave the slideshow it jumps around the menu a bit, but it is functional.  If anyone can get it to work better, I would love to know how.

Finally, I needed a frame.  The outer box is 3″ x 1″ pine boards (2.75″ x .75″ in reality.  Wood measurements are weird.)  I cut the with a miter box and attached them with framing nails.

DSC_0002

Then I used 1/4″ thick slats (intended for lattices for vines and such) on the face to give a lip that holds everything in. These are screwed down tight.  We do not want the front of the frame popping off and letting the expensive TV fall onto the floor.

DSC_0005

I used lots of wood glue to attach prefab molding for the decorative part of the frame.

DSC_0007

I stained the frame, beginning my deep and abiding hatred of wood stain.  Little mistakes look big with stain.

DSC_0014

I inserted the glass (plexiglass), the matte, and a frame of 3/4″ plywood that holds the TV in place.  All of this was secured with framing points.  Then the TV was added and secured with aluminum straps.

DSC_0020

The boards used to keep the TV from sliding are scrap left over from the Guacamelee cabinet.  That is why they have some odd angles.

The Raspberry Pi is mounted on plastic spacers.

DSC_0021

And spacers and wooden dowels are used to give access to the power and volume controls.  The nails in the dowels keep them from falling out or being pulled out.

DSC_0022

And that is it.  There are tons of little things I glossed over: holes for cords and to let sound out.  Bending wire hangers to hold the controllers.  Cutting the mattes.  Still, this gives an overview of the process.

The total price, including the Raspberry Pi, the TV, and buying wood several times due to cutting mistakes, was about $300.