Some years ago I started a Quest to get a machine to juggle. Some weeks ago, I yet again found myself working on a machine with the goal of getting a ball to bounce on a plate without falling down. And bouncing it does. But is the quest now finally finished? Is the holy grail of continuous ball-bouncing reached? The short answer is “No.” and I will probably not spend any more time on the current iteration of this DYI robotics nightmare.

“A nightmare?” you might find yourself asking. “What’s so nightmary about that thing?”. This project, as so many before, is like a stack of cards put together in such a way that the result is a house of cards. Fragile and ready to explode in your face. Or maybe just crumble down. Whichever you prefer to envision in your mind.

The Latest Results

Here are some interesting results though. The location-determination using the noise the ping pong ball makes isn’t that bad after all. And I finally got some better data to back it up! I projected the data points on the video footage in such a way that the ball and the data points are matching up. The arrows show the error-vector between where the machine thought the ball went down compared to where it actually hit the plate. Here’s a longer video without the ASCII arrows.

As you can see in the video, the errors are quite small. Though the ball tracking gets worse near the edges of the plate (not sure as to why). I think it has something to do with the audio getting diluted and a bit flattened down for the mic further away, whilst the mic very close might get a much louder and sharper signal.

Afterthoughts

What is keeping me from getting to the holy grail of continuous-ball-bouncing? (At this stage, the ball is still dropping down after 2 ~ 5 mins.) Since I was able to cobble together a simple proof that the data is quite good the problem has to be with how I am controlling the tilt. I am using a PID controller. But the PID controller’s output can only be applied on the next bounce of the ball. It is delayed by 1 full bounce. This is bad because data points are scarce. The ball might bounce from one side to the other in 3 bounces. Reacting fast is key, but with the ball-noise-position-determination used in this project a control loop without a 1-bounce delay is impossible. I think this is what ultimately is causing the machine to not being able to keep that ball bouncing for more than 5 mins.

Here’s a list of things I used for this project:

– Arduino Nano (doing the ball position determination)

– Arduino Uno (controller the stepper drivers and running a PID controller)

– Quimat Nema17 stepper motors (2A, 59Ncm)

– Quimat 4A stepper motor drivers

– 2 OP-Amp Chips 5532D (for the mic amplifiers)

– 74HC279 Quad SL-Latch

But Is It Able To Bounce Two Balls Simultaneously?

The question of what will happen if a second ball is added was raised a while ago by Reddit user CaptainRene. This video is for you, Captain.

Hitting The Nail On The Head

How hard can it be to get a machine to juggle a ping pong ball? Is this the farthest humanity got yet?! Not at all. Take a look at this superb ping-pong-ball-bouncer made by Paul Kulchenko and Emo Todorov.

This is how it’s done. Read more in this blog post written by Paul.

Some More Pics

I might take the thing apart to use its components in a future project. So I thought I put some more pics up as long as it is still assembled.