Raspberry Pi powered arcade fun!

If you are a regular reader of The MagPi Magazine (and let’s be honest, why wouldn’t you be if you’re a Raspberry Pi fan?), you may have noticed that for five issues, there was a step-by-step guide on How To Build Your Own DIY Arcade Machine, which was written by yours truly! In fact, I called the build a RaspCade just because.

I have been a big gamer ever since my parents bought me the Nintendo Entertainment System back in nineteen-ninety-something, and if you have seen my Raspberry PiStation build, you’ll start to realise this too. And when I was younger, I was always fascinated by the lure of arcades – games like Teenage Mutant Hero (Ninja to my US readers) Turtles, The Simpsons, Street Fighter II, Captain Commando, Metal Slug etc. are just some games that I remember pumping money into whenever I had the chance.

As such, I’ve always wanted an arcade machine at home but I didn’t have the cash to be able to buy one. I was very close to taking the plunge and buying Pimoroni’s Picade, but I thought it might be fun to try and build my own – especially as I had lots of parts lying around that could be used to do just that! This is how my RaspCade was born.

Not another arcade build…

Yes, I hear the sighs. I know there are many Raspberry Pi arcade builds out there, but a lot of them I come across involve complex cabinet designs, or vast amounts of money to make it look professional. I wanted something that I could make myself, but also be able to share openly with other gamers and Raspberry Pi fans. As such, I decided to design my own arcade cabinet that could be laser cut by anybody – and rather than charge for the plans, made them free to download!

It took me a few attempts to get the RaspCade cabinet design just right, but I’m not saying it is perfect. However, as my plans are open source, you can customise them as you see fit! However, I’m pretty pleased with the outcome:

Open source RaspCade - a Raspberry Pi powered arcade machine that can be laser cut

My open source RaspCade cabinet designs can be downloaded and used for free!

 

Once you have the designs, you can use a laser cutting service to get your very own RaspCade arcade cabinet! I used the very helpful Just Add Sharks (UK based), and it cost me around £15 including delivery, which I thought was very reasonable! You can also use places like Ponoko (good for US based makers) too.

RetroPie

Now, it is not surprising to learn that I used the fantastic RetroPie on my RaspCade. It is very simple to install now, and also comes with an ever-growing wiki and support community, which is really helpful if you get stuck. I downloaded the SD card image from RetroPie, flashed it to my SD card and booted the Pi (Raspberry Pi 3 for the best bang for your buck) and I was almost good to go straight away. I needed to change the display resolution, tweak the audio output and configured the controls, but this is all simple to do. I won’t cover this here as the RetroPie wiki covers everything you need.

Custom boot screen

Build Your Own DIY RaspCade Arcade Machine

Why not use our custom RaspCade splash screen to complete the look?

There is no point doing all this work to use the standard boot screens used by RetroPie, so I decided to create my own to use instead. If you want to use them, please feel free as I’ve made them available to download for free as part of this build.

NeoPixel Arcade buttons

I wanted to make my RaspCade look a bit flashy, so I thought it might be cool to use LED’s to illuminate the buttons. However, I didn’t want to splash out on the standard illuminated arcade buttons and fancied making my own. My plan was to use some NeoPixels and integrate them within each arcade button using a custom 3D printed holder.  I was inspired by a post I read over on Adafruit, so I decided to give it a go for myself! Once I had the 3D printed parts (I used Hubs, and went with Steelmans 3D Print in the end and was really pleased with the results).

My Particle Photon powered, IoT NeoPixel RaspCade arcade buttons

My Particle Photon powered, IoT NeoPixel RaspCade arcade buttons

To power my NeoPixels (individual PCB versions for those wanting to give it a go), I used a Particle Photon as I wanted to be able to control the lights over the Internet, so this made a perfect option to make them IoT. I used my Particle Photon in combination with IFTTT and created various commands so that I could activate them via the IFTTT app on my iPhone. I would like to take this opportunity to thank the magnificent Frederick Vandenbosch too – he helped me tweak his code for his IoT Tower Light to create the code I ended up using in mine.

Here is the code I ended up using in my RaspCade:

#include "application.h"
#include "neopixel/neopixel.h"

SYSTEM_MODE(AUTOMATIC);

#define PIXEL_PIN D2
#define PIXEL_COUNT 6
#define PIXEL_TYPE WS2812
#define BRIGHTNESS 50

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

int animation = 0;

void setup()
{
  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show();
  
  Particle.subscribe("animation", myHandler);
}
void loop()
{
  switch (animation) 
  {
    case 0: //OFF
      strip.setPixelColor(0, strip.Color(0, 0, 0));
      strip.setPixelColor(1, strip.Color(0, 0, 0));
      strip.setPixelColor(2, strip.Color(0, 0, 0));
      strip.setPixelColor(3, strip.Color(0, 0, 0));
      strip.setPixelColor(4, strip.Color(0, 0, 0));
      strip.setPixelColor(5, strip.Color(0, 0, 0));
      break;
    case 1: //NES: All Red
      strip.setPixelColor(0, strip.Color(255, 0, 0));
      strip.setPixelColor(1, strip.Color(255, 0, 0));
      strip.setPixelColor(2, strip.Color(255, 0, 0));
      strip.setPixelColor(3, strip.Color(255, 0, 0));
      strip.setPixelColor(4, strip.Color(255, 0, 0));
      strip.setPixelColor(5, strip.Color(255, 0, 0));
      break;
    case 2: //Sega: Cyan and Blue
      strip.setPixelColor(0, strip.Color(0, 255, 255));
      strip.setPixelColor(1, strip.Color(0, 255, 255));
      strip.setPixelColor(2, strip.Color(0, 255, 255));
      strip.setPixelColor(3, strip.Color(0, 0, 255));
      strip.setPixelColor(4, strip.Color(0, 0, 255));
      strip.setPixelColor(5, strip.Color(0, 0, 255));
      break;
    case 3: //Raspberry Pi - Raspberry Red & Leaf Green
      strip.setPixelColor(0, strip.Color(165, 55, 56));
      strip.setPixelColor(1, strip.Color(165, 55, 56));
      strip.setPixelColor(2, strip.Color(165, 55, 56));
      strip.setPixelColor(3, strip.Color(118, 169, 40));
      strip.setPixelColor(4, strip.Color(118, 169, 40));
      strip.setPixelColor(5, strip.Color(118, 169, 40));
      break;
    case 4: //SNES UK: White, Blue, Green, Yellow, Red, White
      strip.setPixelColor(0, strip.Color(255, 255, 255));
      strip.setPixelColor(1, strip.Color(0, 0, 255));
      strip.setPixelColor(2, strip.Color(0, 255, 0));
      strip.setPixelColor(3, strip.Color(255, 255, 0));
      strip.setPixelColor(4, strip.Color(255, 0, 0));
      strip.setPixelColor(5, strip.Color(255, 255, 255));
      break;
    case 5: //SNES US: Light Purple & Dark Purple
      strip.setPixelColor(0, strip.Color(160, 100, 255));
      strip.setPixelColor(1, strip.Color(160, 100, 255));
      strip.setPixelColor(2, strip.Color(160, 100, 255));
      strip.setPixelColor(3, strip.Color(100, 0, 255));
      strip.setPixelColor(4, strip.Color(100, 0, 255));
      strip.setPixelColor(5, strip.Color(100, 0, 255));
      break;
    case 6: //Orange
      strip.setPixelColor(0, strip.Color(255, 125, 0));
      strip.setPixelColor(1, strip.Color(255, 125, 0));
      strip.setPixelColor(2, strip.Color(255, 125, 0));
      strip.setPixelColor(3, strip.Color(255, 125, 0));
      strip.setPixelColor(4, strip.Color(255, 125, 0));
      strip.setPixelColor(5, strip.Color(255, 125, 0));
      break;
    default: //NES: All Red
      strip.setPixelColor(0, strip.Color(255, 0, 0));
      strip.setPixelColor(1, strip.Color(255, 0, 0));
      strip.setPixelColor(2, strip.Color(255, 0, 0));
      strip.setPixelColor(3, strip.Color(255, 0, 0));
      strip.setPixelColor(4, strip.Color(255, 0, 0));
      strip.setPixelColor(5, strip.Color(255, 0, 0));
  }
  strip.show();
}

void myHandler(const char *event, const char *data) {
    animation = atoi(data);
}

You can use an Adafruit Trinket 5V too, but you just won’t be able to control them online, and there are some tweaks needed to the code but I won’t cover that here at the moment.

The MagPi Magazine

So, if you would like to follow the build step-by-step, then you should definitely check out issues 47 to 51 of The MagPi Magazine. All back issues are free to download, plus you can also check out other fantastic Raspberry Pi projects too and not just my RaspCade build!

However, if you would like to download just my RaspCade build and the 5 parts, then you can do just that! I have added my 5 parts into one PDF so that you can follow the build step-by-step.

So there we are! A DIY RaspCade – a Raspberry Pi powered arcade machine that you can make for yourself!