The project is built around a Raspberry Pi Zero computer, one of our 0.96" RGB OLED displays, an I2S class D audio amplifier and a few assorted odds and ends (buttons, navigation switch, Perma-Proto board, etc.).
Since this project doesn’t require a camera, I used a “V1” Pi Zero that I had on-hand. If you’re looking to create the very smallest possible thing, and don’t need a camera, be aware that the clip on the end of a newer “V1.3” Pi Zero protrudes a couple of millimeters past the board edge. Depending on your level of obsessiveness, you might need to remove that (destroying the connector and possibly the board) or specifically hunt down a V1 board (as if Pi Zeros were’t elusive enough).
Most of the connections for the display and audio amp must go to specific pins on the Pi; they rely on hardware features of the board and are not negotiable. Others like the controls could be routed elsewhere if needed.
Raspberry Pi Header |
Other Device |
+5V |
OLED + |
GND |
OLED G |
GPIO10 (MOSI) |
OLED SI (serial in) |
GPIO11 (SCLK) |
OLED CK (serial clock) |
GPIO8 (CE0) |
OLED OC (OLED chip select) |
GPIO5 |
OLED DC (data/command) |
GPIO6 |
OLED R (reset) |
+5V |
Amp Vin |
GND |
Amp GND |
GPIO19 |
Amp LRC (left/right clock) |
GPIO18 |
Amp BCLK (bit clock) |
GPIO21 |
Amp DIN (data in) |
Amp GAIN is tied to Amp Vin (6dB gain) |
|
GND |
Common pin on navigation switch and one leg of each button |
GPIO20 |
Opposite leg of 'A' button |
GPIO12 |
'B' button |
GPIO16 |
'Select' button |
GPIO7 |
'Start' button |
GPIO27 |
Nav switch up |
GPIO22 |
Nav switch left |
GPIO13 |
Nav switch down |
GPIO26 |
Nav switch right |
+3.3V |
LED Sequin + |
GND |
LED Sequin – |
Woo, that’s a lot of connections! Even following along with a GPIO reference card I botched a few wires and had to do some troubleshooting. If you mix up the button inputs, that can be easily fixed in software, but the screen and amp are very specific about the pins used.
The LED sequin is totally optional…just thought it would be a nice finishing touch to have a backlit marquee.
Please remember, this is not a kit or a how-to. The steps are lacking depth, and attempting something like this requires a lot of expensive tools and parts, prior experience with small project builds and Pi gaming specifically, and a willingness to improvise and/or fail repeatedly.
Using calipers, I measured each part and came up with a case idea. Rather than fully enclose everything, some elements (the Perma-Proto board holding the controls, plus the Raspberry Pi Zero board itself) would themselves become elements of the structure.
I chose to do this in 1/16" laser-cut acrylic, because when you have a laser cutter you stupidly think everything’s a job for laser-cut acrylic. To further economize on space, there would be no fasteners, everything would be glued.
This was a poor choice and please don’t ask for the file. If I woke up and it was Saturday again, Groundhog Day-style, 3D printing would have been much better. Takes more time to design up front, but way less time fighting with glue and wobbly bits.
Perma-Proto boards are the bee’s knees! They can be cut to size on a scroll saw, then the edges cleaned up and trimmed to a more precise size on a disc sander.
Two pins on the 5-way navigation switch do not lie on the regular 0.1" grid. It was necessary to drill extra holes between others and make some solder bridges.
Ignore the power bus lines here; some traces were cut on the back to achieve the necessary continuity (or not) to make each button work. This was tested with a multimeter and adjusted before further assembly.
Another thought was to make the entire case from more Perma-Proto boards carefully cut to shape. Cool, but time-consuming. Perhaps this is reasonable with something like an Othermill.
As a “farting around” project, the wiring, like the case design, wasn’t carefully plotted beforehand. All the wires were initially cut to a uniform 4" length and one end soldered to components, which were then moved around and each wire trimmed to a suitable length with a few millimeters slack, plus some extra to strip and tin.
Making matters more challenging was the discovery that I only had two colors of 26-gauge silicone-coated stranded wire on-hand. That’s no help…26 gauge is too fat for this cramped space, and more colors really do help for keeping track of things, and better match the photos to the wiring diagram. So I made do with some inferior 28-gauge non-silicone wire, using the thicker stuff for just the few power-related connections. The process required patience, tweezers and a good soldering iron.
If you’ve never used silicone-coated stranded wire before, I can’t recommend it highly enough! Super flexy. Even within Adafruit it’s developed something of a cult following. “Hey, have you tried this silicone wire?” “Eh, what’s the big deal? It’s just wire with…HOLY CRAP THIS STUFF IS MAGICAL!”
Extra bonus challenge: I’ve been shifting to using lead-free solder, and this project seemed a good opportunity to go all-in. I might take this thing to a Maker Faire or something, where kids would play with it and then go eat funnel cakes…lead-free just made good sense.
Lead-free soldering is a little more tricky, but nowhere near as dreadful as some would have you believe. Patience and a good hot iron, no big deal. I splurged on a refurbished Metcal iron several years back and have never once regretted the purchase. I’ve heard nothing but praise for Hakko’s stuff too. The patience part though, that’s something not for sale anywhere, you’ll have to cultivate that yourself.
Before enclosing everything, a dry run is imperative! I’d already set up the software (explained on the next page) on a micro SD card. Found in testing that I’d botched a few wires…mixed up the controls, and had the marquee LED + on a GPIO pin instead of +3.3V. Test, adjust and repeat as needed.
Notice the protective plastic cover is still on the OLED. This helps keep solder flux spatter and glue from messing up this most expensive component. It comes off later as the very last step.
Huh! It appears I didn’t get any photos of the case-gluing process. Well I can assure you it was a bad path and mostly consisted of a lot of swearing, do-overs, probably some crying, and having to hold pieces seemingly forever while the “five minute” epoxy cured (maybe it’s five minutes on like Venus or something), half of it on my fingers and probably rendering me sterile. Some kind of press-fit 3D-printed caselet would’ve been so much easier.
You’ll see there’s a tiny speaker wedged in there. By sheer dumb chance, it happened to align with a blank spot on the Pi board (near the logo) where an edge could be glued down without fear of shorting components or traces on the board.
The audio amp is glued to the “wall” of the case, at an angle. With all those wires fighting for space, the amplifier board protruded slightly from the bottom. Since there are no active electrical traces around the mounting holes, I just clipped the corner off the board.
The glue job is rough and pieces are badly aligned, but eventually it all stuck and stands on its own! A second pass with epoxy over the inside seams hopefully makes it strong enough for casual play.
Notice the screen was installed “vertically.” Could’ve gone either way, but there are a couple reasons I chose this orientation:
- Some of the most iconic games of the 1980s used vertically-mounted monitors. Following suit emphasizes the fact that these are the real deal, not cheap console ports designed for regular “horizontal” screens.
- The OLED breakout board is narrower on this axis, roughly matching the Raspberry Pi. Placing the screen the “wide” way would have required a larger case, working against the sheer tiny-ness goal.
Final dimensions:
- 67.2 mm (2.65") tall (with micro SD card installed)
- 33.6 mm (1.32") wide
- 35.8 mm (1.41") deep (back to tip of start/select buttons)
Could it go smaller? Undoubtedly! Other than clipping the corner off the audio amp board, these are all stock parts and no extreme measures were taken to further reduce their volume, Ben Heck-style. Creative placement of the Pi board at an angle might reduce the height. Slimmer buttons are easy to find. Smaller Linux boards will come along, or might already be out there. Maybe some of those super-hi-res smartwatch OLED screens will start trickling into the hobbyist market.
But is is practical? As I’ll explain a bit on the next page, the coarse resolution of the screen makes the games difficult to play (especially something like Donkey Kong, where climbing ladders requires aligning the character within a couple of pixels)…I suspect a lot of the “playing” is just muscle memory from past experience. Honestly the whole thing’s a bit gimmicky for the sake of smallness. Sharing it for a laugh.
One bit I’m extremely happy with though is the I2S audio amp. Even through a tiny 1" speaker, the sound is incredible! That’s an item I’ll definitely be using on future (and more sensibly-sized) emulator projects.
Page last edited September 13, 2016
Text editor powered by tinymce.