Introduction: Simple Animatronics With Servos and Arduino

Servos are surprisingly easy to use. Even more so than simple DC motors and steppers when you have a microcontroller. In this instructable we'll use a 'duino to drive five servos which will control a doll's limbs and neck.

I bought the servos at HobbyPartz for a couple bucks apiece and found the doll at a swap meet for a dollar. The doll says 1967 Mattel on the back and I later learned she is a See 'n Say type doll. The hard plastic body was important for a successful installation.

Step 1: Dismemberment

Pop off the arms and use a coping saw to split open one side. Then crack open the other side and remove the guts. Be careful along the way to ensure that everything can be put back together after. I also spent at least 20 minutes trying (and failing) to get the inner workings functional.

Step 2: Turning Heads

The Neck

First dry fit the server horn in the neck and trim it as needed. The servo needs a base to stand on so we'll use some Mighty Putty (aka Epoxy Putty) to fill in the neck.

This stopper will serve as a base for the servo which turns the head. It must stick to one half of the body but not the other to allow the torso to be opened and closed freely. Use a little petroleum jelly on one half of the torso and the servo horn to prevent them from sticking.

Fill the neck with putty while focusing on how the torso comes apart. Allow the putty to cure for a minute or two to eliminate some of the tackiness. Then press the servo horn into the neck to create a firm footing for the servo.

Finally remove the servo and top half of the torso. Allow the putty to cure further while testing the fit a few times before it cures completely. The putty can be filed and sanded after it's hard but it's much easier to adjust it prior.

The Head

Now it's time to mount the servo to the head. The first thing we want to do is remove the scalp. Follow just under the hairline with a razor and remove it completely.

Take a moment to orient the horn so that it has an even range of motion in either direction while it's oriented perpendicularly to the face. Place the horn in it's footing and run the wire down the side of the putty. Turn the servo in the direct opposite the wire and make sure it has enough slack to turn completely. Mark the wire and the putty when you're happy with the positioning.

Make a groove in the putty with a saw so the servo wire can run down the neck and into the body while it's closed. Next put the servo in the head and feed the wire down through the groove. Close the torso and put the head back on. You should now have head on the body with the motor in the head and the wire running down the neck into a closed torso.

Adjust the head and servo so that they're lined up. Make sure there's an even amount of spacing between the servo and either side of the head. Take a measurement of this space and cut a length of 3/8" dowel. Dry fit the piece of dowel on either side of the head and re-cut if necessary. Cut another piece of dowel the same length once you're happy with the fit.

Now wedge the pieces of dowel on either side of the servo. Drop a small amount of hot glue on each side where the dowel meets the servo and allow it to dry. Remove the servo with the dowels sticking to it. The dowels should hinge on the small drop of hot glue while maintaining an accurate placement. Take advantage of this hinging effect to apply more glue between the servo and dowels before clamping them together to create a secure, tight fit.

The dowels should now be attached to the servo but not the head. I initially tried gluing the dowels to the head but the glue didn't stick. Drill a small pilot hole through either side of the dowel. Place the servo back into the head with the horn planted firmly in its footing and use two screws to fasten the dowels to the head. Remove the head from the body and disassemble the torso.

Step 3: Rotator Cuffs and Hip Flexors

Now it's time for the limbs. First spend some time getting familiar with the rotation and stops of your servos. You want to find an orientation that's going to allow for a natural range of motion. The horn may need to be removed and readjusted so that it correctly lines up with the arm.

We'll be modding the torso so that it will support the remaining four servos. Start by cutting the arm sockets so that they allow the servo to protrude slightly. Next, take and arm and cut three slots in the flange. Cut a hole which goes down into the arm and another which goes back up into the shoulder.

Your servo should come with a horn that has four long arms or two long arms and two short arms. The one with two short arms is the one you want or you can cut the other in the same manner. Fit the horn into the arm, guiding horn down into the length of the arm and then back up into the shoulder so that it grabs firmly. Finish the other arm.

The body will likely need a bit of modification to allow the servos to mount well. Cut away as needed and use would or plastic build up scaffolding as needed. Remove any stickers applied to the servos and scuff up the housing with sandpaper or a file to allow a good hold for the glue. Apply ample hot glue and hold the servos in place while it dries.

Repeat the same steps for the legs. The servos for the legs just barely fit and may end up sticking out quite a bit. This baby has some wide hips!

Lastly, figure out where the top half of the torso will make contact with the servos and add some material if necessary to create a tight fit when the torso is closed. Run the limb wires so that they come out hips and the head wire so that it comes out the side.

Close 'er all up.

Step 4: The Illusion of Life

The only thing left is to wire her up and apply a bit of code. The servos have three wires. Red is positive, black or brown is ground, and white, yellow, or orange is signal. The code uses the Arduino Servo library. Principia Labs also has some good info on how servos work.

Step 5: Analog Puppet Strings in a Digital World

It's too limiting to move the servos purely with code. What we need is a controller. Some puppet strings so to speak. I decided to use four slider potentiometers for the limbs and a rotary trim pot for the head. The sliders were purchased from Futurlec (Mono Sliding Potentiometers - 30mm Travel) and the trimpot was laying around from the famous Electronic Goldmine surprise box . I also used a right angle IDC header for all the connections but any type of header will do.

The first step is to connect the sliders directly to the Arduino to get the correct orientation. The positive and negative terminals of the power out should connect to either end of the slider and the wiper pin should connect to an analog in on the Arduino. You can use a multimeter to determine the correct connection if it isn't immediately clear. You're looking for a voltage that varies between zero and five volts as you move the slider.

Use the debug flag in the provided code to get serial output which will help you determine the correct orientation of the pot. Basically you just want a limb to move up when the slider moves up. It's pretty easy to get the orientation wrong when soldering but don't worry if you do because it can be corrected through the software.

Solder everything to a perfboard once you're happy with the operation of each pot. I kept all positive connections to one side and all negative to the other. I took a reading from each wiper pin once this step was complete to verify that everything was soldered correctly. I then soldered each individual wiper to one of the pins one the IDC connector.

When everything is complete you should have two inputs for the power and five outputs for each of the pots. Write the sketch to the Arduino and connect everything up to verify that it works.

What's Next

- Connect a few LDRs or motion sensors to track movement for the head to follow.
- Add a few LEDs for the eyes.
- Make it talk.
- Stuff everything into the body and make it wireless.
- What else?
Microcontroller Contest

Participated in the
Microcontroller Contest