Arduino Spring-Loaded Ping Pong Launcher

--

An Update.

Prototype 1 of the Spring-Loaded Launcher, built with a 3D pen, a spring, arduino, relay board, motor, and cardboard.

The Tumbller has to navigate an obstacle course and then catch projectiles in the form of ping pong balls. These projectiles must be launched without manual reloading nor manual actuation of the mechanism, and it must use potential energy. Most people in my course have used pneumatics and various other forms of potential energy, though I have opted to use a spring design for its relative simplicity and ability to be automated. For the feed system, I am simply using a 3D printed hopper that guides a balls netted in aluminum foil from above using gravity. Unfortunately, my 3D printer was in and out during this process, so I had to mainly rely on my 3D printing pen. The orange squiggly plastic parts it produces are grotesque, but functional.

The compression spring I used is held in place by two pieces connected to cardboard, while a 12V motor pierces the same cardboard and is connected to a plastic part on the other end. The spring surrounds a tube, and in front of the spring and around the tube is another plastic part from my 3D pen, that can compress the spring nearly all the way. The plastic part connected to the motor hits this plastic part on the spring every revolution, forcing the spring all the way back. I had to do some basic calculations for determining the ideal position of the motor and the spring, and for determining the strength of the spring and required compression for launching the ball to my ideal lengths.

As for the arduino, it is connected to the motor on both ends, with a with a relay board to service the 12V motor. A push button is connected as well to turn on and off the motor. A basic fritz diagram is provided below.

Fritz of the layout for running the motor in the launcher

As for the code, it is fairly straightforward; we’re rotating a motor at the push of a button.

int motor = 7;int button = 2;bool motor_status = false;bool update_motor = false;void setup (){Serial.begin (9600);pinMode (motor, OUTPUT);pinMode (button , INPUT_PULLUP);}void loop (){if (!digitalRead(button)){ motor_status = !motor_status;update_motor = true;while(!digitalRead(button));}if (update_motor == 1){ update_motor = false;if (motor_status){digitalWrite (motor, HIGH);}if (!motor_status){digitalWrite (motor, LOW);}}}

Currently, the motor is exerting too much force on the plastic holding it in place, so I will get a lot of duct tape involved, and perhaps a few nails and screws. I plan to get the printer back up and running and provide a housing for all of the components on which the hopper can rest above, though in the mean time duct tape and aluminum foil will have to suffice. The results are good now, loudly launching the ball roughly 3–4 feet, though at inconsistent angles. Hopefully by the time of the navigation test in a few hours I will have it working consistently, and have the 3D printer back up and running. I have a new thermistor but the firmware still incorrectly says the extruder is at 10000C and refuses to print, so I will be debugging and hoping I can print some better parts. Stay tuned for that and the video to follow.

Some rough calculations:

--

--

Oliver O'Reilly-Hyland Engineering
Oliver O'Reilly-Hyland Engineering

Written by Oliver O'Reilly-Hyland Engineering

Page for my personal and class engineering projects. IG:@olivero_engineering Twitter:@ReillyHyland