I found this 3D file on Thingiverse by Micropuller. I quickly realized that the file creates an oversized eye unit. But I still wanted to explore creating an animatronic face that I could control with an Arduino.
The more I thought about it, the more I thought that I could create a creature head that could be controlled with an Arduino, a Pololu servo controller, and an input device. I had a Wii Nunchuck sitting around waiting for a project, and the opportunity to use the joystick and accellerometer and the two switches made me think that you could do some really detailed puppeteering. Usually, effects houses use an RC controller. Modern controllers can be programmed to limit servo motion and create multiple servo movements.
Using the Arduino, I can program any variety of movements using all of the Wii Nunchuck sensors.
Step 1: The 3D Pattern
I have a friend with a Makerbot Replicator 2, fortunately. He was willing to print out all of the parts from Thingiverse.
There were a few problems with the original design. Mainly, the 9 gram servos wouldn't fit into the spaces provided. The problem is that the servo wires stick out of the servo. I could not get the servos to slide into the slots.
I had to use a dremel tool with a router-type bit to make a passage for the wiring to go through. Otherwise, the 3D file worked great. I really like the idea of using a universal joint to allow the eyes to move in all directions.
Step 2: Adapting the Eyelids
After test-fitting the pieces, I realized that the 3D printed eyelids will not actually close. I looked over the Thingiverse files and reviewed the video.
So I decided that I could replace the printed eyelids with 20 gauge wire. I had some solderless ring tongue electrical connectors around, and they seemed to be a perfect rotation point. I crimped them onto the wire and also put epoxy in to help stabilize the connection.
I moved the ball and socket connections from the inside of the eyeballs to the outside. This gave me more movement. It did create a problem on the outside eyelid support. I had to dremel the outer part off and attach a piece of scrap plastic to move the eyelid support out far enough so that the ball and socket didn't catch when moved to extreme positions. See the next to the last photo to see the added piece and the 6-32 bolts that go through the solderless ring tongues of the eyelid wires.
I used epoxy putty to attach two control rods into a single rod for the upper and lower eyelid servo control. Epoxy putty was also used to create attachments for the ball and sockets attached to the eyelid wires.
I found that a 9 gram servo was not powerful enough to move the eyelid open/close mechanism. I used a standard servo instead. It was easy to dremel out a support and the servo fit neatly in the same location.
For the slider mechanism, I just used two diameters of brass tubing. One was small enough to slide over the larger. I used epoxy putty to fill in the 3D printed slide mechanism and hold the larger tube. The smaller tube neatly fit into the guides on the base. It slide easily. The problem is when the eyelids are closed, the mechanism is pulling straight back to open them again. I had to adjust it so that the wires don't close completely. The plastic eyelids hang over the wire edge about 1/4 inch so that the wires never close too much, yet the eyelids themselves do close all the way.
Step 3: Eyelids Attached
I used clear two-part plastic balls from the hobby store. I spray painted the inside with metallic brass paint. Then I made some little brass tabs to fit onto the eyelid wire. I carefully drilled a hole and tapped the brass pieces for 6-32 so that I didn't need a nut on the back. I did have to use a dremel to remove a bit of material where the solderless ring tongues were in the way.
Step 4: Bits and Pieces
I am using a Pololu SSC to control the servos. I got mine from Sparkfun for only $18 and it controls 8 servos.
The brain is an Arduino Uno, currently. I have the Wii Nunchuck attached to it. I am using the x-axis of the accelerometer, the joystick, and the two buttons to do various things.
I added Adafruit Neopixels for the eyes. Pressing on the Z button not only angles the eyelids, but it randomly chooses a color for the eyes. I am amazed at how bright the Neopixels are.
In part two I will add a face, and an audio player connected to a level detector to control a mouth mechanism.
You can view a video of it in action HERE.
Step 5: Addendum
In response to a comment, I am adding a bit more information.
Here's an INSTRUCTABLE that tells how to create an adapter for your Nunchuck so you don't have to cut the cord and solder the wires to pins. I, however, did cut the wire and soldered pins to connect to the Uno.
Todbot's site also has several projects using the Wii Nunchuck along with great explanations on how it all works.
This appears to be a new library for using the nunchuck. It seems to have more accurate reading of data. There is another library listed in the Playground Input section, but I didn't try it out.
Here's a link to the Sparkfun site that sells the Pololu SSC servo controller. The site has a good Arduino library and a tutorial on putting the board together. It is easy to solder the kit. I did find that if I powered the SSC servo power with the same transformer that was running the Arduino, it crashed. The transformer seems to have plenty of power to run everything. All I know is that as soon as I ran the servo power from a different transformer the error problems stopped. I am running the SSC power to the board itself from the Arduino's 5volt out pin.
On the Adafruit site, look for the Flora RGB neopixels. You can buy them in sheets of 4 or 20. The site has a great library for Arduino, and a tutorial on how to hook them up.
I have attached the Arduino code to this page. Comments will tell you which servo I had on which SSC channel. The commented code also tells which pins are used for the Nunchuck and the SSC.
I hope that this information is more helpful.