Roll-A-Ball Game
Game in which balls are rolled into holes with a timer and automatic scoring.
The timer and scoring is accomplished using an Arduino Uno.
This is not inexpensive to build nor is it a weekend project. A total of about $400 was spent on supplies, not counting some supplies already on hand.
The game can be built without the electronics for a less but keeping score is most of the fun.
A YouTube video shows the game in action. https://youtu.be/cnWRkR652qU
Supplies
1/2" Plywood
3/4" Plywood
2.5" PVC Pipe
Arduino Uno
Beam Break Sensors
Sound Board
Speakers
Relay Module
LED Strip Lights
Acrylic Sheet
5 Volt Power Supply
Screws, Wire, Paint, Miscellaneous
Build the Game
The game is built using a half sheet of 1/2" plywood and a half sheet of 3/4" plywood. The timer and score LED display require some additional pieces of 1/2" plywood. The game could probably be made lighter using 3/8" or 1/4" plywood and 1/2" plywood. The game with timer and scoreboard weighs 52 pounds. A concern with using thinner plywood would be that the ball drop restrictions could be effected.
The pdf files are drawings of all the plywood pieces. The plywood layouts are included to show cutting from the half sheets. A table saw is highly recommended to cut the pieces. The exposed edges are routed with a 1/16" round over bit.
The photographs show some of the assembly. I glued and pneumatic nailed the return platform top to the frame. The photographs show the roll platform screwed to the frame. I did this as I was not sure how the ball hole sizes and finishing would work so I wanted it removable. The holes worked out okay (more on this later) so I eventually glued and pneumatic nailed it in place. The screw holes were filled in with wood filler.
The extra plywood piece added under the hole locations was glued and pneumatic nailed prior to drilling the holes. Be mindful of nail locations to avoid hitting them with the hole saw bit.
The holes were drilled with a 2 3/8" hole saw bit (Century Drill Shark Tooth). A Milescraft drill guide was used, clamped in position. Don't know if a hand drill by itself would work or even if it would be safe to use. The upper edges of the holes were rounded over with a 1/16" round over router bit. The inside of the holes were sanded fairly smooth.
The sides, back, and front were attached mostly with 1 1/4" Fastcap Powerhead screws. These screws were used as the roll platform was removed and reattached more times than could ever be remembered (mainly for determining ball sensor operation). Some conventional flat head wood screws were also used at final assembly.
The ball deflectors were added because without them a ball occasionally did not clear the bottom of the hole before a second ball dropped on top of it. They also return the balls quicker for better scoring pace.
The subassemblies were all prime and finished painted.
The colored rings around the holes and the backwall numbers were made using "Create-A-Sticker". The rings are 3 1/4" outside diameter and 2 3/4" inside diameter. The circles were printed from a Microsoft Word document but any program could be used. The numbers were printed from a Word document and are Vineta BT font, 240 size. The "shadows" of the font were cut off.
Mount Ball Drop Sensors
After some experimentation, it was determined that IR beam break sensors were the best option for triggering scores. Mechanical switches with levers were too stiff for the balls to actuate the switches, were hard to mount and positioning had to very precise. IR reflectors did not work with non-white balls and were not very reliable in detecting every ball drop. Without any restriction, the balls dropped quickly and the sensors did not have time to register the ball drop. LED beam break sensors were also not very repeatable or consistent.
The IR beam break sensors are Adafruit 2167.
2 1/2" diameter PVC pipe was used to mount the beam break sensors. The pipe is 2 7/8" outside diameter and 2.445" inside diameter. Nine pieces were cut 15/16" long.
The position of the sensors is dictated by the hole arrangement. A drawing is attached that shows the position of the sensors and the mounting brackets. The pdf files were printed and the printouts were used to mark the pipe for sensor and bracket locations. The outside of the pipe pieces were "flattened" to about 1/2" wide where the sensors mount to help alignment. This was accomplished with a table belt sander. No flattening was done for the mounting brackets. The 5/16" viewing holes and 3/32" mounting holes were drilled per the attached detail drawing. Mounting screws were M3 x 12 mm flat head screws. The sensors were mounted with the three wire "sensing" sensor on the front side of the assembly and the two wire "sending" sensor to the back.
The mounting brackets were purchased from McMaster-Carr, item 13135A62. The brackets were mounted to the pipe pieces and then screwed to the bottom of the roll platform. The mounting screws to the pipe were #8-16 x 1/4" round head thread-forming screws for plastic (1/8" pilot holes). McMaster-Carr, item 92295A308. The mounting screws to the platform were #8 x 1/2" pan head particle board screws (1/8" pilot holes). Four of the mounting brackets needed to be trimmed using a table belt sander.
The pipe pieces were positioned so that the pipe where the front "sensing" sensor is mounted was flush with the hole through the wood. There is a little more than 1/16" difference in hole and pipe inside diameters.
The photographs show two failed attempts at ball drop restrictions. More on this subject is discussed later.
Wiring Beam Break Sensors
The nine beam break sensors were wired to the Arduino through terminal strips. Jumper strips were used to gang the power, grounds, and sensor inputs. A series of eighteen 5/16" diameter holes were drilled through the back for wire passage. 22 gauge stranded wire was used for flexibility.
The six one point sensors, the front row of four and the two corners, were wired in parallel. The two two point sensors were wired in parallel. The single three point sensor was wired by itself. The wiring is a little congested but it all fits. Small self adhesive wire clips were used to keep the wires clear of the holes and to keep them from sagging down.
The sensors are wired to Arduino pins 4, 5, and 6, 5 volt power and ground. A 10k ohm pull-up resistor was added to each sensor output.
A five pin wire connector was utilized to permit removal of the Arduino from the assembly.
Downloads
Assembly Completion
Two small self adhesive buttons were added to the front of the roll platform. One button is wired to the Arduino reset and ground. The other button is wired to Arduino pin 7 and is used as the start button. Small holes were drilled through the roll platform frame for the wiring.
A strip of air conditioning foam was added to the inside of the front board to reduce the bounce of the balls coming back. It is about 3/8" thick.
Handles were added to the sides of the assembly to permit easier maneuvering. The assembly can be carried by fingers in the drop holes and under the front board but a two person carry is much easier.
Felt strips were attached on the bottom of the assembly.
The balls used are yellow racquetballs. The ones shown were purchased from Amazon and are called "Sky Bounce". They are not official racquetballs but seem very consistent in diameter. Other color official racquetballs were briefly tried but these yellow ones seemed to perform more consistently.
With no restrictions in the ball drop holes the balls would occasionally pass by the beam break sensor without triggering the sensor. Various restriction methods were attempted including smaller diameter rubber gaskets, felt pads, and numerous rubber bumper pads. The rubber bumper pads worked the best. The final pads used were of a truncated cone shape, 12.7mm diameter and 3.5mm thick, obtained from Amazon. Two were installed on each hole, straddling the "send" beam break sensor hole. For the first week or so, a ball would occasionally get stuck in the drop hole. The correction was to frequently push the bumper pads onto the drop pipe. It seemed that the bumper pads did not take to the curve of the pipe very well. After this break-in period, they seem to be well seated. The painted inside surface of the holes opposite the bumper pads were also sanded with very fine sandpaper several times. A very slight coating of "Super Lube" silicone lubricating grease was also applied and wiped away opposite the bumper pads. It is not sure if this did anything except raise the anxiety level about getting the balls coated with grease.
Downloads
Scoreboard & Timer
The scoreboard and timer LED displays were made from 1/2" plywood.
The simulated seven segment display used 5 volt, 100 pixels per meter LED strip lights. They were purchased from Amazon. (WS2812B LED Strip Individual Addressable Light 100Pixels/m SMD 5050 RGB Pixel Strip DC5V (3.2FT 100LEDS Non-Waterproof, White PCB)). 84 pixels were used for the score LED and 86 pixels for the timer LED.
The layout of the simulated seven segment display was drawn on the back panel board. 3/8" diameter holes were drilled for wire passage. Two holes per digit plus one extra for the timer dots were drilled.
The self adhesive LED strips were attached to the back panel. The wiring between the segments were soldered to the ends of the segments. Solid 22 gauge wire was used as it was easier to solder.
The 3/4" wide divider strips of 1/2" plywood were glued and pneumatic nailed into position. The 1 1/2" wide divider strip was routed out on the back side clearance of the two LED dots. Two 1/4" diameter holes were drilled for the timer dots.
The X-shaped baffles between the segments were made using rubber 1/16" wide ceramic tile spacers. Four spacers were super glued on top of each other. The final size and height was trimmed to suit using snips. The height was slightly proud of the top surface so they are slightly compressed by the cover plate.
The cover plates are 1/8" thick, 55% translucent plexiglass. They were mounted with small truss head wood screws. The plexiglass was purchased from Amazon (Falken Design Acrylic Plexiglass Sheet, White Translucent 55% (2447), 18" x 24" x 1/8").
The scoreboard and timer displays were prime and finished painted.
The scoreboard was attached to the timer with 3/4" x 3/4" x 6 1/2" wood pieces. The combined assembly is attached to the game with 3/4" x 3/4" x 5" wood pieces fitted into two slots fabricated out of wood. Plastic shim stock was used to create a clearance of 0.015" between the posts and slots.
Two three pin wire connectors were utilized to permit removal of the scoreboard and the timer from the assembly.
The timer LED was wired to pin 2 of the Arduino. The score LED was wired to pin 3 of the Arduino. Each circuit includes a 300 ohm resistor and a 170 uF capacitor, standard for LED strip light control.
Sound
Initially a small buzzer was used to sound when the timer started, the scoring for ball drops, and the end of the timer. To improve the quality of sound, a sound board and two small speakers were installed. Relays were installed to connect the sound board to the Arduino.
The relay inputs were wired to Arduino pins 8, 9, 10, 11, and 12. The normally open relay switches were wired to the sound board pins 2, 3, 4, 5, and 6. The speakers were wired to the sound board. 5 volt power and ground were wired to the relays and sound board.
The sound board and speakers were purchased from Adafuit. Audio FX Sound Board + 2x2W Amp - WAV/OGG Trigger -16MB, Product ID: 2217. Stereo Enclosed Speaker Set - 3W 4 Ohm, Product ID: 1669. The relay module was purchased from Amazon. Anmbest Relay Module with Optocoupler High/Low Level Trigger for Arduino (5, 5V Relay 6 Channel).
The music was found online. The game start music is "Call to Post", the game over music is "PacMan Death Sound", and the scoring is simply "One", "Two", and "Three".
Arduino Code
The Arduino IDE code is attached.
The program is a little sloppy as it was written by a "non-programmer" as the game was being debugged. The basic skeleton of the program was obtained from Playful Technology who has a YouTube tutorial on programming the seven segment LED display and control of the timer. https://www.youtube.com/watch?v=r_yobwaBWr0&t=0s
Notes were added to the IDE code to help explain the program steps.
Delay timers on scoring were programmed in for two reasons. The first reason is to permit the audio to finish playing. The second is to prevent a single ball drop from being counted twice. A side effect of these delays is that if a second balls drops within 450 milliseconds of a first ball it will not register.