Pololu Blog »
Simple Animatronic Skull
If you have been following our blog, you have seen some fun and scary Halloween projects posted by my coworkers here at Pololu, so I thought that I would share the first part of the prop for my costume this year. After watching an animatronic devil baby terrorize New York City, I knew I wanted to build a similar demon baby that would be attached to me with a baby carrier.
![]() |
Implementation
After finding a small skull at a local Halloween store (for 4 bucks!), I was ready to throw some servos into it. Using hot glue, I attached two HD-1705MG high-speed mini servos, one for the jaw motion and one for the neck motion. I also decided to add two 8mm addressable RGB LEDs into the eye sockets of the skull. For controlling the servos and LEDs, I used an A-Star 32U4 Mini SV. The LEDs are powered by the A-Star’s 5V output, which is regulated by the onboard switching regulator. With the Arduino Servo library and our Arduino library for WS281x-Based Addressable RGB LEDs, I was able to get this skull animated quickly. Below is a GIF that shows the skull in action and the program I used for the demo:
![]() |
Simple animatronic skull laughing. |
|---|
#include <Servo.h>
#include <PololuLedStrip.h>
// Create an ledStrip object
PololuLedStrip<12> ledStrip;
// Create a buffer for holding 2 colors for the eyes.
#define LED_COUNT 2
rgb_color colors[LED_COUNT];
// Create servo objects to control neck and jaw servos
Servo neck;
Servo jaw;
void setup()
{
delay(500);
// attaches the servo on pin 2 and 3 for neck and jaw.
neck.attach(2);
jaw.attach(3);
// set eyes red
colors[0] = (rgb_color){ 30, 0, 0 };
colors[1] = (rgb_color){ 30, 0, 0 };
ledStrip.write(colors, LED_COUNT);
}
void loop()
{
// move neck 180 degrees and laugh
neck.writeMicroseconds(400);
jaw.writeMicroseconds(1200);
delay(400);
jaw.writeMicroseconds(1400);
delay(100);
jaw.writeMicroseconds(1200);
delay(100);
jaw.writeMicroseconds(1400);
delay(100);
jaw.writeMicroseconds(1200);
delay(1000);
// move neck back 180 degrees and glow eyes
neck.writeMicroseconds(2200);
for(int i = 30; i < 60; i++)
{
colors[0] = (rgb_color){ i, 0, 0 };
colors[1] = (rgb_color){ i, 0, 0 };
ledStrip.write(colors, LED_COUNT);
delay(20);
}
for(int i = 60; i > 0; i--)
{
colors[0] = (rgb_color){ i, 0, 0 };
colors[1] = (rgb_color){ i, 0, 0 };
ledStrip.write(colors, LED_COUNT);
delay(20);
}
for(int i = 0; i < 30; i++)
{
colors[0] = (rgb_color){ i, 0, 0 };
colors[1] = (rgb_color){ i, 0, 0 };
ledStrip.write(colors, LED_COUNT);
delay(20);
}
}
Complete parts list
- A-Star 32U4 Mini SV
- Power HD High-Speed Mini Servo HD-1705MG
- Addressable Through-Hole 8mm RGB LED with Diffused Lens, WS2811 Driver
- Premium Jumper Wire 50-Piece Rainbow Assortment M-M 3″
- Pololu Stamped Aluminum L-Bracket for NEMA 17 Stepper Motors (This is temporary; I will be attaching the head to a doll in the near future.)
- Battery pack
- Skull with hinged jaw
|
|
Looking forward
Like I mentioned earlier, the goal is to make a full animatronic baby that I would carry around with me so I can scare unsuspecting people (maybe I’ll go for a nice walk down the Las Vegas Strip). Look for an update soon.











