For Halloween I made a talking skull prop with a moving jaw and animated eyes that reacts to door knocks. It came about from my interest in the Arduino microcontroller.
Basically I got an Arduino board and wrote some C code to control everything, and got a companion board to process the audio, and combined them with a board a friend designed that used the audio to create the servo movement (for moving the skull's jaw). I got some LED matrices for the eyes and used a program from off the web to make them look around and blink. I purchased a Lindberg skull, painted it and mounted a servo to move the jaw, and built the body frame from PVC pipe. I attached a set of speakers and used a PIR motion sensor to detect movement which triggers the eyes turning on. I taped a piezo buzzer to the door, which is what detects the knocking and triggers the audio and jaw movement.
See the video below to see the end result of the project...
Step 1: The Components
The following are the main components that went into making the skull:
- Arduino Uno Board
- Arduino Wave Shield from Adafruit
- 8x8 LED Matrices from Adafruit (2)
- Scary Terry Audio/Servo Driver Circuit, modified by dathomar
- PIR Sensor
- Standard Servo
- Piezo Buzzer
- Lindberg Skull
- PVC pipe components for the body frame
- Old set of speakers
- Cheap black cloth for the cloak
- piece of breadboard, wires, capacitors
Step 2: The Arduino
This project centered around my desire to learn the capabilities of the Arduino microcontroller, since I knew it was a relatively straightforward way of using inputs (PIR motion sensor and a buzzer) to cause desired outputs (servo movement, audio, and flashing LEDs), and to get some more practice at coding in C. I chose and purchased the Arduino Uno board. I got mine off Amazon, but you can also get them directly from the Arduino website or from a retail electronics store like RadioShack.
Step 3: PIR Sensor
I bought some PIR motion sensors through Amazon and used this helpful tutorial from Adafruit to learn how they worked. I mounted a single sensor on the skull prop's neck to detect when the kids would approach my door and then activate the LED eyes on the skull. I set the sensitivity potentiometer all the way up so that it would detect at the maximum distance, close to 20 feet. I set the time delay so that the detection time was almost a minute long, meaning that the eyes would stay on for about a minute minimum after the detection of movement.
Step 4: The Wave Shield
To make the skull produce audio, I decided to use Adafruit's Wave Shield for the Arduino. This allowed me to put my own audio files on an SD card, which I recorded using Audacity. The adafruit website has a nice tutorial that made it easy to solder together the board (a nice excuse to finally get myself some soldering tools) and explains very well the SD card and converting files with Audacity.
Step 5: The Piezo Buzzer
When I studied some of the common Arduino starter projects, I saw that a piezo buzzer could be used not only to produce sound as an output, but that it could also be used as an input to sense vibrations such as knocks. This got me pretty excited as I thought how Halloween would be the perfect time to use door knocks from Trick-or-Treaters to initiate behaviors from the skull. I mounted the buzzer on my front door, taped it down really well so as to pick up the knock vibrations as well as possible, and hid it using Halloween decorations. I routed the wiring so that most of the wire was on the inside of the door where it couldn't be seen. I connected it to pin A0 on the Arduino and coded it using the basic idea from this example.
Step 6: The Audio/Servo Driver Circuit
For the skull's jaw movement, I was originally going to connect the servo directly to the Arduino, and use code to move the servo while at the same time playing audio files for the skull's speech. But then I found out about dathomar's servo driver circuit board that was made based off of a design by Scary Terry. This circuit would drive the servo based off of an audio input, saving me from having to come up with fancy code to try and produce realistic jaw movement, since the various degrees of movement would all be done for me automatically by the servo driver circuit.
Step 7: The Skull and Body
I chose a Lindberg Pirate Skull for my "Scary Skull", as my kids so affectionately called it. It required a little bit of assembly, just gluing on the teeth and nose piece. I followed a suggestion to paint the skull with Aged Oak wood gelatin stain. This type of stain adhered very well to the skull's plastic, and even a small half pint of it goes a long way. The Aged Oak color was perfect for making the skull look authentic and centuries old.
The manner in which I mounted the servo, drilling a hole in the head through which the servo arm extended and connected to the lower jaw bone with wire, was inspired by samseide's Talking Halloween Skeleton. The idea of creating a "body" with PVC pipe and the black cloak look and speakers was also inspired by his instructable.
I got some PVC pipe and cut lengths of it for the neck and just enough of a frame to give the skull decent stability. I used a couple of nuts and bolts to secure the neck to the skull. The speakers I used to help amplify the audio helped give some needed weight to the skull body.
I bought some cheap black cloth at Walmart for the cloak, using command strips and pieces of Velcro to attach it to the PVC frame.
Step 8: The Eyes
I got a couple 8x8 LED matrices and backpacks from Adafruit to give the skull animated eyes. This example provided me some code to make the eyes search randomly around and made the skull seem alive. I got the 1.2 inch matrices, so I had to stick them on the outside of the skull eye sockets since they were too big to put inside the sockets. I used black electrical tape to cover the back and sides of the matrix backpacks. I wired up the matrices through the inside of the skull head and neck, as shown in the second picture above.
Step 9: The Code
This is a text file of how the final code looked. The following are code examples that contributed to the final product:
1) For the initialization, setup, and error-checking code related to the Wave Shield and SD card functions, I used the "daphc" example that comes with the WaveHC library, which I downloaded from the Wave Shield tutorial from Adafruit.
2) For the code related to the piezo buzzer knocking, I used the "KnockLock" example, under "10.StarterKit", that comes with the Arduino Uno software download.
3) For the code related to the PIR motion sensor, I used the following PIR example from Adafruit.
4) For code related to the LED matrix eyes, I stripped the eyes portion of this adavoice/wavface mashup.
Step 10: Putting All the Electronics Together
I wired the audio output of the Wave Shield to both the audio/servo circuit and to the speakers, so that the audio would be heard and at the same time activate the skull jaw. I used an old phone DC adapter rated for 5V and 2A, cut the plug off, and connected the leads to a piece of breadboard that I used for all 5V and ground connections. I added some capacitance to clean up some power supply noise that I found would get onto the piezo input and exceed the voltage threshold I chose for the "valid" knocks, causing the Arduino to respond when I didn't want it to. The capacitors didn't get rid of all the noise, but they reduced it enough so that I could choose a reasonable voltage threshold for the piezo.
I fit the Arduino with Wave Shield, the audio/servo circuit, and the breadboard piece all into a plastic box and used a Velcro command strip to attach it to the PVC "T" that formed the base of the neck. I then used some generic Velcro strips to reinforce the box and give some strain relief to the bundle of wires protruding from the box. I made sure the electronics and PVC body were hidden underneath the black cloak, with the exception of the PIR sensor, of course.
Thank you for visiting my Talking Skull instructable, and good luck with your own Halloween prop pursuits!