Introduction: Leisure Suit Larry Arcade Machine Deluxe

About: My name is Bastiaan. I am 44 years old and one of my hobby's is designing and building stuff.

A few years ago, a colleague of mine made an Arcade machine. This thing looked very cool, but it was a table model. I wanted to make one of my own, but than a full-size one. This project went on the big pile of ToDo's. Now, a few years later, I actually started drawing my own version and shortly after that I begin to build it.

And now .... it's ready !

The drawing took me quite a lot of time because I wanted my drawing to be perfect. While building the machine itself, the drawing changed a few times so that my latest drawing is exactly like the final build of the actually machine.

I had a lot of fun building it. The only downside of my project is that it had cost me a lot (really a lot) more than I first thought. I could do it (a little) cheaper, but I wanted details. And nice stickers. (The stickers were the most expensive)

Supplies

Arcade Kit (Joysticks and Buttons)1€ 35,39AliExpresslink
MDF 18 mm 1220 x 24401€ 19,49Hornbachlink
MDF 18 mm 1220 x 24402€ 39,98Gammalink
Schijffrees set T-molding1€ 14,79ArcadeWinkel.nllink
T-molding 19mm lichtblauw per meter6€ 19,82ArcadeWinkel.nllink
Raspberry PI met 3A voeding + koeling1€ 87,79SOS Solutionslink
Vuren latten geschaafd 27x27 210cm6€ 21,54Gammalink
FLEXA MDF grondverf acryl wit 750 ml1€ 16,25Hornbachlink
Monitor 24"1€ 35,39BVA-Auctionslink
Lakroller RedFibre met beugel soft touch rolbreedte 25 cm1€ 14,95Hornbachlink
Lakset OK2€ 5,00Gammalink
Schuurpapier Gamma K1801€ 1,59Gammalink
Coin deur met mechanische muntproevers, 2 slots1€ 70,90ArcadeWinkel.nllink
Lamphouder muntproever2€ 4,78ArcadeWinkel.nllink
Sticker console1€ 14,36Drukland.nllink
OK schroef universeel platkop verzinkt 4.0x40 mm 200 stuks1€ 3,00Gammalink
Samsung EVO Plus 128GB micro SD geheugenkaart 100MB/s1€ 29,99dataio.nllink
3A Micro-USB via stopcontact1€ 13,59SOS Solutionslink
Stickers1€ 247,48Drukland.nllink
MDF 18 mm 610 x 1220 (monitorplaat waarvan 1 verkloot)2€ 16,98Gammalink
OK binnenlak zijdeglans 1L zwart1€ 10,00Gammalink
Spijkerband op Rol Verzinkt 20x1 mm - 10 Meter1€ 14,99Gammalink
Handgreep rond, open2€ 5,58ArcadeWinkel.nllink
Arcade slot laag model2€ 11,98ArcadeWinkel.nllink
LED premium 12 volt, rood2€ 1,82ArcadeWinkel.nllink
RJ45-aansluitdoos, cat.6, UP, gitzwart1€ 6,05Reichelt.nllink
USB 3.0 tafel-inbouwhub met 4 poorten1€ 18,21Reichelt.nllink
Inbouw-eurostekker met schakelaar, 10 A, 6,3 mm Faston1€ 1,45Reichelt.nllink
Raspberry Pi Shield - HiFiBerry MiniAMP1€ 19,83Reichelt.nllink
Draaipot. logaritmisch, 6mm, stereo 10 k-ohm1€ 4,06Reichelt.nllink
Draaiknop, 6mm-as, zonder streep, zonder kap1€ 1,37Reichelt.nllink
Afdekkap voor knop 14...1€ 0,24Reichelt.nllink
Moerafdekking voor KNOP 14...1€ 0,37Reichelt.nllink
LED lichtbalk 54cm 6w koppelbaar 6001m2€ 7,98Actionlink
bokwiel 75mm mx. 50kg4€ 4,76Actionlink
stekkerdoos+schakelaar 6voudig1€ 2,99Actionlink
Werckmann handnieter 4-14mm inc nietjes1€ 3,99Actionlink
Koppelplaat verzinkt 300x30x2 mm5€ 6,45Gammalink
Fischer spaanplaatschroeven1€ 1,69Actionlink
Dunlop zekeringenset1€ 1,99Actionlink
Pattex houtlijm1€ 1,99Actionlink

Step 1: Design

Designing this Arcade machine took me a lot of time. I started a design, changed it, changed it and changed it.
For designing I used Fusion 360 for the boards and Photoshop CC 2018 for the stickers.

The design (now) has every detail I wanted to create. My last (final) version I saved was version 8. Every time I put more and more details to it. Everything is measured in millimeters and everything fits exactly.

Step 2: Preparing (cutting) Boards

The straight boards are cut to the right size at Hornbach (a hardware store)
I could do it myself, but I realized it was much quicker to just hand them a note with measurements and let them do it. The advantages are the edges are nice and smooth. For the boards I used 18mm MDF and I was able to cut the most of the boards out of one 2440x1220x18 mm boards.

For the two sides I used another two separate boards of MDF 2440x1220x18 mm. I could get the two sides out of a single board, but because such a big board won't fit in my car, I had to cut them a little smaller so I could take them to the CNC machine I used. After I cut out the two sides, I milled a slot in the front sides of the boards using a hand router.

For the monitor board I used two times half of a board (1220x610x18). I say two times, because I messed up the first one...The monitor consists of an opening for the monitor and a little expansion for the monitor buttons. This expansion is to avoid the keys being pressed while in the frame. The plexiglass top for the console is cut out by a laser cutter. I used the same drawing for the console for both the CNC machine and the laser cutter so that I have two exactly the same pieces.

Total boards:
So, in total, I used three big boards of MDF (2440x1220x18) and two half boards of MDF (1220x610x18)

After having the boards cut to the right size, I used a CNC machine for the details. I used the CNC machine to cut the holes for the buttons, for the opening for the monitor and to cut out the sides in one piece.

To make an notch for the T-molding I used a router. This router can be precisely adjusted so that the distance is just right. I bought a disc cutter set that has exactly the right depth.
(https://www.arcadewinkel.nl/schijffrees-set-t-molding)

Step 3: Paint It Black

All the boards are painted black on one side. Except for the back board and the back door. Those are painted black on both sides. Before I painted the boards black, I painted it with a MDF primer. The reason I painted everything black on one side is to make the inside of the Arcade machine a little nicer.

The only thing I didn't paint are the beams and the absolute bottom. But, it might be nicer if you do paint these parts also. ;-)

Step 4: Making the Bottom

The bottom consists out of one board (444x600x18) and four beams of 50x50. I screwed beams onto bottom board with wood glue between the board and the beams.

Step 5: Paste Stickers and Attach T-molding

All the stickers I printed have about 4 centimeter of unused space at the edges. This is enough to bend the stickers around the 18mm thick boards and it makes nice straight edges. This is extremely difficult around the curves. At the curves we cut about one centimeter to the board.

Directly after putting the stickers on the (big) left and the right sides, we attach the T-molding to keep the stickers better in place. For the backside (inside) of the sideboards we use the residual waste from the stickers. This is because one centimeter of the backside (inside) is always visible later.

Step 6: Attaching Wooden Slats

The next step is to attach wooden slats to the boards. For the right measurement I used a couple of 3D printed spacers, with of course, the right measurement. The idea is that the boards are connected together using this slats.

At the front, I keep one centimeter of empty space from the head end and in the backside I put the boards exactly against the head end. In all the slats I drilled holes from top to bottom and from left to right.

Step 7: Make the Coin Selector Accept 50 EURO Cents

The coin selector I bought was initially for 50 dollar cents or tokens.
But I wanted them to accept 50 euro cents.

I fixed this by simply bending the two tabs on the coin selector to the inside.
And then test it until it's bend far enough to accept 50 euro cents.

On the picture there are plastic covers to make it smaller.
I removed them and just bend them with a pair of pliers.

Step 8: Putting It All Together

Now that we have all the boards ready with stickers and slats we can put everything together.

* Everything is screwed from the inside to avoid screws from being visible!
* Don't forget to put wood glue (almost) everywhere!
* Don't put wood glue on the monitor board in case the monitor breaks!

First, we screw the front board (with the opening for the coin slot) to the bottom we created earlier. To to this, lay the front board facing down, put wood glue on it and screw the bottom. The second step is screwing the two sideboards to the bottom and to the front board. (Don't forget the wood glue again!) To to this, lay the sides facing down. For extra strength we put a small board (ie. 600x100mm) on the slats on top of the sides. We now have a basis to continue. We can put the Arcade machine on its feet now and can continue to put the other boards.

The speakers are connected to a volume knob and to a Raspberry Pi Shield - HiFiBerry MiniAMP, so we can change the volume without using software.

Now that the Arcade machine is on its feet, we can attach the board above the front board, which we call the bottom console board. This board has nothing special, so just put wood glue and screw the bottom console board on the slats.

On the backside, I created a little board with the power socket, a 4-port external USB connector and a 2-port network socket. One of the network ports is connected to the Raspberry Pi and the other network port can be used for a NAS (Network Attached Storage) or an external USB disk with network connection.

Step 9: Wiring

The wiring is straight forward. All the wires for the button LED's go to the 5V+ and the 5V-
The buttons go to the correct place on the joystick interface.

The USB connection goes to one of the four USB connections on the Raspberry Pi.

I connected the wires for the coin selector on the SELECT connection.

Step 10: The Software

For the software I downloaded a 'pre-made' SD card with RetroPie already on it.
After putting the image on the SD-Card using Baleno Etcher, I turned on my Raspberry Pi and changed just a few minor details in the software.

----------------------------
Enable SSH and disable VNC:
Execute: sudo raspi-config
Choose Option 5: Interfacing Options --> P2 SSH --> Yes
Choose Option 5: Interfacing Options --> P3 VNC --> No
----------------------------
Changed /opt/retropie/configs/all/autostart.sh:
Put # in front of:
#/home/pi/scripts/themerandom.sh
#(sleep 10; mpg123 -Z /home/pi/RetroPie/roms/music/*.mp3 >/dev/null 2>&1) &
----------------------------
Sound configuration:
See internet: <a href="https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/raspberry-pi-usage"> https://learn.adafruit.com/adafruit-max98357-i2s-...</a>
----------------------------
My own splash screen:
Removed all /home/pi/RetroPie/splashscreens/*.mp4
and put my own .mp4
----------------------------
Splash screen sound:
Execute: sudo pico /opt/retropie/supplementary/splashscreen/asplashscreen.sh
change: omxplayer -o both -b --layer 10000 "$line"
to: omxplayer -o alsa -b --layer 10000 "$line"
----------------------------
Change themes:
Removed all files from: /etc/emulationstation/themes
Put my own themes
Execute: sudo chown -R root.root /etc/emulationstation/themes/*
----------------------------
Overscan (makes screen actually fit)
Changed in: /boot/config.txt
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=0
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
overscan_left=25
overscan_right=25
overscan_top=25
overscan_bottom=25
----------------------------
Background music:
Removed all files from: /home/pi/RetroPie/roms/music
Put my own MP3 there 
----------------------------
Update RetroPie:
Execute: sudo /home/pi/RetroPie-Setup/retropie_setup.sh
Choose: Option S: Update RetroPie-Setup script --> Yes
Choose: Option U: Update --> Yes --> OK --> OK --> Yes
----------------------------
Remove unwanted packages:
Execute: sudo apt remove --purge scratch2 minecraft-pi wolfram-engine sonic-pi dillo libreoffice libreoffice-avmedia-backend-gstreamer libreoffice-base libreoffice-base-core libreoffice-base-drivers libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-gtk libreoffice-gtk2 libreoffice-impress libreoffice-java-common libreoffice-math libreoffice-pi libreoffice-report-builder-bin libreoffice-sdbc-hsqldb libreoffice-style-galaxy libreoffice-systray libreoffice-writer squeak-vm squeak-plugins-scratch geany
----------------------------
AFTER UPDATE DO THIS AGAIN:
Splash screen sound:
Execute: sudo pico /opt/retropie/supplementary/splashscreen/asplashscreen.sh
change: omxplayer -o both -b --layer 10000 "$line"
to: omxplayer -o alsa -b --layer 10000 "$line"
----------------------------
AFTER UPDATE:
Execute: sudo systemctl daemon-reload
Execute: sudo systemctl enable asplashscreen.service
----------------------------
AFTER UPDATE:
edit /etc/splashscreen.list:
old:
/home/pi/RetroPie/splashscreens/PlayBoxPi.jpg
new:
/home/pi/RetroPie/splashscreens/YOUROWNVIDEO.MP4
----------------------------
COPY ROMS !
----------------------------
AFTER COPYING ROMS, UPDATE AGAIN!
Update RetroPie:
Execute: sudo /home/pi/RetroPie-Setup/retropie_setup.sh
Choose: Option S: Update RetroPie-Setup script --> Yes
Choose: Option U: Update --> Yes --> OK --> OK --> Yes
----------------------------
Disable IPv6:
Edit: /boot/cmdline.txt:
add: ipv6.disable=1
----------------------------
Edit /etc/samba/smb.conf
Add:
max xmit = 65535
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=65535 SO_RCVBUF=65535
read raw = yes
write raw = yes
max connections = 65535
max open files = 65535
----------------------------
Changed /etc/motd.dynamic to my own ASCII Art
----------------------------

Step 11: Voice Control (external Tools Needed)

For the voice control I used a combination of scripts and external tools.
Let me explain how I did it.

The external power plug is connected to one socket. This one socket has a WiFi power plug which is connected to a 5-port power plug. So if you turn off the WiFi power plug, everything goes off.

The WiFi power plug is added in an app called Smart Life with the name 'xxxarcadexxx' and the Smart Life app is added to my Google Assistant.

On a Windows machine which is always on (my server) I installed the application PoSH Server
This creates a website from which you can execute PowerShell scripts.
I added one script to this website, called 'shutdown-arcade.ps1'

The contents of this script is:


#variables<br>$command = 'sudo shutdown -h now'
$servername = '192.168.x.x' #Put your own Raspberry Pi address here
$username = 'pi' #Put your own Raspberry Pi username here
$password = 'kensentme' #Put your own Raspberry Pi password here
$plinkpath = 'C:\Program Files\PoSHServer\webroot\http\bin\'
<br>#Execute SSH command
Write-Host "Shutting down $servername"
&($plinkpath + "plink.exe") -pw $password $username@$servername $command
$ping = (Test-Connection $servername -Quiet -Count 1)
$pingcount = 1
Do
{
    Write-Host "Waiting for $servername to shutdown"
    Start-Sleep -Seconds 10
    $ping = (Test-Connection $servername -Quiet -Count 1)
    $pingcount += 1
}
Until ($ping -eq $False -or $pingcount -gt 10)
Write-Host "Shutting down power"
$response = Invoke-WebRequest -URI https://maker.ifttt.com/trigger/turnoffarcade/with/key/PUTYOURKEYHERE -UseBasicParsing

In the directory : "C:\Program Files\PoSHServer\webroot\http\bin" I copy the file 'plink.exe' (from PuTTY)

On the website https://ifttt.com/my_applets I created three applets:

  • The first one uses "Google Assistant" for THIS and a "Webhook" for THAT.
    The Google Assistant listens to "Turn off Larry" and executes the following URL:

    http://www.servername.com:8081/shutdown-arcade.ps1

  • The second one uses "Google Assistant" for THIS and "Smart Life" for THAT.
    The Google Assistant listens to "Turn on Larry" and turns off "xxxarcadexxx" within Smart Life.

  • The third one uses a "Webhook" for THIS and a "Smart Life" for THAT.
    The webhook listens to "turnoffarcade" and turns off "xxxarcade" within Smart Life.

This could possible be made easier, but this is how I did it.

Step 12: Final Result ; Play!

Raspberry Pi Contest 2020

First Prize in the
Raspberry Pi Contest 2020