“We use an Uno to control 36 servo motors and create digital animated artwork.
The video below shows the action as 36 servo motors create an electronic work of art. An Arduino Uno and three 16-channel PWM servo controllers are working behind the scenes. The original inspiration for this was a much larger version with 450 servos I saw at a modern art museum. But even this small version with only 36 servos provides some interesting effects.
There is an optional feature that I haven’t shown in the video, but it can be added to make the display interactive. It is purely optional, and the software will work fine without it. For this option five ultrasonic distance sensors are mounted along the backside of the upper edge to the display. When you put your hand above the center sensor, the Uno goes into interactive mode, and all the servos attempt to follow your hand as you move it around above the distance sensors. When you remove your hand for a few seconds, the program returns to its display show. Again, you can add this option if you wish. If you don’t, the software will work just fine without it.
As you can see, this project was built on a 24” by 48 ” piece of peg board. The width was cut down to 32 inches. Servos are mounted 4 inches apart, and secured to the back of the peg board with hot glue. Popsicle sticks, cut down to 3 1/4 inches are mounted to the shafts of the servos, again using hot glue.
The SG90 servo motors are the only costly item in this project. You can get a set of 8 for $20 on Amazon. Even so, you need to invest $100 in servos. SG90s are suppose to all be 180º servos, but most don’t quite make it. A few fall way short and should be discarded. If you buy 5 sets of 8, you should be able to find 36 goods ones that travel at least 160º.
The servos need to be set to their minimum position (position at PWM 150), and the popsicle sticks mounted pointing horizontal and to the right in this minimum position, as viewed from the the front. I have provided a small program you can use to insure the servos are in this minimum position : SetServosToMinimum.”