As a young boy I grew up playing some of the classic computers like the BBC, Atari ST and the Amiga 500, later moving onto consoles like the SNES and the PlayStation. While the modern generation of gaming consoles and high-end PC's provide a graphically rich experience, there is a charm about the older games that you don't tend to get these days. Maybe it's just nostalgia, but they offer something that is often forgotten in the current generation.. games built purely around gameplay! Some of the older games can be so much fun and so immersive to play, the visuals become secondary to the whole experience.
Wanting to find out if my fond memories of classic games were nothing more than rose tinted nostalgia or if they really were that awesome, I decided to build a Retro gaming console and revisit the past. I wasn't stopping there though, this is not only a Retro gaming system but also a Media player. To keep things as cheap, simple and as light-weight as possible I opted to build it with Raspberry Pi using RetroPie, Emulation Station and Kodi.
The whole thing is enclosed in one of the most iconic games consoles of all time, Nintendo's Entertainment System (NES). To put a little extra polish and shine on the overall look I decided to paint the enclosure in the colour scheme of the Marvel Comic Hero Iron Man, this lead to the system being dubbed the ARCade Reactor(did you see what I did there?). As an added bonus the system also supports the use of original NES controllers, this adds a real sense of authenticity to the whole retro gaming thing.
The ARCade Reactor Gaming and Media System has the following specification and features:
- RetroPie Multi-Platform gaming with support for over 20 systems
- Kodi (XBMC) Home Theater
- Modded NES enclosure for that retro look
- Marvel Iron Man themed paint scheme
- Raspberry Pi 3 model B (1.2Ghz x64 Quad-core ARM CPU, 1 Gb RAM)
- Pi's SDHC card slot extended to the main case exterior
- USB-2.0, Bluetooth, Ethernet, Wi-Fi and HDMI Connectivity
- 1 TB USB-2.0 Hard Disk Storage Drive
- DVD Optical Drive (slot-loading)
- Wireless (PS3 DualShock) Controller
- Support for original NES Controller
- Heat-Sinks and Cooling Fan to enable overclocking
The Project is broken down into 10 steps (note that steps 3, 6 and 10 contain optional tasks):
- Things You Will Need
- Preparing the Console Enclosure / Case
- Painting the Case (Optional)
- Installing and Configuring RetroPie
- Configuring Gamepad, Wi-Fi and Adding ROMS (Games)
- Installing Kodi, USB HDD, DVD and Wireless Controllers (Optional)
- Electronics and Wiring
- Assembly (Part 1)
- Assembly (Part 2)
- Tweaks and Customisation (Optional)
Step 1: Things You Will Need
The things you'll need to re-create this project are divided into three main categories: Tools, Hardware and Software. I've also included some Additional Resources for your reference as you may find them handy. While I will walk you through the build process step-by-step, this project assumes that you have a basic understanding of Electronics and the Raspberry Pi. If you need assistance with anything that is beyond the scope of this Instructable just ask, though I will include links to additional resources where applicable to help you along the way.
Some of the steps (such as painting, fitting a DVD drive, installing Kodi etc.) are optional, this will be clearly noted in the Instructable so you can skip them where appropriate.
- Rotary Tool (Dremel multi-purpose tool) with cutting bit fitted
- Hot-melt Glue Gun
- Soldering Iron (the use of a "helping-hand" or soldering vice is recommended)
- Wire Cutters
- Wire Strippers
- Metal file
- Forceps (not essential, but do come in handy)
- Crimp Tool for MTA/Header connectors (if using the crimp-type, solder type also work fine)
- RJ-45 Crimp Tool
- Drill Press (recommended) or Hand-Drill (if making the custom power switch circuit in Step 7)
- Various Screwdrivers
Hardware Summary (where specific electronic components are required, these will be noted under the relevant step)
- NES Console Enclosure / Case (I'm using the NES, but feel free to get creative and use an alternative)
- 3d Printed Parts (STL files provided in Step 8)
- Sony PS3 Controller (I'm using the Wireless PS3 Dual-Shock, but most USB or Bluetooth ones will work)
- Raspberry Pi 3 model B (you can use any model but the Pi 3 is the highest spec - at the time of writing)
- Heat sinks for the Pi
- USB-2 Hard Disk Drive (removed from its enclosure) (I'm using a Western Digital USB HDD)
- Slot-loading slim-line DVD drive (you'll need the laptop/notebook type with a SATA to USB interface adapter)
- 4x Port USB-2 Hub by Startech (removed from its enclosure)
- 5v 6A External power supply unit
- Power Switch Circuit (we'll be making our own in Step 7, but alternatives are available to buy here and here.The custom built power switch circuit utilises a PICAXE-08M2 Microcontroller and a 5V SPDT Relay
- RetroUSB NES to USB adapter board
- XLR connector type for HDMI, USB-2.0 and CAT5e
- 50mm 5v cooling fan (recommend the low-noise type, mounted with anti-vibration washers)
- Panel mount DC power socket rated at 5v / 6A (minimum) and ON/OFF Switch
- Left and Right angled short USB cables (these can be hard to source, I got mine from MiniInTheBox.com)
- MicroSD to SD card extender to present the card slot to the exterior
- Short HDMI cable
- Modified CAT5e cable (the necessary mods will be covered in Step 8)
- Win32 Disk Imager
- Putty (SSH Console)
- WinSCP or FileZilla
- DesignSpark PCB Editor
- PICAXE Editor
- RetroPie Image File
Additional Resources (for your reference)
Step 2: Preparing the Console Enclosure / Case
For this RetroPie project I'm using a NES console enclosure, if you want to use something else such as a SNES, a Nintendo 64 or something else then that's great too, but for the purpose of this Instructable everything will be based around the NES. I have one that's faulty and also has some discolouration on the case so it's perfect for this project, while NES' are far from rare, I would be reluctant to sacrifice one that's in good condition. Plus it will only upset the purists.
The enclosure itself is sturdy, spacious and pretty easy to take apart. If you need guidance to help strip it down I've included a video, you're basically looking to get it down to the bare shell. Be sure to safely store all the screws and fixings that you remove as they will all get used again later when we put it back together with the new bits inside.
To enable us to add modern connectivity to the NES (such as HDMI, USB etc.) we need to 3d print some new connector panels. The STL files for these are provided and the method for fixing them to the enclosure is outlined below. If you are not painting your enclosure try to colour match your 3d printed parts to the enclosure.
How to prepare the console enclosure:
- Strip down the enclosure, removing all of the internal components and retaining the screws and the power/reset button assembly for later.
- De-solder the blue header connector for the from the NES' mainboard (we'll also use this later)
- Using the new 3d printed panels, outline them using a marker pen as indicated by the photos
- Cut out the new rear panels using the rotary tool and the cutting bit
- Trim the cartridge supports from the top cover as indicated by the photo, again using the rotary tool
- Dry fit the new 3d printed panels to test the fit, adjust by filing the case if necessary
- Glue the new panels in place with Superglue, then use hot-melt glue to further secure them
- Let the glue set and harden/cool before moving to the next step
Don't worry if you cut your panel openings larger than necessary as we can always fill them with body filler later, but avoid making them too big as it won't be as secure when the new panels are glued in place.
Step 3: Painting the Case (Optional)
This step is optional and depends entirely on your personal preference. As my NES' case was in relatively poor condition (it had signs of discolouration caused by exposure to sunlight) I decided that I would paint it. I opted for an Iron Man theme so red and gold were the chosen colours. The painting process can be time consuming and a lot of effort is put into prepping, sanding, cleaning then waiting for things to dry etc. It's very much a task that requires patience, the more time and effort you put into the process now the better the end result will be, so don't be tempted to rush it.
Tip: While you're waiting for the paint to dry, why not move to the next step and make a start on installing RetroPie.
To complete the painting process you will need the items listed below, these are usually available from any good hardware store but you'll often find a better range and better value from a car parts store. I'm using rattle-can/spray paints, for best results use the ones designed for automotive use. Compressed-air powered automotive paints will yield much better results if you have access to the equipment, but a decent finish can be achieved using rattle-cans if you follow the right process and take care.
You will need
- Car body filler and applicator tool
- Varying grit levels of wet and dry sandpaper (I used 800, 1200 and 1500 grit paper)
- Sanding pad/block
- Powder free disposable gloves
- Good quality masking tape
- Clean lint-free cloths
- Tack cloths
- Paper towels for drying
- Bucket of water
- Acrylic based automotive paint (I used Metallic Gold and Radiant Red)
- Paint primer (I used a red primer and a white primer for the gold)
- Clear Lacquer (for top-coat)
- PPE (Gloves, goggles, air filter/breathing apparatus - paint fumes are dangerous, always take precautions!)
- Patience! (The painting can take up to a week to finish)
Stage 1: Prepping for Painting
With painting, preparation is everything. To begin with we need to clean the case and remove any dirt, grease and oil etc. Use warm soapy water and a lint-free cloth, then rinse in clean fresh water and dry thoroughly! Next, lightly sand the case with the coarsest of the sand papers, this will roughen up the surface to give the prime coat a good surface to adhere to. Once sanded, repeat the cleaning process and finish by rubbing down with a tack cloth. I'd recommend using disposable gloves at this stage to prevent the natural oils on your hands getting onto the clean surface. Cover any openings, vents, panel cut-aways and screw holes with masking tape.
Stage 2: The Prime Coat
This prime coat is done in 12 main steps:
- Apply the first coat of primer
- Wait 15 minutes
- Apply the second coat of primer
- Leave to dry for at least 24 hours
- Lightly sand with 1200 grit paper
- Clean with a damp cloth, thoroughly dry then wipe with a tack cloth
- Repeat the above for coats three and four
Stage 3: The Colour Coat
Just like the prime coat, the colour coat is done 12 steps, the final step is optional:
- Apply the first coat of colour
- Wait 15 minutes
- Apply the second coat of colour
- Leave to dry for at least 24 hours
- Lightly sand with 1200 grit paper, you can do this wet or dry but I like to wet sand it
- Clean with a damp cloth, thoroughly dry then wipe with a tack cloth
- Repeat the above for coats three and four, but switch to the finest of the sand papers
- At this stage you can consider using a rubbing compound to improve the finish. Though this is entirely optional, I would recommend it. For best results follow the instructions provided by the product.
Stage 4: The Clear Lacquer (Top Coat)
The lacquer process is done in 10 steps:
- Apply the first coat of clear lacquer
- Wait 15 minutes
- Apply the second coat of lacquer
- Leave to dry for at least 24 hours
- Lightly sand with the finest sand paper
- Clean with a damp cloth, thoroughly dry then wipe with a tack cloth
- Repeat steps 1-4, you should only need to finish with a final sanding if it feels rough to the touch
As well as painting the NES enclosure itself, the NES controller ports can also be painted. Avoid getting paint on the contacts and mask these areas well. I'd suggest only applying a couple of coats of the paint colour then finishing up with a single coat of lacquer. I also painted my PS3 controller using the paint method outlined above.
- Always follow the guidelines and instructions provided with the paint
- Shake can well for at least 2 minutes before painting
- Many thin coats are better than thick coats
- If the paint runs you are either spraying too close or applying too much in a given area
- Shake the can periodically during painting
- Avoid touching the paint when wet
- Take the necessary precautions when using solvents, paint can be harmful. Always read the label
- Get on YouTube and check out some spray painting tips, I like this tutorial by Dave Blake
Step 4: Installing and Configuring RetroPie
Tip: I'd recommend you install and configure RetroPie before you assemble it into the complete case so you can make sure everything works first.
Note: The Raspberry Pi 3 has a higher power demand than previous models. Powering via a USB hub or using a power supply intended for the Pi 2 or older probably won't be up the job, a current capacity of 2.5A is recommended.
Stage 1: Preparing the SD Card / Image
Before we begin you'll need to download and extract the latest version of the RetroPie SD-Card Image (at the time of writing this was v3.8.1). The image is available to download from RetroPie, be sure to download the correct one for your model Pi (I'm using the image for Raspberry Pi 2/3). If you have any trouble extracting the compressed file download and install WinRAR
Once you have your image file you need to write it to your SD card, if you've used a Raspberry Pi before you should already be familiar with this process, if not you can follow the official Raspberry Pi guide for your environment here: Windows, MacOS, Linux
Stage 2: Boot from the SD Card
Now you've got your SD card prepared with the RetroPie image you'll want to insert the SD card into your Pi and power it on. It should display the RetroPie splashscreen, then after a short delay it will automatically resize the SD cards file system before rebooting again, this time loading Emulation Station. Assuming you don't have one connected yet you should see a dialog box on screen that says "No Gamepads Detected". Make sure you have a keyboard connected then press F4 to quit, this will exit you to the command line / terminal.
Stage 3: Configure Raspbian
At the command line / terminal type sudo raspi-config to launch the Raspberry Pi Configuration Tool.
Note:Though not essential, it is a good idea idea to set your locale and region settings correctly.
Using the keyboard navigate down to 5 Internationalisation Options and press Enter
Select I1 Change Locale and make sure you set the locale to en_GB.UTF-8 UTF-8, if in another country set the locale accordingly. You will be prompted to select the locale again as the default locale in the next dialog box.
Navigate back to 5 Internationalisation Options and select I2 Change Timezone, select your geographical area followed by your city or region. In my case I am selecting Europe followed by London.
Navigate back to 5 Internationalisation Options, The Change Keyboard Layout option can be ignored, generally it defaults to Generic 105-key (Intl) PC, which is perfectly acceptable in most cases. Select I4 Change Wi-Fi Country, this enables you to select your Wi-Fi region to ensure that your Raspberry Pi's Wi-Fi complies with the channel regulations of your country, I am selecting GB Britain (UK).
Next select 9 Advanced Options. If you are experiencing black bars around your display you may need to enable Overscan, do this by selecting A1 Overscan and Select Yes when prompted. If your display is fine you can ignore this option.
Select 9 Advanced Options again and select A2 Hostname. Here you can specify the hostname as it will appear on your network, this comes in especially handy for identification purposes if you have more than one Raspberry Pi device on your network. The default hostname is retropie, I'm setting mine to ARCade Reactor.
Note: Hostnames are not case-sensitive and only the following characters are permitted A-Z, 0-9 and hyphen '-', the hostname cannot begin or end with a hyphen.
You can now TAB to the Finish option and select Yes to reboot now, this completes the RetroPie's basic set-up.
Note:You may have noticed the Overclock option under the config menu, this is beyond the scope of this Instructable. Some of the more demanding emulators (i.e. the N64 and the Dreamcast) will almost certainly require overclocking for some games to run more smoothly, I recommend you research the pros and cons of overclocking thoroughly before proceeding, heat sinks are also a must! My electronics and assembly instructions in Steps 7 - 9 allow for the addition of a chassis cooling fan to aid overclocking.
For a complete beginners guide to setting up RetroPie, check out this video from TechTipsta.
Step 5: Configuring Gamepad, Wi-Fi and Adding ROMS (Games)
If you haven't already you can plug-in your gamepad (if using a PS3 Wireless Bluetooth controller this is covered in the Step 6). If you're Pi was already switched on when you attached your gamepad and Emulation Station fails to recognise it, just press F4 to quit to the command line / terminal then type sudo reboot. Your Pi should then reboot and detect the gamepad. At this stage you need to follow the on-screen prompts to set up the button configuration, for help with configuring gamepads check out this GitHub page.
Note:You may need to install additional drivers to enable support for XBox controllers, there is a video tutorial here.
Once your gamepad is functional you should be able to navigate the Emulation Station menu, scroll to RetroPie and select it by pressing the A button. From the list of options select WIFI and do the following:
- Select Connect to WiFi network
- Select your WiFi network name from the list
- Enter your WiFi password / passphrase
- Select Ok
- Once connected it will return you to the Configure Wifi box but should display your IP and SSID above it
Adding ROMS (Games)
There are two main methods to add ROMS to RetroPie. One is over the network via a file transfer application such as WinSCP or FileZilla, the other is via the use of USB media such as a memory stick. Both of these methods are outlined below and links to additional information are also provided.
Network File Transfer Method
This allow you to connect to your Pi via a Secure (SSH) FTP connection using the following connection settings:
- Protocol: SFTP
- Hostname: As set in the previous step (alternatively use the Pi's IP address)
- Username and Password: By default this is pi and raspberry
Once connected drop your ROMS into the relevant system folder in the following path: ~/RetroPie/roms/system
Note:If the hostname will not resolve and you are unsure of the Pi's IP address you can find it by going to RetroPie Options from the main menu and selecting the "Show IP address" option.
USB Memory Stick Method
This allows you to transfer your ROMS via the use of a USB stick, but before this will work you need to do some prep work on the USB stick, as described below:
- Format your USB stick to the FAT32 file system
- Create a folder called retropie in the root of the USB stick
- Connect the USB stick to the Pi and wait for the status LED to stop flashing (it will create the folder structure automatically)
- Remove the USB stick from the Pi and connect it to your computer
- Add the roms to the relevant folders (i.e. retropie/roms/system)
- Plug the USB stick back into the Pi (it will transfer the ROMS from the USB stick to the Pi's SD card automatically)
- Wait for the USB stick status LED to stop flashing then refresh Emulation Station by choosing quit from the start menu
It is also possible to transfer ROMS by using the SMB (Samba) protocol or manually copying them from a USB stick with the RetroPie file manager. These methods as well as the ones outlined above are explained in more detail on the following GitHub page.
For a complete beginners guide to setting up RetroPie, check out this video from TechTipsta.
Step 6: Installing Kodi, USB HDD, DVD and Wireless Controllers (Optional)
If you would like to add media player functionality to your RetroPie I'd recommend installing Kodi (formerly XBMC). At the time of writing Kodi for RetroPie is considered to be experimental, but it seems to work fairly well.
To install, follow these steps (you require an active internet connection):
- From the Emulation Station menu navigate to RetroPie and enter RetroPie Setup
- Scroll down to 4 Experimental packages and select Ok
- Scroll down to 307 - Kodi - Open source home theatre software and select Ok then wait for the package to download/install
- Once complete you will be returned to RetroPie Setup, select Cancel a couple of times to return to the EmulationStation menu
- Restart EmulationStation and you'll find that Kodi is now listed under Ports
Adding Kodi to Emulation Station's menu
You may wish to launch Kodi from the Emulation Station menu without having to navigate to Ports first, to do this follow these instructions:
- Exit to the command line or connect via a SSH terminal such as Putty
- Open the ~RetroPie/roms path
- Type the following command mkdir kodi and press Enter to create a directory named kodi
- Type cd kodi and press enter to open the new directory
- Type the following command sudo nano kodi.sh and press enter to create and edit a new script
- Type the following into the nano text editor
#!/bin/bash "/opt/retropie/supplementary/runcommand/runcommand.sh" 0 _PORT_ kodi
Hit CTRL-X and then press Y to save and confirm changes then run the following command sudo chmod 777 /home/pi/RetroPie/roms/kodi/kodi.sh to set the permissions for the script file
7. Open the ~etc/emulationstation path, type sudo nano es_systems.cfg and press Enter. Input the following text into the editor at the end but before /systemList.
<system> <fullname>Kodi</fullname> <name>kodi</name> <path>~/RetroPie/roms/kodi</path> <extension>.sh .SH</extension> <command>%ROM%</command> <platform>kodi</platform> <theme>kodi</theme> </system>
Hit CTRL-X then Y to save and confirm then type sudo reboot to restart the Pi. Kodi should now be visible from the Emulation Station menu.
For further reference you can follow TechTipsta's YouTube tutorial for installing Kodi on RetroPie, this includes instructions for custom artwork and controller support.
USB HDD's and the Raspberry Pi
By default RetroPie and Kodi should auto-mount your USB HDD on start-up and it should be accessible, provided your drive is formatted to a supported file system (FAT32 is generally recommended for cross-platform support). If for any reason your USB HDD is not mounted automatically, follow this guide to Properly Mount USB Storage on Raspberry Pi.
USB Storage of Media for Kodi
You can save your media files (music, movies etc.) on your USB drive and access them via Kodi. You can either copy the files to your USB drive via your computer, or if you have already mounted your HDD inside the enclosure you can use SFTP file transfer tools such as WinSCP or FileZilla to upload the media files over the network.
Running ROMS from USB Storage
If you'd like to have your ROMS run from a USB drive instead of the SD card (can be handy if you have a small SD card) you can follow this guide from the RetroPie Github page.
CD / DVD Drives and the Raspberry Pi
The Raspberry Pi is (typically) compatible with USB CD/DVD (and Blu-Ray) drives, however compatibility does seem to vary between different makes and models. At the time of writing my DVD drive install is still at the experimental stage as I am having some difficulties with getting my particular drive (unknown make/model) to work.
Note:While playback of audio CD's and DVD-Video is well within the capability of the Pi (I'd recommend installing the MPEG-2 hardware codec license, more info on this here), Blu-Ray video playback though is a bridge too far.
Wireless (Bluetooth) Controllers
RetroPie supports the use of wireless gamepads and controllers that comply with the Bluetooth standard. This means that wireless Playstation 3 controllers work just fine, but wireless XBox controllers unfortunately do not (without the use of a third party wireless receiver, available here and here). For your reference I have provided a link to an XBox controller tutorial on YouTube by Herb Fargus.
To configure RetroPie to work with your wireless PS3 controller follow these steps:
- Browse to RetroPie in the EmulationStation menu
- Launch RetroPie Setup
- Select option 3 Setup / Configuration
- Select 811 Install/Pair PS3 controller
- Select 1 Install/Pair PS3 controller
- You now need to connect your PS3 controller via USB to the Pi
- Then disconnect the controller from the USB connection and press the PS button to connect via Bluetooth
- The PS3 controller should now be working wirelessly
Note:There is a known problem with the Bluetooth driver that's provided with some of the Raspbian builds that causes the Pi to crash and/or freeze peridocally. This problem typically affects the built-in Bluetooth adapter on the Pi 3 (third party adapters are unaffected). If you encounter this problem I have included the fix in Step 10.
Step 7: Electronics and Wiring
In order to power all of the components (Pi, USB hub, USB HDD etc.) from a single power input it is necessary to use a custom power supply and control board. I have designed a circuit / PCB that provides the following features:
- Utilises the original NES front power/reset switch panel and LED
- Provides 5v power output for up to four devices
- Integrates with the Raspberry Pi's GPIO to trigger clean shut-downs via a script
- Voltage divider circuit to convert PICAXE's 5v logic to the Pi's 3.3v logic
- A PICAXE Microcontroller manages the on/off control sequence with the following behaviour:
- LED indicates On / Standby / Off status
- LED flashes to indicate when powering on and shutting down
- Reset button to hard reset the system in case of a crash
You will need the following parts and components to build the TED Power Management Circuit (PMC):
- Printed PCB (layout files provided) or Vero/Stripboard
- PICAXE-08M2 Microcontroller
- 5v SPDT Relay
- 150Ω Resistor
- 1KΩ Resistor
- 5K6Ω Resistor
- 3x 10KΩ Resistors
- 1N4001 Flyback Diode
- BCX38C Darlington Transistor
- 100nf Capacitor
- Smoothing Capacitor (I used a 220uf as I had some lying around)
- 4x 3-pin MTA Connectors
- 2x 2-pin MTA Connectors
- Original NES header connector (de-soldered from NES mainboard)
To create your own PCB you will typically need the following:
- Etching Solution (Ferric Chloride)
- Plastic etching tray
- Copper PCB Board
- Permanent Waterproof Marker (fine tipped)
- Glossy Paper Tweezers (plastic)
- Lint-free cloth
- Sand paper or PCB polishing pad
- PCB cleaning solution
- Pure Acetone (or Acetone based nail polish remover)
Tip:If you've never made your own PCB before, ASCAS produced this great PCB Instructable a while ago, he was only 12 at the time and as he says in his own words "It is so easy even a 12 year old kid can make one!!!!". Take all the necessary safety precautions when using chemicals. Gloves and eye protection are a must. Always read the label and follow the product safety guidelines.
Assemble the Circuit
Assemble all of the components as indicated by the schematic and the PCB layout files. If you are printing your own PCB I have also provided a top layer layout for you, this will help you identify the correct location for the components when soldering.
The PICAXE Program
Before putting your microcontroller into the IC socket you'll want to program it with the code. If you are unfamiliar with the PICAXE here is the official Getting Started guide, there are also numerous I'bles that cover this subject. The code I'm using is shown below:
start0: low C.1 low C.2 low C.4 if pinC.3 = 0 then pwmout C.2,150,25 endif do pause 10 loop until pinC.3 = 1 pause 1000 PWMOUT C.2, OFF pause 250 high C.2 pause 500 low C.2 pause 250 high C.2 pause 500 low C.2 pause 250 high C.2 high C.1 pause 500 do pause 10 loop until pinC.3 = 0 high C.4 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 low C.2 pause 1000 high C.2 pause 1000 reset stop
To summarise, the code is performing the following steps:
- Sets all output pins to low (off)
- Checks if the power switch (Pin C3) is off then dims the status LED via PWM
- Loops until the power switch is on
- When the power switch is on it turns off PWM
- Flashes the LED three times and switches on the Relay (Pin C1)
- Loops until the power switch is turned off
- When the power switch is turned off it switches Pin C4 to high
- Pin C4 sends a 3.3v high signal to the Raspberry Pi to trigger shutdown script
- Flashes the LED at a slower rate ten times to indicate shutdown in progress
- Switches Pin C1 low to switch off the Relay
- Restarts the code
When the reset button is pushed it sends a high signal to Pin C5, this triggers the PICAXE to reset.
Note:The centre pin of the 3-pin MTA connectors are not soldered when using the custom PCB, this is due to the high risk of the centre pin bridging the adjoining pins due to the wider copper tracks. Be sure to test everything before hooking it up to your Raspberry Pi as you don't want to risk damaging anything if something goes wrong during the build.
Tip: If your copper PCB board is not supporting your required current capacity, consider using a board with a higher weight copper. Alternatively you can thicken the copper traces with solder to reduce the resistance.
Step 8: Assembly (Part 1)
Tip:Make sure that your Raspberry Pi is up and running and everything works before you go ahead with the internal assembly, there is nothing worse than having to take something apart again because you failed to discover a potential problem earlier in the build process.
The ARCade Reactor is designed to make use of the existing mounting posts located within the original NES enclosure via the use of custom designed 3d printed parts (included with the Instructable). These will securely mount the Pi, USB Hub, HDD, DVD, optional Cooling Fan and the various other cables and connectors. Secure the 3d printed mounts with the mounting screws you saved from Step 2.
As part of the process you will either need to make a modified CAT5/CAT5e ethernet cable or source a low-profile one, this is due to the tight space in which the connector needs to fit (as illustrated in the photos). To mod the cable you'll need a RJ45 crimping kit (crimp tool, CAT5 cable, stripper, RJ45 connector) and a hacksaw.
- With the hacksaw cut the RJ45 connector in half (approximately), being sure to keep the cable retention clip
- Now terminate the shortened RJ45 connector to the 568A or 568B wiring standards. You'll want the cable to be approximately 25-30cm long
Note:If you are unfamiliar with the process of terminating RJ45 connectors here is a guide provided by the Cable Organizer Learning Center.
You will also need to cut/drill the mounting holes for the DC power input socket and master power switch, the dimensions of these will vary depending on your choice of switch and socket. Follow their datasheets for the correct dimensions.
Assembling the Mounts and Components
The following screws and fixings are used as part of the assembly process:
- Original NES Pan-head Screws (saved from earlier)
- M3 Flat Washers
- M3 x 10mm Pan-head Screws
- M3 x 12mm Pan-head Screws
- M3 Nuts
- M3 x 20mm Pan-head Screws
- Anti-Vibration Washers
- M3 Nyloc Nuts
- M2 x 6mm Pan-head Screws
- M2 x 12mm Pan-head Screws
- M2 Washers
- M2 Nuts
- A2 (2.2mm) x 6.5mm Self-Tapping Pan-head Screws
- A2 (2.2mm) x 13mm Self-Tapping Pan-head Screws
- A2 (2.9mm) x 13mm Self-Tapping Countersunk Screws
- Self-adhesive cable tie mounting pads
- Cable ties
The included photos will guide you through the assembly process, the steps are also summarised below:
- Fix the XLR HDMI and CAT5e sockets on the rear with the M3 x 12mm screws and nuts
- Connect the modded RJ45 end of the ethernet cable
- Fix the XLR USB socket on the side with the M2 x 12mm screws and nuts
- Fix the DC power input socket and master power switch
- Fix the NES power/reset switch panel using the original NES screws
- Affix the self-adhesive cable tie mounting pads to the locations indicated in the photos
- Fix the USB HDD to the underside of the Mainboard mount using M3 x 10mm screws, the 3d printed spacers and anti-vibration washers
- If installing an optical drive fix the optical drive mount pillars and the mainboard front support pillar using the 2.9mm self-tapping screws
- Fix the Mainboard mount to the NES case using the original NES screws (you may find it easier to connect the HDD's USB cable and feed some of the other cables into place before you secure the mainboard mount in place)
- Connect the side mounted USB 2.0 port header cables
- Connect the HDMI cable and secure with cable ties
- Fix the USB hub mount to the NES case using the original NES screws
- Mount the Startech USB hub to the USB hub mount using its original screws (you will find it easier to connect the angled USB cables before securing the hub in place, the USB HDD and the side mounted USB 2.0 ports connect to the hub)
- Mount the Raspberry Pi to the Mainboard mount using the 2.2 x 13mm self-tapping screws (you may find it easier to connect the cables to the Raspberry Pi before securing it in place, refer to Assembly part 2:3)
Step 9: Assembly (Part 2)
- Fix the Power Management Circuit (PMC) mount (including extension piece) to the top of the USB hub mount using the longer of the original NES screws (the power management circuit mount is ventilated to enhance thermal cooling to the PCB in the event of overheating)
- Mount the PMC using a 2.2 x 6.5mm self-tapping screw (you'll need to drill the hole in the PCB for this)
- Connect the Power, HDMI, Ethernet cable and remaining USB cables to the Raspberry Pi
- Connect the PMC to the Pi's GPIO BCM pin 23 and ground (I terminated to an IDC connector)
- If using build the cooling fan assembly using the Cooling Fan Mount, the M3 x 20mm screws, nyloc nuts and anti-vibration washers, then fix to the NES case using the original NES screws
- If installing an optical drive fix the Optical Drive Mount to the support pillars using 2.9 x 13mm self-tapping screws (you may need to hold the support pillars to stop them rotating while fixing). M2 x 6mm screws and washers are used to mount the optical drive. (Don't screw in too tightly and only one screw is really necessary, you can adjust the height of the optical drive to suit by spacing out the mount from the pillars with anti-vibration washers, I've used 3x per pillar)
- Fix the MicroSD to SD card extended to the drive bezel on the top section of the case, this is fixed in place using superglue and secured further with hot-melt glue
- The NES controller ports can be slotted back into place (there is a note in Step 10 to enable these ports for use with original NES hardware, be sure to complete that step before fixing the top cover if you intend to use them!). The controller ports are secured in place via the original NES bezel piece and the original screws
- Plug-in the remaining power connectors to the PMC (i.e. Pi, USB hub, cooling fan, optical drive) and double check all other connections and wires are in place and secure
- If installing an optical drive the eject button and activity LED can be extended to the front bezel via some recycled PC cables and header pins / connectors
- Fit the optical drive by slotting it into place, the mounting screws should hold it in place without needing to tighten them, attach the USB and power cable
- The top cover can now be fitted into place. This step can get a little fiddly especially as you need to to connect the MicroSD extender to the Pi, but take care and be patient. It's a little awkward but it will fit, it's a lot easier if you have not installed the optional optical drive though
Step 10: Tweaks and Customisation (Optional)
In this final step we'll be covering some tweaks and customisations as well as bug fixes and adding some extra functionality.
Raspberry Pi 3 Integrated Bluetooth Compatibility Issue
As I briefly mentioned in Step 6 there is a known problem with the Pi version 3's integrated Bluetooth that can cause the Pi to crash or freeze peridocally. Fortunately there is a relatively straight forward fix to resolve this issue, just run these commands from the terminal / command line and it should resolve the issue:
sudo apt-get install rpi-update
sudo apt-get update && sudo apt-get upgrade
sudo sed -i 's/curl/curl -k/g' /usr/bin/rpi-update
sudo UPDATE_SELF=0 rpi-update 15ffab5493d74b12194e6bfc5bbb1c0f71140155
sudo dpkg -i pi-bluetooth_0.1.0_armhf.deb
Utilise the Original NES Controller Ports on the Raspberry Pi and RetroPie
If you really want to add some authenticity to your Retro gaming experience why not use an original gamepad? As I've built mine in the NES I decided to make use of the controller ports so you can play with an original NES controller. To achieve this I purchased a couple of NES RetroKits from RetroUSB.com, the small kit allows you to connect NES (and SNES) controllers via USB. Full assembly instructions are provided by RetroUSB.
Easily Change the Order of Player/Controller Number Assignment Without Modifying RetroArch Manually
I found that after I connected the RetroUSB adapters my primary controller (the PS3) got relegated to player 3. This meant I was not able to play most of my games with the PS3 controller anymore as they only recognised P1 and P2 (now assigned to the RetroUSB). RetroPie is largely based around RetroArch, and while this can be customised and modified it's not something I'm particularly familiar with, and to be honest I don't want to get too involved with it. I found a simple solution to the problem on GitHub, RetroPie Joystick Selection(formerly Input Selection). This neat little package integrates into RetroPie and allows you to assign your controllers to different player numbers with ease.
Playstation 3 Controller Mod
To keep up with the Iron Man theme of my ARCade Reactor I decided to paint my PS3 controller in the same radiant red as I painted the NES case. To do this simply take your PS3 controller apart and paint, (using my painting guide in Step 3 as a reference). I also replaced the PS button with an Iron Man Arc Reactor button, I got this from JMods.
RaspberryPi Shutdown Script - Integrates with the Custom Power Management Circuit (PMC) in Step 7
There may be occasions where you want to perform a clean shutdown of your Raspberry Pi without the need to do it from the user interface or SSH terminal. To achieve this I designed the PMC to include a 3.3v output to trigger a shutdown script on the Pi. Simply connect the PMC to the Pi's GPIO (I used BCM port 23 and ground). You'll then need to create the script and enable it to run as a process on the Pi, the steps are shown below.
Perform sudo nano /etc/arcade_off.sh to create and edit a new script file, then enter the following code:
#!/usr/bin/env python # Import RPi.GPIO and OS import RPi.GPIO as GPIO import os # Init GPIO Port GPIO.setmode(GPIO.BCM) # Set numbering convention to BCM GPIO GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set pin 23 as pull-down input GPIO.wait_for_edge(23, GPIO.RISING) # Wait for pull up on Pin 23 # Pin 23 pull-up action os.system('poweroff') # Performs shutdown
Hit CTRL-X and then Y to confirm and save, then perform sudo nano /etc/rc.local and add the following line at the bottom but before exit 0.
Scripts specified here will run on startup, the '&' specifies that this script will run as a background process.
Splashscreens displayed on start-up can be chosen from a list of pre-installed alternatives or a custom made one can be uploaded, video splashscreens are also supported. View the Splashscreen guide on RetroPie's GitHub.
Emulators within RetroPie
You'll find that some of the systems within RetroPie have the option of more than one emulator. While most systems will play happily with the default emulator you'll find that some of the more advanced ones (such as the Nintendo64) will require you to tweak the settings to get the best performance depending on the ROM you are trying to run. See the Supported Systems list on RetroPie's GitHub for more information.
Screen Size and Overscan
If you have black bars around your display or your display is being cropped, you may need to toggle overscan on or off. This can be configured using raspi-config.
Thanks for reading...
Hope you find this Instructable helpful, if you have any comments or queries just let me know.