So when the idea for doing a bigger project came up, I jumped at the chance to make a DIY version. I was amazingly lucky to get a lot of help from the folks at Because We Can who did the design and fabrication of the machine on a Shopbot.
Note: this version was made for Maker Faire and as such has a few loose ends. It survived Maker Faire (mostly), but needs some more work to be bullet-proof.
Step 1: Get Stuff
- Digital Distance sensors
- Arduino Uno
- 100mm arcade button
- Illustrator (or other vector graphics program)
- 32" HDTV
- HDTV mount
- 7 sheets of 3/4" plywood
- gorilla tape
- wood screws
- Cordless Drill
- Balls. These are balls from the ice ball game and were bought on eBay (search for "ice balls skee") for $10 each
Step 2: The Four Main Pieces
The Revit files for the skee ball machine are attached. With this design, the pieces were cut out of 3/4" ply on a ShopBot. The assembly is straightfoward as it's a tab-and-slot design.
Step 3: The Playfield
The ramp itself is covered with cork and the front end of the ramp has a metal bracket to protect against wayward throws.
Step 4: Cabinet
One thing that we didn't add was a shield for the display. We tested the machine out by throwing the balls in a regular bowling fashion and never came close to it. When kids or excited adults played it, however, a lot more force was used and the balls would pop up enough to hit the display. Kids being kids, this became a game of its own and one of the displays broke right before the end of Maker Faire.
Step 5: The Electronics
Each sensor is running off of the 5V on the Uno and is also sending a digital signal to the Arduino. There's no pulldown resistor. That's it.
As for the Arduino itself, it's running StandardFirmata. This can be found in the Arduino software under Files>Examples>Firmata.
So what this does is just turn the Arduino into an interface for the computer. You can certainly put the entire program with an LED display for the score and this was an initial direction for this project, but I wanted to make the display a little fancier and have some more fun with it.
All of this is held in place by Gorilla tape which looks odd. This is not meant to be the final version. All of the pieces only came together the day before Maker Faire. The goal was to survive Maker Faire and that worked out on the electronics side. The next version will have 3D-printed brackets and shield for all of the electronics.
Step 6: Just Add Processing
Seriously, if we're going to make our own game, then lets make the game our own.
By using software that displays information on a monitor you're free to do so much more with it. Instead of each hit giving you one single set score you can add more effects and events. Like these:
- Combos - Hit a group of targets for a special bonus score. I added the Up the Line combo (10 - 50) and the Around the World combo (all targets)
- Streaks - Hit the same target again and again to get more points each time. Doesn't work on the 10.
- More specific combos - Two combos only work by hitting two targets in a row in the right order. I added the Don't Panic combo (40, then 20) and the Because We Can combo (10, then 100)
In addition to more points, the big combos (Up the Line and Around the World) also had a bonus ball. If you hit a specific target after the combo you'd double your combo bonus.
Here are a couple other features added to the game:
- Game recap - At the end of the game there's a display of what targets you hit during the whole game and what your cumulative score was
- Random backgrounds - The backdrop was randomly picked from 9 different images
- Sound effects - fun!
- Score bounce - the more your score increased after a hit, the more the score on the screen would "bounce." Getting over 1,000 points* would make the score expand well past the edge of the screen.
To run the game, download the attached Processing sketch and plug in an Arduino with StandardFirmata on it. My experience with Firmata was that it can be a little finicky in pairing the Arduino with the laptop so make sure you are getting basic features to work there with a simple test first before trying this out.
Notes on attached sketch:
- The sketch is designed to be run on a HDTV screen and can be changed from a 720p resolution to a 1080p resolution by changing the monScale variable to 2 or 3
- The sketch resets the game after 10 seconds or so. This is because I was having issues with the arcade button, but can easily be changed to add it back in.
- Apologies in advance for the messy code. This is my first Processing sketch.