I wanted to create a animatronic head for a costume I'm constructing. I wanted it to be entirely self contained- no exposed wires, etc. and unlike many animatronics used in movies, I didn't want to use radio control due to complexity/control issues. I also couldn't afford a commercial animatronics controller.
Enter the MAKE controller! This piece of hardware allows you to connect readily available hobby servos (as well as motors, lights, etc.) to simple analog input devices (I'm using flex sensors) to control movements. I have this set up running the controller in POLY mode, which doesn't require any computer programming and is very easy to configure. Of course you can always program the controller later on to maximize its potential- it's a pretty amazing piece of hardware.
Here's what the finished animatronic armature looks like (it's mounted to an old welding helmet as a test rig) along with a movie clip and what the finished costume will look like- it's a Horus guard from Stargate.
Here's a video of it working-
There are a ton of possibilities using this controller for animatronics:
Make a Predator costume with animatronic head and shoulder cannon
Build a giant dinosaur with a moveable head, eyes and tail that reacts to movements or goes through a pre programmed routine
Create interactive displays and haunted house attractions
Follow along and I'll show how the mechanism for the Horus head is constructed and maybe you'll be inspired to create your own animatronics....
UPDATE: Makingthings.com, the manufacturer of the MAKE controller has removed the POLY mode firmware necessary for this instructable from their website and it no longer is included in the firmware for the controller. If I can find an earlier version of the firmware necessary I'll post it here. They have also removed all tutorials regarding the POLY functions. Bummer. I have started working with the Arduino platform due to it's lower cost, smaller size and ease of use and have created another animatronics tutorial here:
Step 1: Materials and Tools
Hobby servos- I'm using Hitec HS 300 and HS 605BB standard size servos. Many standard size servos are available on eBay for under $10 each.
MAKE controller kit- available from Making Things: http://www.makingthings.com
Materials for armature- I use printed circuit boards (PCB's) for the main construction along with some plywood, brass and aluminum.
Power source- I use a 9.6V battery to power the controller and a 4.8V battery to power the servos.
22ga wire- three seperate colors are needed
Flex sensors- these are available from Jameco (part #150551): http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&productId=150551
Miscellaneous hardware- brass hinges, small screws/bolts, zip ties, heat shrink tubing
Miscellaneous servo hardware: http://dubro.com/hobby
Dremel tool or saw to cut servo mounting boards and aluminum
Tap to cut threads in aluminum
Small phillips screwdriver
Step 2: Design and Layout
I wanted my animatronic head to move up/down, turn right/left, rotate and have eyes that light up. What is really important is to keep everything as light weight as possible to avoid overloading the servos. The finished Horus helmet will be constructed entirely from blue foam and cardboard to save weight (and cost!)
I used standard sized servos: two Hitec HS300 servos for the rotation and turning movements and a HS605BB servo to move the head up and down. THe 605BB servo has twice the load rating of the HS 300 servo- it needs to be stronger because it's moving the entire weight of the head.
The first thing is to figure out the movements and range of motion. Working from a base plate, I figured I'd need one hinge for my up/down movement, one hinge for my turn right/left movement and a pivot for my rotational movement. I also wanted my head movements to be grouped together so as the head turned it would rotate and as it moved up and down the eyes would light up. By grouping functions together I would be able to control everything with only two flex sensors.
There are also two sets of "fans" located on the sides of the helmet. I wanted these to be linked to the up/down head movement- the servos for these aren't shown on the finished animatronic armature as they will be added when the foam helmet is constructed. I do show them on the diagrams and will demonstrate how to reverse the rotation of one of the servos- this is necessary to get the fans on opposite sides of the helmet to rotate in the same direction at the same time.
How it works:
Using the POLY function/FOLLOWER mode, the controller takes the analog input from the flex sensor and assigns it a value between 0 and 1023 based on input voltage corresponding to 0 to 3.3v. The servo outputs ( labeled 0 and 2) are PWMs (pulse width modulation) that reflect the assigned values, so when the input voltage is 0v the servo is at one end of its travel and when the input voltage is 3.3v the servo will move to the opposite end of its travel, tracking the bend in the flex sensor. The digital outs on the board also reflect this so you can also control the speed of a motor or brightness of a lamp. At the time of this writing, the firmware for the controller only allows the servos to rotate 90 degrees (most standard servos can rotate 130 degrees.) I've read on the MakingThings forum that full 130 degree rotation could be included in a future firmware update.
Note that the final configuration of the battery and controller mounting will be slightly different than what I have done on my test rig.
Step 3: Construction- Servo Mounting Plates and Pivot
The main servo mounting boards are cut from PCB material. The base plate is thin plywood and the pivot is a brass tube and plate that rotates on an aluminum rod. I first remove the copper plating from the circuit board material before cutting it to shape- this can be done either by etching or sanding it off. I like using this board as it's thin, light, pretty strong and it's easy to work with. The other cool thing is that if you want to use micro servos or actuators to build really tiny animatronics you can etch your wire traces directly on your servo mounting boards to minimize wiring and save space.
Be sure to use proper safety equipment when working with circuit board material- wear a dust mask when sanding and cutting it. The board can be cut with a Dremel and a cut off wheel or even a small saw. If you don't want to use PCB material then thin aluminum or plywood sheet will also work.
I made the plate that is sandwiched between the two servos from aluminum as it needed to have threads cut into it so it could be bolted to the main servo plate. Once the servos are installed a zip tie is run around them and fed through holes in the aluminum plate.
The pivot to allow the head to rotate as it turns is made from an aluminum rod and a section of brass tubing. A circlip is placed in a cut groove on each end of the aluminum rod to retain the brass tubing. A flat section is filed on the end of the aluminum rod and has two mounting holes drilled and threaded so it can be bolted to the servo mountig plate.
The brass tube has a wide plate soldered to it. This brass plate is what the finished foam head will be attached to. The brass plate also has a small hole drilled in it to connect the servo linkage that drives it.
I used standard R/C hobby servo linkages to connect the servos to the contol points. I try to make use of adjustable control arms and linkages whenever possible to allow some room for future adjustments. I also needed to add a helper spring to take some of the load off the servo that moves the head up and down.
Once the armature was finished I mounted it to an old welding helmet using an angle bracket so I could approximate the finished height.
Step 4: Electronics- Flex Sensors and Lights
The flex sensors are soldered in to a simple volage divider circuit to provide a variable input voltage to the MAKE controller's analog inputs.
You can play around with different resistor values but the voltage to be input to the controller should not exceed 3.3V
Cut three equal lengths of 22ga wire- one red, one black and another color for the signal wire. Solder them to the flex sensor as shown on the diagram. Generally speaking, the shorter you can keep the wires the better- flex sensors tend to lose resolution and get "noisy" as the lead wires get longer. I was able to make the wires long enough to reach all the way to my hand and still get good results.
I put heat shrink tubing over my soldered connections and I glued some flexible rubber tubing onto a glove and slid the sensors into the tubing. It is important to note that the sensors only work when bent in one direction- the printed side of the sensor goes on the outside of the bend.
While I used a glove for my test rig, the finished costume will have the sensors mounted on my elbows to keep them hidden.
The lights for the eyes are just a couple of super bright 2.4v 5000mcd red LED's (Radio Shack part#276-086) that are hot glued into a couple of old halogen lamp reflectors that had the bulbs removed. The LED's are wired in series with a momentary switch that is activated when the head drops all the way down. The power for the LED's comes directly from the 5v output on the MAKE controller board. I left the wires for the lights extra long so it would be easier to mount them in the finished head and the lamp housings are held onto the brass plate with some hot glue and zip ties.
Step 5: Setting Up the Controller/ Connecting Sensors and Servos
Time to set up the MAKE controller! First you have to load the firmware HEAVY to the controller. There is a step by step on how to do this here:
This is done by connecting the controller to a computer with a USB cable, downloading the Heavy.bin file and the mchelper application and using mchelper to upload the firmware Heavy to the controller- it only takes a couple of minutes to upload the firmware and make sure the controller is functioning properly.
Now unplug the controller from your computer. There are some things that need to be configured on the controller board to connect the flex sensors and servos and enable the POLY mode.
First, you have to set the DIP switches on the board (there are eight of them) to put the controller into POLY mode and activate the FOLLOWER program. This is done by positioning switches 1, 3, 6 and 8 to the ON position. Switch 3 activates the FOLLOWER mode for the first set of analog inputs and switch 6 activates the second set of analog inputs. There is more info on the POLY mode functions here:
Now you have to set the analog input power to 5v (the default setting is 3.3v)- this is required by the flex sensors. This is done by moving a couple of jumpers on the controller board located by each of the analog inputs.
The servos are powered by their own 4.8v battery. This is because I found that when I powered the servos directly from the controller board they had some glitches due to the electrical noise they generate. To power the servos from a seperate battery you need to position the jumper located near the servo outs so that it is closest to the VExtS label on the board and connect the power leads to the external servo power connector . The servos are connected to the servo outs on the board labeled 0 and 2, paying attention to the direction the ground wire from the servo is facing. Note that the servos that rotate the head and move it left/right are connected together. This can be done with a "Y" cable adapter or by splicing the servo wires together.
The lights are connected to the controller board's digital outs Gnd and VOut1. The controller board's default setting is to provide 5v at Vout so that doesn't need to be changed.
There is a complete breakdown of the inputs and outputs of the controller board here:
Now connect the 9.6V battery to the controller's main power input. The controller can use anywhere between 6v and 12v but they recommend 9v as the board doesn't have to work as hard converting the voltages for its inputs and outputs.
Now connect the flex sensors. First connect the Vin and Gnd wires. Now use a multimeter to test your input from the flex sensor. Touch the positive multimeter lead to the signal wire from the flex sensor and the negative lead to the to the Gnd contact on the controller board. When you bend the sensor the voltage should change according to how much you bend the sensor. The voltage reading should not go above 3.3v. If all is good connect the signal wires from the flex sensors to the analog inputs 0 and 4 (directly next to the Gnd wires.)
That's it! Now when you flex the sensors the servos should move according to how much and how fast the sensor is bent.
Step 6: Servo Reversing
Sometimes it's necessary to have a servo that turns in a direction opposite of the other servos you're using. I needed to do this for one of the servos that will raise and lower the "fans" on the side of the helmet since that servo is flipped around. If I didn't do this then one fan would rotate upward while the other one rotated downward.
There are two ways to reverse a servo's rotation: buy a special connecting cable or modify the wiring in the servo. I chose to modify the wiring. These instructons apply to the Hitec HS 300 servo but most servos are similar in construction.
1- Remove the screw holding the servo wheel/bellcrank
2- Remove the screws holding the servo case together
3- Remove the bottom portion of the servo case, exposing the drive motor
4- Reverse the position of the two motor wires
5- Remove top of servo case, paying attention to the gears and their positioning
6- Remove the retaining nut for the potentiometer
7- Remove circuit board from bottom of servo
8- Remove potentiometer
9- There are three wires connected to the potentiometer- swap the two end wires. Do not touch the center wire
10- Reassemble servo
Step 7: Additional Info
This barely scratches the surface of the capabilities of the MAKE controller. There is a ton of info on the MakingThings website: http://www.makingthings.com
The digital ouputs of the controller's application board can be used to hook up everything from lights and motors to actuators and solenoids so if you want to build a 1000lb. animatronic dinosaur that moves and roars as people walk by your house it's definitely possible. You could even use solenoid/electronic air valves and use air muscles.
As for the analog inputs, they can accept switches, motion sensors, gyroscopes, potentiometers, etc. Just about anything that can generate a sigal up to 3.3v can be used since the board has a built in analog to digital converter. One of the things I've been looking at is using a two axis accelerometer.
It could be hot glued to a cap on the top of your head and as your head tilted forward and back or side to side it would put out a corresponding voltage from 0 to 3.3v and its input voltage is 3.3v which is perfect for connecting to the MAKE controller. Accelerometers like this are often used in video game controllers as tilt sensors.
There is a really great page on all kinds of sensors here:
Both the inputs and outputs are powered but they can only provide so much power. Each of the outputs is limited to 1amp. Fortunately you can just move a jumper on the application board to provide a seperate power source for both inputs and outputs. All in all, the MAKE controller is a dream come true for anyone that wants to build animatronics/motion control systems.