You’ll find dartboards in just about every dive bar in the world, like cheaper and pokier alternatives to pool. But that doesn’t mean that darts is a casual game to everyone. It takes a lot of skill to play on a competitive level and many of us struggle to perform well. Niklas Bommersbach decided that years of practice was too much of a commitment, so he built this robot that can dominate dart games.
This robot can, essentially, throw a dart perfectly every time to hit the desired target on the board. If you’re unfamiliar with the game, you might think that a bullseye is always best. But that isn’t true — especially for certain rulesets. To play strategically, Bommersbach needed his robot to nail the desired space on the board on-demand.
His first step was to make throws repeatable and predictable. His robot has a balanced arm that spins up to a precise rotational speed. At the set angle, it releases the dart. By monitoring many throws with computer vision, Bommersbach was able to dial in the speed and angle variables until the result became very predictable. An Arduino UNO Rev3 board controls the arm speed and calculates the release. But Bommersbach struggled to get the timing of the release exactly right, as the Arduino was running its code sequentially and so there was a small variance — just enough to throw off the throw.
His solution was to add a second Arduino, which has the sole responsibility of releasing the dart using a stepper-actuated mechanism. That allowed for very precise timing and repeatable throws. The timing influences the dart’s vertical position on the board, while a linear motion system controls its horizontal position.