I came across a video on the GBS Control upgrade project for the GBS8200 boards. I had been interested in the GBS8200 back when I was doing my Commodore 128 RGBi/CGA to RGB video adapter. I had went with a SCART to HDMI adapter, as at the time that looked to be a better solution. It seems that device puts in a lot of delay though. It is useful to get “something” out of old RGB devices onto a HDMI compatible display, but when doing something like playing games the delay introduced is bad. I had not previously seen anything on the GBS Control project. The reason I had not used it at the time, was the SCART was to HDMI, where the GBS8200 outputs to VGA. The GBS8200 was a bit questionable too as it wasn’t super well liked in some circles at least.
There is now the GBS Control project, which involves wiring in an ESP board to take over control of the board. This greatly reduces the delay introduced in the output. It accepts input from 15kHz (or 31kHz) RGB/HV (VGA), RGBS (RGB Sync often wired with SCART or 4 RCA jacks) and YUB (Component) and outputs to regular 31kHz VGA. There are DAC nonbuffered based VGA to HDMI adapters that are available very cheaply as well that are said to not introduce additional lag.
It has various features beyond near no lag being introduced. It has Scan Line emulation, various resolution outputs, downscaling video from higher resolution to lower resolution output. The controls are all onboard the ESP web interface, which you can use by using the default broadcast it does, or link it to your wifi network. It also lets adjusting position, size and various other things with the output.
In my case, I went with a compact case that was based on the build instructions I followed from a video by Voultar that introduced me to the project. With the case I used I don’t have the RGBS input accessible which is wired to a SCART port. It does seem though RGBS input is an option into the 15pin VGA style port with Sync on the HSync pin. HV means Horizontal and Vertical Sync, where RGBS just uses a single Combined Sync or CSync signal. The case turned out great, it is a near perfect fit.
I made a few changes compared to Voultar’s instructions. First, I did not add the resistor to the Sync line for the RGBS, as with it that affects the RGBHV input from what I read, so if I did do it. I would want to wire up an input option to switch between it being in place and disabled. On going over what that is about, I believe it is to be there when devices use TTL Sync a 5V Sync Signal instead of the 1V max Sync that RGBHV generally uses. The next change I made was when soldering in the ESP board I used angled header pins for the two ground connections, that provides a much sturdier connection between the two boards than a piece of copper wire or solder only. In most cases either just solder, or at least using a bit of wire will likely be just fine though. I like that if it gets dropped the pin headers will be a lot sturdier. I also connected the power for the frequency generator to a different capacitor, Voultar had misspoken what the polarity was in his video while wiring up the power, that let me wondering if he was wiring it correctly or not. I decided to then go with how the project instructions at gitub showed it wired in. Voultar’s wiring was a little shorter for the power, but it was also a little harder to get in at it with the soldering iron. For all of the power wiring I used heavier wire, and for the various other low power wiring I used solid core 30awg wrapping wire. I found that I had issues with the solder points on the two chips with the adjacent pins getting bridged, and had used some desoldering braid to get rid of the bridges. More flux would have likely helped me avoid bridging the pins. Voultar has certainly done that kind of thing far more than I have. Thankfully there are only 4 solder points to various chip legs. The capacitors were easier to stack than I expected and they turned out very well.
Mostly I want it to use the GBS Control with my RGBI to RGBS or RGB/HV converter project I posted previously for the Commodore 128 80 column RGBI (CGA) mode.
I want to make a 5V output port for the VGA to HDMI DAC adapter at some point. I may do an audio passthrough option going in the front and out the back to connect into the adapter as well. I had thought of a power switch, but I use power strips for my equipment and generally turn them off when not in use. I have thought of a power LED as well, but still not sure on that one either. There was a version of the case that included putting the VGA to HDMI DAC adapter in the case. That was setup to remove the VGA output though, which I didn’t like. I have a number of VGA monitors I like to use from time to time.
For my first test of the unit, I connected it to the VGA output of a laptop. It passed through the VGA signal to the VGA output just fine. I then connected my Commodore 128 and my Digital RGBI to Analog RGBS / RGB/HV adapter. I built that adapter with the GBS8200 board in mind, so while it is setup it as RGBS + Audio through to the SCART connector I have configuration jumpers on the board. I changed the jumpers to NOT put 5V to the one pin which was to be the SCART mode detection. I also changed the Audio to not go to the HD15/VGA type connector and instead go to the RCA jack on the side. I changed the jumper to RGB/HV mode where it bypasses the Sync combiner circuitry on my adapter and outputs H Sync and V Sync. When connecting it up it worked great, I just adjusted some settings in the web interface to see how that worked out. The Scan Lines look pretty nice on it. I did not have any 80 Column mode programs prepared to use on the Commodore 128 to check it out too much at this time though.
I ended up building a second Bartop Arcade. This one has a few changes compared to the first one. The cabinet is made with grey Melamine coated fiberboard. So it didn’t need painted. I also didn’t do the cutout of cabinet or the main assembly. The marquee top issue was addressed and cut to the proper angle. The Door was properly sized. The cabinet is assembled with Kreg Jig pocket screws and not corner blocks. For the fan the larger “speaker” pattern was used at the bottom of the door. Edge banding was used on the back of the cabinet instead of tmolding. The edge banding was used on the edges of the door and door opening, any of the board ends that weren’t covered with the Melamine coating. It makes it look very clean.
here you can see the lock placement was a bit different. I also used one of the spare 30mm buttons for the safe shutdown.
The monitor was specifically purchased for this build. It is a BenQ 24″ IPS Monitor Model GW2480. This monitor supports using a VESA mount, so this time it is mounted with the VESA bracket. That made it much cleaner inside as far as not having that big block in the way in the middle. This monitor is larger than the one in the first cabinet. It “just” fits. Some 24″ monitors do not fit, this one does as it is virtually bezel-less on the sides and top. I used the same techniques for the plexiglass bezel on the monitor, there was very little black on the sides with this one though.
The back of the control panel has a piece on it that the plexiglass panel slots into so it doesn’t flex there. You can just see part of that piece of white textured material there below the edge of the monitor, that is the part the plexiglass rests into the front and it is attached to the control panel board.For the Marquee I went with the same design, as well as the same speakers. I am also using the same type of Meanwell dual voltage power supply.
There are other changes on the inside, for this build I am using a Raspberry Pi 4 not a 3b+. The basic reason being the Pi 4 is the same price and a more powerful system. When I build the unit there wasn’t yet a supported build for the Pi 4 though. In the end the only features that wouldn’t work for me was the splash screen/video.
I did run the speakers to the audio jack on the Pi this time tough. I couldn’t do the audio from the HDMI off of the BenQ and get rid of the static. Running the audio off of the Monitor audio out in the last one had eliminated the noise from the shared power supply on the speaker and Pi, but this time with this monitor that didn’t work. I had to put in a ground loop isolator. It is hard to make out much of it, but it is sitting there at in the middle of the bundle of wires. It is a little unit that has what looks like “Design” on it it is actually “Besign” Ground Loop Noise Isolator available on Amazon for $8.99 usually. I have had a number of these little units, one being in my pi1541. Since putting the audio through the monitor out didn’t fix the ground loop, I went strait to the Pi’s audio jack, as the output on the monitor I believe was much lower making the speakers not as loud.
The Pi4 does get hotter, and requires a good cooling solution. I went with a heatsink style case with the 2 fans on it. This case keeps the Pi nice and cool, the fans are not very loud. It is attached to the bottom of the cabinet with a piece of Velcro.
Here is another view, just showing the fan mounted in. You can also see the the stopper block in the middle of where the door closes. I think the unit looks much nicer inside. You can’t see it any pictures I though to take, but the controllers use a different pc board design. The ones I have used before are the kind with a header for a permanently attached usb cable, these have the usb port and use standard usb a to b cables. The order of the buttons is different. So it took me a little while to sort out how to wire these in the exact same order as my other cabinet and usb arcade stick. Having everything wired the same lets me use the usb arcade stick I had made as a third player controller. I also can have a single Retropie image for any cabinet without having to reconfigure the controllers. My Pi3 SD card is not compatible with the Pi4 though. I used alternate instructions on getting a new image setup with the Pi4. I built this back in the end of January, but they have since released a new version with “beta” support for the Pi4. The game scraper has not been working on either machine, but the update is listed to have fixed that. To set this one up, I pulled game info and images from another Retropi install that I have.
Here you can see how narrow that black border is along the sides. The larger screen goes nearly to the edge on this build. It looks like I still had the tape on the speaker grills as the silicone that I used to install them was still curing.
Here you can see a better view of the Marquee as the unit is powered off. The marquee is the same design and print that I made for the first one printed on the inkjet printer. This marquee is slightly shorter, that is why the Atari is about to get cut off in the trim pieces. I don’t think I went over the trim pieces in the last build, they are cut from some angled vinyl window trim pieces I had left over. They go back in between the mdf and aluminum pan to hold them in, and have a short lip that goes up and holds in the plexiglass.
The other changes with it are that I ended up doing a 3d printed customized volume knob for the speakers. The knob is nothing special, it was off of Thingiverse, so that I had the proper shape and fitting, I then stretched it in Tinkercad to be tall enough. It did have a bit that stuck out to denote the position, I removed most of that, as there really is not a relative marking on the cabinet. I did it in white so it would not stand out too much. I also ended up designing and printing out some speaker covers on my 3d printer. They are nothing fancy, and are held in with some clear silicone in the openings. With the first one, I used the 2″ desk insert pieces with the fabric, I didn’t have any fabric or 2″ desk grommet inserts.
The Melamine coating saved a lot of work. The draw back being it is a very thin coating and brittle. It is easy to chip out and not much can be done to fix it that I know of anyways. The fiber board in it is coarse board not the fine cardboard like consistency of the MDF, which I think may make it lighter. Tmolding is just very slightly undersized, this exposed some of the unfinished edge of the board. With the MDF black cabinet, I had paint on the edge although not as smooth or well coated as the other surfaces, so that is more hidden on it. If I had realized that, I would have painted the edge of the board before putting on the tmolding or had the edge banding put on it all around. Overall the cabinet is lighter, I think partly the coarser board rather than the MDF, also the lack of a base on the monitor as well as no blocking to build that up. The monitor itself may be lighter even though it is a bit larger. Then there is the lack of corner blocking that may very well add up overall.
It is certainly different looking than the first cabinet. I like it though.
If you are interested and have not seen the other Bartop cabinet posts I do go into more detail there. This just notes many of the differences on this build. I have also posted about an AirMouse project that I made to use as a Zapper replacement for Duck Hunt.
Since I built my Bartop Arcade I have been wanting to play Duck Hunt. I knew the original Light Gun could not work with the Raspberry Pi on RetroPie. I came across that you can use a mouse, which wouldn’t be fun. I knew the Arduino Pro Micro (and a couple others) could emulate a Keyboard or Mouse. There was a video about a year ago on the Element 14 Presents Youtube channel “NES Zapper on Retropie”. It is the same concept with a little different components. The Pro Micro board is a cheaper option than the board he used there. The boards based on the ATmega32U4 have a built in USB inferface on the ATmega chip, where the more common Uno Nano, and Pro Mini do not support being used in this way.
Using that as the base idea, I found various info on making an Air Mouse using a GY-521/MPU-6050 module attached to the Pro Micro board. I had found a video by “Asiq’s Theory” on Youtube with a basic Air Mouse using this setup along with code. I can no longer find the channel or video though.
I didn’t have either the GY-521/MPU-6050 board or a Arduino Pro Micro so I had to get them in to try this project out. I have plenty of Arduino Unos and Nanos around, but I hadn’t purchased any Pro Micros. The boards are similar but I usually use an Uno for prototyping then I can directly do that to a Nano without any code changes, where the Pro Micro with the different ATmega model is slightly different as well as slightly more expensive. I had been wanting some Pro Micro boards for keyboard projects in the past, but I never got into anything with them to this point. Once they arrived I took built it up on breadboard to test operation.
I ended up looking for a decent 3d model to use as a light gun model. I couldn’t find something that I could print reasonably for the amount of effort I wanted to put into this project. Really I don’t see this getting much use, mostly a little Duck Hunt now and then, maybe a few other games. I did end up finding a model I could use as a basis that had a completely different intended use. https://www.thingiverse.com/thing:2560577 I can print it as two parts now without any support. It feels pretty good to hold it. I went with some larger buttons I had in my stock with snap on caps.
I did my initial modifications included taking away parts from the model and slicing it in half. I also cut an opening for the usb cable as well as areas inside to hold the electronics. I did that work in Tinkercad. It works well enough for modifying things, but I wouldn’t want to use it to start it from scratch. I am looking for another program to use that I can get familiar enough to make items from scratch though. I first made a blue printed prototype half. It worked out fairly well, the Pro Micro fit in the area I made for it and the MPU-6050 board fit great as well. I put the 6050 forward in the gun expecting better readings of the motion, I am not sure if it makes much difference. That first half is basically a hollow shell, then I had to go on and make the other half “hold” everything. For the buttons I used my calipers to measure the button dimensions and built a placeholder model that I was able to use to give proper placement in the frame. It let me build up the back support and I slightly over sized the button “caps” so I could use them as holes to cut into the model. I also made a mock up of the MPU-6050 board so I could model in posts to hold it in place. I cut in recessed screw holes in the right side as well. For the prototype gun also had 3 opens in the shell that were from the original model that I then had to fill in so I printed them as extensions off of the right side on it. The screws I used used pointed screws to go into the left side making holes as I put them into it. That is holding that prototype together quite well so far.
After the first one was done, I decided I would make another for the second cabinet in Grey. For this one I reworked the left side with the holes filled in. I also setup to put in threaded inserts into it. This was the first time I used them, and I wasn’t sure what size to make the holes. They went in, but not very well and I ended up giving them more support and hold with glue so they hopefully won’t pull out. Otherwise the inserts are working well. They are very cheap and not well made though. For the Grey gun I tried to line up the usb cable coming in more to the center of the Pro Micro holding area. I placed it in a cut out to hold a zip tie as strain relief in the cord area. I didn’t make enough room for the “head” of the zip tie though, so when I put it in I cut out a smaller square deeper into the shell so that it would slot the whole way in and I could properly close the gun. It worked out very well. Still I have had to make my own custom cables to get enough room in there for the cable and the Pro Micro. I may rework the model a bit more to see if I can get a standard MicroUSB cable inside instead of soldering up a minimal one of my own.
The electronics are mostly the Pro Micro and MPU-6050 board. The additions are the two momentary switches with pull down resistors wired to ground to prevent false presses. As an added feature I put in a green 5mm LED with an appropriate current limiting resistor in the tip that glows when pressing the trigger button. The device is a motion sensitive mouse using the accelerometer feature of the GY-521/MPU-6050 module. The Trigger button is the Left Mouse Button, and the other button is the Right Mouse button. So it isn’t like the old Light Gun where the game knows where the gun is pointing. It is based on relative motion, and so Duck Hunt has an onscreen cursor. It isn’t the same, but it still is fun. Those Ducks are tricky even with a cursor. To keep the gun relatively lined up, between rounds I point the gun to the upper right corner of the screen making sure the cursor has moved the whole way up there.
For the base code and initial wiring I used info from a post and YouTube video by “Asiq’s Theory”. I think it was under 50 lines of code. It was about the bare minimum to get one of these MPU-6050s working and that was very helpful to me to break down what changes I needed to make.
The exact code for one gun doesn’t work for the second one as each MPU-6050s seems to be slightly different. That is as far as “standing still” status. If that is wrong, then the cursor will constantly drift in either up or down or left or right. So a couple numbers are changed to kill the drift. I think for the one I had to do a +3 to the X (which is left/right) and the other a +4.
Asiq’s code had been based on a different orientation of the MPU module, so I adjusted for that and the code also included pauses and would freeze the cursor when pressing the button. It made it pretty good for an air mouse on a computer, but bad for tracking Ducks on the screen. This means these are not very good mice,
Complete PrototypeComplete Second Revision
The Air Mouse can be pulled into about any pc and used, but as it is constantly tracking the action of pressing the buttons tends to move the cursor even if you are quite careful. You could make a more proper Air Mouse with the same components and a bit different code on the Arduino board. I have thought of making it so that if one of the buttons was held down as it was plugged in that it would make it behave differently. Still this is was to be a relatively quick project that I don’t expect to use all that heavily.
Parts:
This project uses an Arduino Pro Micro and a GY-521 Accelerometer Gyroscope Module. There are two buttons with 10k pull down resistors on them. There is also a single LED with a 1k Resistor to limit the current on it. Those bits of information are on the Code below as to what they are and what pins they goto. The resistor values aren’t critical. You could use 20k for the pull downs and possibly higher, you could use something a bit lower than 10k for the pull downs but the lower you go the more current that is drawn when pressing the button. For the LED resistor you can go as low as 330 Ohm for the LED and be safe with most any standard LED, I also commonly use 1.5k and sometimes higher for LED current limiting resistors.
LED, hopefully you have a couple, or you can pick them up on Amazon etc too.
All links are current as of posting this in 2/4/23 none are affiliate links or anything.
Below is the code for the Arduino Pro Micro Line 78 and 79 are where the drift adjustment numbers are Currently the “+7” on Line 78 and the “-1” on 79. I am referencing “Test code” that Ashiq mentioned, again I can’t find that source to get it. I guess Ashiq’s video was deleted or channel on Youtube or something, if someone finds it let me know so I can reference it properly. That code would return numbers from what are the gx and gz values. Using those values as a starting point, I guess I had something around a constant 400 and 100 respectively out of the 6050. The point of Line 78 and 79 are to get us a result of 0 if the Air Mouse is not in motion. Changing the divide by 150 will change the speed at which the mouse will track and possibly throw off your adjustment values at the end by a number or two. You may notice the Serial.print at the end there, that returns the vx and vy values that are created on line 78 and 79. So if you open the Arduino (or other) serial monitor set to the 9600 and to the serial port the Pro Micro is showing up as and look at those numbers you can use that as your Test code to get an idea of what changes you need to make be it to the 400 or 100 or the minor fine tuning numbers at the end of those lines. The goal is to get the values to 0 when the gun is not being moved. If you make the “dead zone” area to large you can’t make fine movements, which makes aiming even more difficult. These motions are relative, and not to “scale”, so at the start of a round you point at the screen, but to get the cursor to move the way you want you likely end up pointing in a very different place by the end. You can quickly move to aim at the center again and over correct to get the cursor more inline with where you are pointing. It is hard to describe. I enjoy it for a few rounds of Duck Hunt, for longer round games it may not be as much fun. I don’t know for sure as I haven’t played other games with it to this point.
Air Mouse Code for the Pro Micro is below:
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>
/*
Name: Prototype Arduino Pro Micro AirMouse
Author: Markeno
Created: 3/7/2020
Version .99
Based on a sketch posted by "Asiq's Theory".
Feature: USB 2 Button AirMouse for RetroPie Gun
+-----+
+------------| USB |-------------+
| +-----+ |
D1 | [ ]1/TX/INT3 RAW[X] |
D0 | [ ]0/RX/INT2 GND[X] |
| [ ]GND RST[ ] |
| [ ]GND VCC[X] |
SDA | [X]2/INT1 ___ 21[ ] | A3
SCL |~[X]3/INT0 / \ 20[ ] | A2
A6 | [X]4 / PRO \ 19[ ] | A1
|~[X]5 \Micro/ 18[ ] | A0
A7 |~[x]6 \___/ SCLK/15[ ] |
| [ ]7/INT6 MISO/14[ ] |
A8 | [ ]8 MOSI/16[ ]~|
A9 |~[ ]9 SS/10[ ]~| A10
| |
+--------------------------------+
Based on: http://busyducks.com/ascii-art-arduinos
Gy521 2=SDA 3=SCL, RAW to GY521 VCC in (didn't want to work from the PRO Micro VCC pin), GND to GND
4 Left Mouse Button, 10k Pulldown to Ground, press to VCC
5 Right Mouse Button, 10k Pulldown to Ground, press to VCC
6 Additional Wire, for an LED in the tip when the main trigger was pressed.
*/
MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;//Variable for the Accel and Gyro Data
int vx, vy;// X and Y axis variables
const int button1 = 4; //For Left Mouse Button
const int button2 = 5; //For Right Mouse Button
const int fled1 = 6; // For Tip LED
int responseDelay = 10;
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time Button was updated
// constants won't change:
const long interval = 100; // interval at which to change button states (milliseconds)
// Variables will change:
int btn1State = LOW; // ledState used to set the LED
int btn2State = LOW; // ledState used to set the LED
void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(fled1, OUTPUT);
Serial.begin(9600);
Wire.begin();
Mouse.begin();
mpu.initialize();
if (!mpu.testConnection()) {
while (1);
}
}
void loop() {
//Get the Acel and Gyro Data as 6 values
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
vx = ((gx - 400) / 150)+7 ; // (Grey Gun +3) (Blue Gun +4)"-400" because the X-Axis Left/Right of gyroscope give values about -400 while it's not moving. Change this value if you get something different using the TEST code, checking if there are values far from zero. "+3" added due to value around -3..
vy = (-(gz - 100) / 150)-1 ; // (Grey Gun 0) (Blue Gun -1)"- 100" same here for the Y-Axis Up/Down. may need to "-1" "+1" etc due to some drift still.
vx = vx / 2;
vy = vy /2;
//Create a small -1,0,1 DeadZone for the Y-Axis
if (vy>=-1 && vy <= 1)
{
vy=0;
}
//Create a small -1,0,1 DeadZone for the X-Axis
if (vx>=-1 && vx <= 1)
{
vx=0;
}
int buttonState1 = digitalRead(button1);
int buttonState2 = digitalRead(button2);
// check to see if it's time to blink the LED; that is, if the difference
// between the current time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
if (buttonState1 != btn1State) {
if (buttonState1 == HIGH) {
Mouse.press(MOUSE_LEFT); //5
digitalWrite(fled1,1);// Light LED
}
else
{
Mouse.release(MOUSE_LEFT);
digitalWrite(fled1,0);// Light LED Off
}
btn1State = buttonState1;
}
if (buttonState2 != btn2State) {
if (buttonState2 == HIGH) {
Mouse.press(MOUSE_RIGHT);
}
else
{
Mouse.release(MOUSE_RIGHT);
}
btn2State = buttonState2;
}
/*
if (buttonState2 == HIGH) {
btn2State = HIGH;
Mouse.press(MOUSE_RIGHT);
delay(100);
btn2State = LOW;
Mouse.release(MOUSE_RIGHT);
}
*/
}
Serial.print(-vx);
Serial.print(-vy);
Serial.print("\n");
if (millis() - previousMillis >= 20) {
Mouse.move(-vx, -vy);
}
}
Note: the “X” in the Pro Micro Ascii diagram denotes something is wired to that pin, below the diagram is described what is going to those various pins.
There are far better options out there. You could use a regular mouse, but that certainly wasn’t remotely the same. You could buy an Air Mouse, the feel is not the same either. There are units you can get similar to the Wii motion bar that will work with Retropi and use a Wiimote in a gun holder. Those should track much better because it is real tracking and not relative acceleration. With the Air Mouse solution it just knows it went right or left or up or down, you don’t even have to be facing the right direction. Still it is not a very expensive solution.
Addendum: MPU-6050 Test code. This is some Test code I had on file for the MPU-6050 this is NOT the Air Mouse code, that code is the Section Above here. I believe this is the code I used to get my baseline “stationary” values to put in the Air Mouse Code The 400 and 100 in the Air Mouse Code above. To use the code, again open the Arduino or other Serial Monitor set to 9600 and the Serial Port that the Pro Micro is connected to. I could be wrong and that may not be what this is. It has been sitting there a long time.
// MPU-6050 Test Code. This is NOT the Air Mouse Code!
// (c) Michael Schoeffler 2017, http://www.mschoeffler.de
#include "Wire.h" // This library allows you to communicate with I2C devices.
const int MPU_ADDR = 0x68; // I2C address of the MPU-6050. If AD0 pin is set to HIGH, the I2C address will be 0x69.
int16_t accelerometer_x, accelerometer_y, accelerometer_z; // variables for accelerometer raw data
int16_t gyro_x, gyro_y, gyro_z; // variables for gyro raw data
int16_t temperature; // variables for temperature data
char tmp_str[7]; // temporary variable used in convert function
char* convert_int16_to_str(int16_t i) { // converts int16 to string. Moreover, resulting strings will have the same length in the debug monitor.
sprintf(tmp_str, "%6d", i);
return tmp_str;
}
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_ADDR); // Begins a transmission to the I2C slave (GY-521 board)
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
}
void loop() {
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. As a result, the connection is kept active.
Wire.requestFrom(MPU_ADDR, 7*2, true); // request a total of 7*2=14 registers
// "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same variable
accelerometer_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
accelerometer_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
accelerometer_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
temperature = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
gyro_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
gyro_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
gyro_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)
// print out data
// Serial.print("aX = "); Serial.print(convert_int16_to_str(accelerometer_x));
// Serial.print(" | aY = "); Serial.print(convert_int16_to_str(accelerometer_y));
// Serial.print(" | aZ = "); Serial.print(convert_int16_to_str(accelerometer_z));
// the following equation was taken from the documentation [MPU-6000/MPU-6050 Register Map and Description, p.30]
// Serial.print(" | tmp = "); Serial.print(temperature/340.00+36.53);
Serial.print(" | gX = "); Serial.print(convert_int16_to_str(gyro_x));
Serial.print(" | gY = "); Serial.print(convert_int16_to_str(gyro_y));
Serial.print(" | gZ = "); Serial.print(convert_int16_to_str(gyro_z));
Serial.println();
// delay
delay(1000);
}
This is part 2 of the Arcade. The first post has the Arcade in a good working condition. This will cover some of the final touches.
I did a bit more work on the Marquee. I am in no way a graphic artist. I had downloaded some logos to do the initial graphic. I found some better ones to use and made some other changes to it. I then printed it out on my inkjet printer onto 3 sheets just like the previous test one I did on a black only laser printer. It turned out pretty well, I couldn’t do a full color graphic though. I think I will leave it at this paper graphics for awhile anyways.
For the Marquee there really aren’t any hot spots. I was thinking doing a frosted piece of Plexiglass behind the marquee to handle any hotspots, but that turned out to not be needed (with the paper that is). It is a little brighter than I think I want it, but I didn’t find it too distracting while test playing it. It is quite hard to photograph anywhere near properly though as bright as it is. I have at this point decided to not make a dimmer system for it. I have a couple of workable circuits that I have used for that in the past, I just don’t want to take the time at this point, when the biggest issue is taking photographs of it.
For the LCD I wanted to make a bezel/cover that went over it. To do this I put some 1/8th inch strips up the sides of the cabinet to rest the Plexiglas against. It slides up behind the Marquee bottom board, between it and the top edge of the LCD itself. For Mike’s it seemed he was putting the MDF strips up infront of the monitor? At least in his plans, that would have pushed it back, in my case with the thin strips they are even with the front of the LCD and are just guides to keep the plexiglass from flexing. Mike also had a small board along the bottom above the control panel, which I omitted due to the Plexiglas. I fitted the Plexiglas so that it just meets up with the back edge of the control panel. It is not held along the bottom and just goes up against the control panel board, so it can flex and make a gap there a bit. I may have to secure that in some way in the future, but currently it is minimal, and I do not want to make it difficult to remove the control panel if I can help it.
Above is the Plexiglas I was cutting for the screen. To cut it, I used a board and metal angle clamped together. I was cutting from the side on the right side where the knife is laying. Because the Plexiglas had a bad edge from when I purchased it, I needed to be sure to get one good long cut for the bottom edge. The top edge is hidden up past the marquee bottom board. This stuff is very hard, it is not the softer type so I found that it likes to fracture/crack. I managed to get a very good first cut on the top edge. The next cut, which I was doing in that picture really cracked up the edge. The last cut, cutting it down to the right width, that cut went very well thankfully. I had 1 factory edge and 2 cut edges exposed that turned out pretty well. It was very slightly too wide, to get it down to the right width I used some 180 grit sandpaper with a sanding block to get it just right.
The next part after fitting the Plexiglas was to get it in the final position with the LCD in place and the Control Panel in place. I then used a marker to mark the corners of the LCD behind the Plexiglas. I removed the Plexiglas, and monitor. I placed the monitor on the bench facing up and then placed the Plexiglass back over it using the marks I did while it was in the Cabinet to get a good view and check the marks were correct and centered properly. Once I was sure I had the corners marked correctly, I took away the monitor and flipped the Plexiglas to the back side. The back side being hte side that will in the end be toward the monitor itself once installed. From the back side, I cut into the protective plastic with a fresh Xacto blade around where the monitor will be placed, and removed the outer portion (yes only the outside part, not the center where the monitor will be). This left the “monitor area” covered and protected. I also kept the protective layer on the “front” side as well. Then I used some Gloss Black Rustoleum 2x Ultra Cover paint, painting that on the outer rim that I exposed by removing the film from it. This paint is on the back side of the plastic not the front, I have done this before for other projects. It leaves with me with a super gloss finish when viewed through the plexiglass and the paint won’t be touched so it won’t get scrathed. You could use any opaque paint color, in my case I was using Black due to the black case, red, blue anything really should work. Even Flat paints look super gloss from the front side. I have used dark flat primers before to get the same effect. The back is not flawless, it is not quite 100% opaque if back lit with a single coat(with more coats of paint it can be made fully opaque), but it is opaque enough for this use in my case with the single coat. Viewing it from the front the finish is flawless.
Above is the panel after painting it once I removed the protective layer from the inside. This reveals where the monitor will now be behind. The paint does take a while to dry well. I wanted to make sure it was good and dry before installing it, I didn’t want paint lifting where it meets the strips on the side. The final installation it went well, it is held tightly in place by the monitor at the top edge. I have a fair bit of pressure on the board there from the Monitor to get a little more tilt than the base will give on its own. I was very happy with the result.
Above you can see the thin strips the Plexiglas will rest on. After installing them I painted them gloss black to blend in. You can also see the door latch and spacer block to keep it from moving much. The little block at the bottom of the door is to keep it from going in to far, there is another stop block on the top corner as well, but it is out of view in the picture. The round speaker grills are again easy to see here as well as the chrome volume knob on the right.
Above is the Plexiglas installed with the monitor behind it before I removed the front protective film. Yes those are the wires leading to the front panel, when I reinstalled the panel I wrapped them up so they weren’t such a tangled mess. The monitor is there sitting on the blocking it is screw into the cabinet with. I have some pressure on the marquee bottom support board to get a little more angle out of it, as well as the block is a bit angled itself. I would have used the VESA mount board in the cabinet except this monitor doesn’t support VESA mounting. There are two screws in the back of the monitor base going into the block there. The block is built up so that the monitor was at the height I was going for, and it is secured to the bottom of the cabinet with 4 brackets with screws. I used brackets as I have it set so that I can get to the screws if I need to remove the monitor rather than gluing it in or putting in screws from the underside.
Above you can see the speakers installed before securing the wiring, the power supply board has been removed, or it would be attached there at the black and red wire, which now lead down to the 5Volt output on the Meanwell power supply below it. The other picture shows more of the internal wiring that goes to the Raspberry Pi, the two front mounted USB ports, the USB power cable which goes to the Meanwell 5Volt output as well. The safe shutdown/power up button wiring is there as well as the speaker input wiring. I ended up plugging the speakers into the Monitor’s Audio Output as I am using HDMI from the Pi. If I had plugged into the Pi I would have needed an audio ground loop isolator, because I have the Pi and the Speakers powered by the same power source. I had to do that with my Pi1541, and I had tested on this and had the same issue. Using the Monitor Audio Out that it gets from the HDMI input, lets me eliminate the need for that for this build.
Here is the back with the door latched of course. There is a fair gap at the hinge side, but with the wide hinge that does not show. I should have made it just a little shorter, it rubs easily, but I hope to not have to open it much. I also hope to not loose the keys.. You can see a bit of the run in the paint at the top, but it is on the back and shouldn’t be seen. Overall I have to say the paint turned out pretty good. There at the top, there is that extra T Molding strip on the Marquee Top. The Plug/Fuse/Switch unit in the back there can be wired a few different ways. The one I have has a lighted switch, that switch could be wired either as an Always On light even when turned off, or it can be wired at only to light up when the power is on. I have chosen to wire it so that it will only be lighted if the power is on. Some of them do come with a black switch and those don’t have lights in them. You could just switch the Hot line so that the light would not come on then because if the Neutral isn’t there it won’t light up. With the plug unit, again be certain they are secured well and not loose, a loose wire can cause heat and melting and potentially fire. I nearly soldered used solder and heat shrink on the plug unit for that reason, but I didn’t as then I would have to desolder it to ever remove the plug or power strip.
I had to edit the above picture, as the Marquee keeps washing out almost completely. That is the Marquee that is in it, I just took two pictures and over laid it over the lighter cabinet picture. The Marquee looks a little better in the picture than it looks to look at it. I did not remove the protective plastic from either side of the Marquee Plexiglas yet though. It turns out to be very hard to photograph this cabinet.
Above is the Pi 3B+ as it is sitting in the cabinet currently. I would have taken it out of the case and mounted it to the cabinet, but then I have to rig up a fan to it then. I may do that later. You can see in the picture the wires coming down to the GPIO Pins. The round momentary button on the back of the case there is wired to GPIO3 (Physical Pin 5) and Ground (Physical Pin 6) of the Pi 3B+. GPIO3 is a pin that will by default wake the Pi from a the shutdown/halt condition. Simply editing the /boot/config.txt file and adding the line “dtoverlay=gpio-shutdown” will activate GPIO3 to be a “shutdown” button. You can change the Pin that it will use for the Shutdown by defining the pin in the dtoverlay value. That will then make the other pin be the shutdown pin, but it won’t move the “wake/start” function from GPIO3. The Pi will start the Shutdown process as soon as it has been pressed. Once the Pi has shutdown, you can start it back up by pressing the button again (as long as you are using GPIO3 (Physical Pin5). There are other ways to set this up, they can include a delay where it will make sure the button is held down for a period of time, which could be handy to have. I went with the easiest option though, as I have the button on the back where it is not very likely to get bumped while the cabinet is in use. I found the instructions on how to set that up on this thread: https://www.raspberrypi.org/forums/viewtopic.php?t=217442#p1337231
I did do just a little testing firing up one of my old 2600 games. Asteroids, I managed to roll over the score easily. I was playing on the easiest level though. I went back and started with the next level and that did not go so well.
I want player 1 to be the left side, and player 2 to be the right side. I found after reinstalling the control panel that they were backwards. To correct his, I unplugged the joysticks from the USB ports on the Pi and swapped their positions. Joysticks are based on the USB Port they are plugged into. So Originally I must have had them in the other ports, and when I re connected them they were put in the opposite positions. I didn’t have to swap the control boards or anything.
The Pi is accessible from the back door if I need access to it. I can also easily remove the control panel. I have two brackets on the back of the Control Panel with screws into to keep it in from coming off. I briefly thought of making the SD Slot accessible on the Pi from the outside like I did with the Pi1541. It is a bit much with 3/4″ material though, and I don’t want the card to be to easy to remove and loose. If I want to add anything to it or make changes I have it connected to my wifi and I can access it over the network.
The Marquee top has some brackets and screws that I used to secure it to the cabinet. I want to have it remain removable to easily access the Marquee graphics etc if needed. If I make another I am thinking of making it set back just slightly then use painted angle metal pieces to hold the Marquee in place like full size machines did. This will mean there would be no T Molding across the Marquee Top and Bottom. It would make it so much easier to install and support the Marquee though. I think I will still use the light box design behind it. That worked great, and I hope Aluminum will distribute any heat from the LEDs which shouldn’t be very much. They are using nearly half an amp at 12volts, so there is some heat there over time.
So one may ask about what this project cost to build. In my case I believe that I have a little over $250 wrapped up in materials. I am not counting the Pi 3B+, SD card, Monitor or Power Strip. If those were purchased as well, I would have been looking at around $410. I did not include cost of Wood Glue, Brads, the bit of Aluminum sheet, as those are supplies I had around, as well as the corner blocks which are basically scrap wood. I did purchase a few tools, a 30mm Forster bit, a Slot Cutting bit for a router, and the Edge Guide Clamp, those items add up to around another $100. I now have those tools for future projects though.
I have enough MDF, LED strip light, hinge, Plexiglas and a few other bits for a second cabinet. I would need to buy some T Molding, Controls, the Pi, Monitor etc though. I would like to find a better way to cut the Plexiglas, the scoring it with a knife doesn’t work very well on this hard stuff, at least for long cuts. I managed to get it cut, but it could very easily have turned out bad. It really isn’t “Plexiglas” brand that I picked up, I think I have had some softer stuff in the past that was easier to cut, but that probably wouldn’t hold up well for this usage. I don’t remember Lucite cracking like this material has for me, I have used that in the past, it is pretty good stuff, although even more expensive. It has been quite a long time since I worked with it, so I don’t know if it was all that much more fun to work with.
In the end the cabinet is still difficult to photograph, at least with the camera I have. I guess Gloss Black is not much fun for that. Although it is not flawless, I am quite happy with the final result. Above the Plexiglas over the LCD is quite obvious though and gives a good view of how well that turned out for me. The little mix of colors of the buttons is that I purchase a Blue and Yellow set, and already had a white set. I felt mixing the colors gave a better effect.
I figured I would give a little update to what the machine looks like currently as of 2021. I did get around to having a marquee printed up on Plexiglass. This is based on my prototype design. It looks great, but does not photograph well.. It is direct printed on the back of the plexiglass by a local sign company. The background is a dark blue starfield looking effect. The PiCade text came out great. I made the marquee in GIMP, which is what I tend to use for anything like this. The background and the effects on the PiCade text are all effects that it can create. For the most part though I have been using it off and on for years, mostly I got lucky getting it looking that good, I really don’t know how to us it properly.
Here is the machine turned off.
This is the best shot I could gt of the marquee. You can just see the starfield effect a bit.
The other thing that has changed is it is now sitting on a stand/cabinet that was made for it. One of my uncles is a cabinet maker and he put it together. The top is inlayed about one inch, so there is a lip all the way around that keeps the Arcade cabinet from sliding off. You can see that pretty wrll in the one picture above. It has a good sized door on it that lets me use the cabinet for storage. I keep my SNES knock off USB Controllers inside, the Airmouse Gun and some other items. I put on a little hand turn lock on the front, it is like the key lock in the back of the cabinet but without a key. If I wanted I could simply swap it out for a lock, but in reality that is the kind of latch I wanted on the cabinet.. I really don’t want to loose the key someday and have to drill it out.. I wanted something secure that wouldn’t flap around though when I was building the Arcade, so I ended up putting in the lock. Lowes doesn’t carry the the keyless type.. Below you can see the complete cabinet powered up. The only fault on the marquee was that I didn’t know it would need light blocking on the “dark” areas, so it does end up washing out the “starfield” area. It is not as bad as the camera makes it look though. If I get another printed I will have to figure out the light blocking layer on the back first. I can’t fault the company that printed it, they did a great job with their part.
The Complete Cabinet
Thanks for checking out the project. I do have the second Grey cabinet build posted as well. It mostly shows the differences from this build. In some ways it is neater inside, due to using the VESA Mount for the monitor, which was not an option for this monitor. The other cabinet uses the controller version that has removable USB cables, they are seen by the Pi as the same type of controller, but it seemed the order of the buttons were different. I did match them up to work in the same order for two reasons. The first reason I wired them the same is the cabinets are wired to let me use my arcade stick that uses the same electronics as a third player, if they weren’t wired in the same order one or the other would be using the wrong buttons. The other reason is so the SD card images are then also compatible and the Pi could be swapped from one cabinet to the other. The second cabinet also uses a Pi4b instead of a Pi3b+, I put it together last year before the Pi4 was supported, but it worked well. At that time the setup was more involved and you couldn’t do the splash screen/video with it. The Pi4 is now officially supported and it is also faster and that does help with RetroPie. I recently also rebuilt the Pi3b+ taking it to the latest RetroPie build from scratch and putting my games and getting the configurations back in place. The image was so old it couldn’t be directly upgraded. I may swap out for a Pi4 at some point.
I have been wanting an arcade machine for a long time. These days there are a lot of options out there that make it easier to build your own. I purchased the Bartop Arcade plans from The Geek Pub http://www.thegeekpub.com He has several different plans, from a full sized stand up unit to a tabletop design, as well as the Bartop design that I went with. So you can pick which you want to go with, but be sure to buy the one you want.
It has been a lot of work. I mostly used a 50 In Clamp Edge And Saw Guide and circular saw to cut out the pieces. For the arc on the side cuts I used a jig saw, and I cut them out clamped together to get a proper match. With a table saw it would be much faster. I optimized the cut layout from the original to help me get some larger extra bits to work with in case I needed it.
I essentially cut out the parts the same as the plans. In the end I found there was an issue with the Marquee Top (B) and Top Door Frame (F). The Marquee Top and Top Door Frame should have been cut at an angle to meet nicely in the back. To correct this, I shortened the Top Door Frame a bit so that it just let the Marquee Top clear it. I then also added T molding to the back side of the Marquee Top, as it was now going to be an exposed edge. If I made another Arcade, I will be changing how I end up cutting that out. I may also make some other alterations to make it easier to put in the Marquee itself.
After cutting out all of the pieces, I did sand them all on both sides. You can see in the picture above that I laid them out on top of the second half of the 4’x8′ Sheet of 3/4″ MDF. This does only take half a sheet to make this unit. Depending how you build it though, you do need a bit of corner blocking to glue it up easily. In my case I could have used the “spare for lcd sides” cut into strips for the blocking. I also didn’t use the VESA mount on this build due to the monitor not supporting it. I did use blocking, partly the bit off the Door side, and mostly some old pine strips I had around.
Before assembly I used a slot cutter in a router for all of the T molding areas. I used a 1/16″ slot cutter. I took the pieces outside and use a clamp to clamp them down to my saw horse. Then it only took a couple seconds for each on to put in the slot. The biggest thing being to get the slot bit set perfectly center. The other thing, use a mask for this it was awful the first one blew back right at me. Beyond that it is easy to put in the slot.
I assembled the unit with corner blocking, glue and brads like was done by Mike at The Geek Pub in his video. Other methods could be used, if you want you can use screws. He mentioned Pocket screws, which I do have, but I didn’t feel like trying. I figured if I wasn’t careful they could split the mdf as well. If I used them I was probably going to still use glue too.. The blocking made it very easy to assemble. I was looking at trying to do it without putting in the blocking, but that made it difficult to get good alignment. The blocking makes it stronger too with more surface area for the glue.
I realized that I had not drilled for the speakers in the Marquee bottom board until after I had it installed. I used some Logitech 2 piece speakers for the arcade. Removing them from the shell, they have some 2″ speakers in them. I used a 2″ hole saw to make the holes in the board. I also had to drill for the volume control access. I removed the power Led from the board. While the board also had a Headphone jack on it, I decided it wasn’t practical to do anything with it. I needed a longer knob than the one it came with. That is also something I would do differently. Had I not already glued the board in, I would have carved out the back so I could have used a more standard length knob.
I then rewired the speakers for installation in the cabinet. I was going to reuse the original AC power unit so I setup to be able to put it in as well. Below you can see the speakers rewired to fit the cabinet.
These speakers operate off of 5Volts DC. In the end I didn’t like the exposed AC board inside the cabinet. I went with a Meanwell dual voltage power supply for the cabinet. This let me run the Raspberry Pi and the Speakers both off of the 5Volt DC on it. It also provides 12Volts DC, which is for the Fan and the Marquee lights.
The next part was the primer. I used the recommended Rustoleum Filler Primer. This is pretty neat stuff. It has a filler product in the paint. It looks like it is fuzzy, but it sands out amazing.
Don’t skip primer, It just won’t work if you are using MDF. I waited until the next day to sand it. I used 220 grit paper to take off the fuzz. I then followed up with some finer paper. From there I wiped it down with paper towels and brushed it well, then use a microfiber cloth to wipe it down. Then I painted it with some Rustoleum gloss black. I let that dry a day and took some 3000 grit to lightly sand any little bits that were in the paint. The paint I used is the 15 minute dry type to help keep the dust, bugs etc blowing into it. I found that it was better to do a single coat that caught most of the dust that got in it. Then I came back and did 2 more light coats after the 3000 grit. That later paint didn’t end up with as much dust in it. The last thing I did with the paint was a Rustoleum Clear Gloss coat. The Clear Gloss dried very fast, it was quite different and had a lot of over spray. When I was doing the painting I was wearing a mask as well. I was thinking of trying to polish it, but I decided I wasn’t going to be that crazy about it, and I wasn’t sure I had the clear on thick enough. I used 2 cans of primer and about 2 cans of the black. The clear coat was less than a full can. I did end up with some runs on the top back door frame piece. I used one of the spray handles for the cans, as seen in the picture below. That makes it much easier for me to get a decent finish and better control a well as saving my wrist.
Well, there were two other things I didn’t get drilled before the initial assembly. The first being the “safe shutdown button” for the Pi on the back beside the power jack. The other being the USB ports in the front right there.
Here is the safe shutdown hole in the back of the cabinet. I had to back bore it.
I had to backbore the Shutdown button here by the power port. The USB on the front nearly needed to be backbored as well. The USB port insert I used goes into a 30mm hole it barely has any threading with the 3/4″ MDF, but it was just enough.
The T molding is not too bad to do, but I wish it had went a little better. I got a section of 20′ and used all but about 18″ on this cabinet. There would have been that bit more if I had not put that additional piece on the back side of the Marquee Top. I am assuming I had the full 20′ I was to have received, but I can see how it did use that much. I just did it like Mike showed in his video, back cutting at the corners, and trying to put it in strait with a rubber mallet. I had a few issues here and there. I had some problem with snagging on the bottom and pulling it back out when moving the cabinet. I added some rubber feet and that should help to prevent it from dragging the edges too much in the future. I put a bit of glue toward the ends to help hold it incase it snags a bit.
Here I have the control panel assembled and the USB ports installed after finishing the Clear Coat. I am using a Dell LCD that I had around. It was almost a perfect fit, and had HDMI input and audio output (no speakers internally). The control panel layout is in the plans as well, the template prints out on multiple pages that get taped together. I used a spray adhesive to hold it on like Mike suggested. It was a bit of a pain to remove all of the adhesive after the fact ( I used a different product than he had, so maybe it is harder to get off?). The paper came off fine, but some of the spray stayed behind. I later used more of the templates in other areas and was careful to use as little spray as I could, that turned out better. I used the 2 player template and omitted 2 buttons, 8 was enough for me. You can choose to use the buttons you want. He also includes a 1 player layout template. The buttons I used are the pop in kind. I used a 30mm forstner bit for the hole with the 6 primary buttons, they went right in a perfect fit. For the Joysticks I used a slightly smaller sized bit, this didn’t cause issues in the travel of the stick. If I had used the 30mm bit, then the joystick washers wouldn’t have kept the holes covered at the maximum travel. For the smaller 24mm buttons I didn’t have the perfect drill bit for, so they were slightly loose, and a little glue on the bottom edge in a couple places to ensure they don’t move on me. The forstner bits do a very nice job, the butterfly bits I have are way too aggressive, but they are a weird type. The butterfly bits may be just fine if you are careful, mine are of a very aggressive verity that have a screw start point on them. I can’t hold them back or take it easy to get them started.. I used the bits in my cheap Harbor Freight Drill Press, which made the work go so nicely.
The one trick with the controls is they need to be wired identically, as the Pi can get confused if it has two of the same model of controllers with different layouts. I previously built a USB arcade joystick, with the same type of controls. I have wired both of the controllers on the Arcade as well as the separate USB arcade joystick the same so I can use it as a third player on the Arcade.
This was the first time I tried it out inside the cabinent. It is all together except the marquee and front plexi on the monitor. You can see the speakers in the top.
Here I worked on the Marquee light. I am using 12Volt White LED Strip light. I decided to build an Aluminum Light Box for it. I really didn’t have a good way to mount the LEDs otherwise, and I didn’t want the light going out other areas of the cabinet. The light box is about 1″ deep, and rests against the corner blocking, and almost against the speakers.
Here I am using clamps and a board like a break to bend the aluminum. It worked ok.Here is the box. It was neater but I had it slight long and had to compress the ends down a bit.
Above you can see the LED Strip. I put it on the Sides not the bottom. This helps with Hotspots. In such a close space the points of light off of the LEDs would make hotspots all of the Marquee otherwise. Below you can also see the Speaker grills and volume knob installed. The Speaker grills are made from some 2″ desk grommets from the hardware store, and then covered in some speaker cloth (salvaged from an old speaker box I had).
Above you can see the back door. The door was slightly taller than it should have been, possibly a little wave and variation in my cuts for the back. The bigger thing was the that it turned out to be somewhat narrow, I am not sure if was my marking or cutting or what. The door Frame pieces seemed to all go just fine, but there is a bit more gap left and right. So I would watch for that if I make another. I wasn’t going to use a piano hinge for it, but due to the gap that was the only way I was going to be able to hide it well. I also decided to get a lock, not that I wanted to lock it, but that was the most elegant looking latching method, and also when moving I didn’t want a “semi-secure” latch that may flip open accidentally. The holes were drilled with other templates in the plans. The bottom is the 80mm fan pattern while the top two are the hole patterns for the suggested speakers. I used the speaker pattern holes just for additional venting on the door though. Here you can also see the door once it was installed with the 80mm fan 12Volt and latch assembly. The modification to the door frame top that I mentioned above did have the added benefit of adding some ventilation as well as there is a small gap there now. I like that bit of the change as heat will build up and would have caught in the top had it been sealed up. You can also see the wiring going to the power strip I put in there. It is wired directly to the rear power jack. I had it around and it was easy to work with. I really did not want to get an electrical box like the plans suggested. This was a bit easier and I think did a nice job. It also has the added benefit that in my case it is a surge protector and not just a temporary “power tap” as well, not just a power strip.
The power jack includes a switch and fuse. I like it, but some have had it has issues with melting. I could see that if the connections were a bit loose, that causes the conductors to get hot. The Safe Shutdown button for the Pi is also installed there. The button is wired up to the gpio on the Pi and the Pi is setup to use do a safe shutdown if it is pressed. It will wake the Pi after shutdown if pressed again. I will cover that in Part 2, it is quite easy with the Pi 3 (and pi4b).
The Marquee just has some paper in it behind the Plexiglass to test the brightness. It is a little too bright. I am probably going to dim the LEDs a bit. I am not sure how I will do that but I have an idea. That will be in another post though. So this is Part 1 of at least 2 parts.
I have to finish the Marquee, if I make a dimmer for it that will be covered in another post. I am also going to put Plexiglas in front of the monitor to hide it. Once I have the Plexiglas cut for the front of the monitor I will be able to mount the monitor in the cabinet. The Monitor I have does not have a VESA mount, so I have secured it to a built up block that I will secure with some brackets to the bottom of the cabinet. I don’t know the exact final position until the Plexiglas is in. The Marquee top needs secured as well, but I have to finish the Marquee first. I do intend to keep the Marquee Top removable if needed, but not just friction fitted like it has been so far now. The Pi is also floating free in there. I have been thinking of pulling it out of the case and mounting to the cabinet as a bare board, but I do want to put a fan on it still if I do that. To start with the Marquee I will probably finish a design for it and reprint it on my inkjet printer instead for some color. I may get proper marquee made professionally later on. I may get some side graphics for the cabinet as well, but not full side covering graphics (not after the T molding is installed).