Introduction: DIY Skee Ball Machine

About: I like to make things for the internets. I also sell a pretty cool calendar at You'll like it.

The skee ball machine is a wonderful thing. The simple experience of rolling a ball into a target is so freakishly satisfying that I used to play as much as I could as a kid at the local amusement park/mini-golf course. The sound of the rolling ball on the ramp, the pop as it launched in the air, and the bouncing as you hoped it would hit the 50 or even the 100.

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 uses an Arduino to read the sensors and a laptop to run Processing for the display. If you are to recreate this, I'd strongly recommend using a Raspberry Pi instead since it can now run Processing.

Step 1: Get Stuff

  • Arduino
  • Processing
  • Illustrator (or other vector graphics program)
    • 7 sheets of 3/4" plywood
    • gorilla tape
    • netting
    • wood screws
    • paint
    • 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

    These are the four main pieces of the skee ball machine. These can be easily taken apart so that the whole thing can be moved in a 10' U-Haul truck. The ramp slots onto the cabinet and doesn't use any fasteners to be attached.

    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 pieces for the playfield are straightforward. Most of the pieces fit together as in the picture above. The kicker at the end of the playfield is made up of several s-shaped pieces of cut plywood all glued together.

    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

    Here is an exploded view of the cabinet. Again, the assembly is very quick with tabs slotting the middle pieces into the sides. A few screws are used to keep everything more snug.

    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

    The electronics for the skee ball machine are refreshingly easy and simple. Each target has a 5cm distance sensor attached to it. As soon as anything gets within 5 cm of the sensor it signals the Arduino and the hits gets logged.

    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

    The Arduino solution would be great for recreating the classic skee ball machine. In fact, I did that in the first hour of this project. But then I got bored and realized "I don't have to follow the original rules!"

    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)
    I tried showing just the score with these effects happening, but people just got confused. Making it all visually apparent was crucial.

    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.
    And that was just a short list of things I wanted to do before I ran out of time. Even so, it's already way past the original game design.

    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.
    *the max score in this version is 7,777 and is achieved by only hitting the 100 targets. We never got close to seeing that happen in real testing, but it's there!
    Microcontroller Contest

    Participated in the
    Microcontroller Contest