Introduction: How to Halloween Skull and Bones

Did you watch some of the amazing Halloween props on Youtube? I did and was determined to create one of my own. I first wanted to create a halloween prop over a year ago, but the parts arrived late and I skipped last years Halloween.

This year I had plenty of time before Halloween arrived, so.....

When this project is finished, it will gently glow the eyes and play a happy song. When someone triggers the motion detector, the hand will point to the intruder, the volume will go up, the scary sound effects will play while the eyes blink violently. Once there is no more activity in front of the sensor, the hand will return and the device will go back to idle mode again!

This tutorials comes with all disclaimers, including but not limited to burning down your house and causing a heartattack on your grandmother...

Step 1: Getting the Required Stuff

Arduino Mega (or use a compatible clone)

Motion detector (also known as PIR sensor)

Servo motor

DFPlayer mini MP3 module

Micro SD card


Small speaker (2 Watt I think, quite small)

Some resistors (2x 330Ohm, 2x 1KOhm)

3*AA battery enclosure

9 volts powersupply for arduino


Bag of bones to your liking

Old cloth

Some leftover wood to build the project on

Soldering iron and solder

Some isolation tape (black)

Step 2: Building the Base

Cut yourself a base from the leftover wood, mine is an oval about 50 cm by 20 cm. On the base you need to create a standing base in which to fit the servo motor. I attached two small pieces of wood to the base using angle brackets. I then inserted the servo in between the pieces of wood. I taped the top of the standing base (with the servo motor in it) with black tape to make it less visible. On the rotor of the servo motor I attached a thin piece of wood to apply the hand.

Step 3: Preparing the Skull

I drilled two holes in the eyes of the skull. I then attached two 40 cm wires to each of the red leds. The wires were then fed through the hole in the eye and the led was hot-glued in place. Through a third larger hole in the bottom I retrieved the led wires using a piece of electrical wire with a hook bend at the end.

Step 4: Attaching All the Wiring

Please have a look at the Fritzing image attached. If you are new to this, it may be a bit overwhelming at first. Just follow the wires and connect one by one to it's correct place in the scheme. It will take some time. The distance sensor to the right of the arduino should be a PIR sensor (requiring the same amount of wiring, check your sensor and / or the image for the correct wiring). The image lists a 2x AA power, but you probably need 3x AA to rotate the servo.

Step 5: Uploading the Data

There is one file missing here as it is copyrighted. It is the file 0003halloween.mp3 which will be the idle tune playing when there is noone around. Please copy all the files (and your favorite idle song named 0003halloween.mp3) to a folder MP3 on the micro SD card. Insert the SD card to the DFPlayer's card reader.

Install the Arduino IDE software from You will need to add the MP3 files as a library to the Arduino software (look at for instructions if neccesary).

Now attach a USB cable between the arduino and your PC, check on which COM port your Arduino is connected (and configure the Arduino software accordingly). Load the .ino file in the Arduino software and upload the file to the Arduino. It *should* start testing the different components:

1. Light up the eyes

2. Play a song

3. Rotate the servo motor back and forth

4. Calibrate the sensor (this will take 30 seconds, be patient)

Then it should loop idle until a kid triggers the motion sensor!!!

Step 6: The Finishing Touch

I had an old black (ideal for Halloween) cloth lying around. First lay down the cloth and place your project on top of it towards the back. Take the front of the cloth and wrap it over the project (but not the hand of course). Now place the skull on top of the cloth (keep the wires to the skull hidden) and locate the motion sensor in an appropriate place. Add some more bones to the project to your liking and power on your project.

Happy Halloween!!!

Step 7: Some More Thoughts

Originally I intended the head to be mounted on the servo motor. As my engineering skills aren't up to par, I ended up with a stationary head and moving hand. Feel free to place the skull on the servo motor for added effect.

I also had the idea to dress the result up with a t-shirt (this is why I have an oval base the size of a chest). Hanging by a few strands of clear wire, "floating" in mid-air with a rotating head and a few arm bones dangling would make the ultimate version, but alas.... May be in the future...


patsensei (author)2017-04-20

Hi again. I hope you don't mind me asking a coding question. While
the skeleton is talking I got the head swiveling really well using the
below code to the ReturnHead(); function.

void ReturnHead() {

for (pos = 60; pos < 110; pos += 1) {
myservo.write (pos);
delay (30);
for (pos = 110; pos > 50; pos -= 1) {
myservo.write (pos);
delay (30);

for (pos = 50; pos < 100; pos += 1) {
myservo.write (pos);
delay (30);
delay (1000);
for (pos = 100; pos > 80; pos -= 1) {
myservo.write (pos);
delay (30);

works very well for the first song(0001.mp3) however in all the other
songs (0002 ~0012) the skeletons head does not swivel at all. Is there
any easy way for me to adjust the code so it's head will swivel during
all the songs?

If not then I will just add the servo to another arduino UNO. Thank you

feel bad to ask you this technical question because it isn't really in
the scope of your tutorial. So if you are too busy to answer I totally


Kapitein Haak (author)patsensei2017-04-21

Hello Patsensei,

No problem asking for help. The swiveling during the other songs isn't done in my script, but you should be able to add it (though the blinking of the leds might take a hit).
In the original code you will find the following lines:

if (play_state == LOW){ // there is a song currently playing
previousMusicMillis = millis(); // remember time for future
BlinkEyes (); // set the eye leds to the next value

You could change this piece of line to:

if (play_state == LOW){ // there is a song currently playing
previousMusicMillis = millis(); // remember time for future
BlinkEyes (); // set the eye leds to the next value

You can then create a new void RotateSkull() {} where you change the position of the skull. The BlinkEyes() is called * a lot * of times a second to make them blink, so in the RotateSkull you should not rotate it every time, but use a timer and rotate the head once every few times.

Best of luck!
Kapitein Haak

patsensei made it! (author)2017-04-13

Hi again

Kaptein Haak. With the help of your code and idea I could improve a lot on my last effort.

got my arduino mega last week and i picked up a cheap skull from ebay
so I added a small servo attached to the jaw. Somehow i figured out how
to code it with microphone module that picks up sound and map that out
to servo movement to jaw. Also i attached another servo to the neck so
it swivels.

Only problem is i want it to swivel more. What part of
the code can I adjust so to get the neck (which is the hand on your
example) to swivel and turn more?

I will attach some for images.

Kapitein Haak (author)patsensei2017-04-13

Hello Patsensei,

Your project looks impressive! You can change the angle of rotation in the function FaceHead(). Right after attaching to the servo (myservo.attach (5); ) you can change the angle (myservo.write (90); ). Just use a higher number (do not go further then the servo is designed to go). You could probably use 180, which would make the head turn the other direction. You may need to increase "delay (200);" just a few lines later in case the servo needs more time to turn.

Best regards, Kapitein Haak.

patsensei made it! (author)2017-03-07

Hi Kaptein Haak. I'd just like to thank you for the great
instructable. I just finished my "Halloween skull and Bones". You really
inspired me. There is no way I could have done it without your great
tutorial. Everything seems to be working.

The sounds are good, and the servo is working as expected also the PIR is perfect.

Only thing is the eyes don't fade. I used the same pins and just copied your code over so not sure what happened. Any ideas?

Anyway in the meantime I am just doing

digitalWrite (ledPin, HIGH);

digitalWrite (ledPin2, HIGH);

It's a long time yet till halloween but I'm going to try and improve on this. Thank you!

Kapitein Haak (author)patsensei2017-03-08

Hello Patsensei!

Great to hear you finished the instructable and (almost) everything is working. The fading of the LEDs is controlled by the AnalogWrites.

Could it be that you are using a Arduino UNO? For the AnalogWrite command to work the LEDs need to be connected to a PWM pin on the Arduino. On the Mega, both pin 9 and 12 are PWM. On the UNO only pin 9 is PWM (and can use AnalogWrite).

While you are still improving, you may want to replace the speaker with a 3,5 mm female audio connector and hook it up to an amplifier. You will need to connect the connector to the dfplayers DAC_L and DAC_R pins. The sound is OK indoor with the speaker, but hardly audible outside.

I am currently working on a new project which includes a Magic Mirror for Halloween 2017 ;-)

Please let me know if you fixed the LEDs. You could always connect a new LED to a PWM port (9) and GND (and hook up a resistor). Then load the Example, 03.Analog, Fading example in the Arduino. It *should* just work, after identifiying two working ports, you can alter the Halloween.ino to match these ports and upload it again.

Best regards, Kapitein Haak.

patsensei (author)Kapitein Haak2017-03-08

Hi. Yes, I'm using a uno. But actually I've ordered a mega and it's due to arrive in a few weeks so I'll wait for that. I'm pretty excited!

Right now I've got the dfplayer connected up to DAC_L and DAC_R pins to 3,5 mm male connector which goes into the speaker. You said i should connect that up to an amplifier. (I thought the dfplayer already had one in its circuit?) Anyway, I have a cheap one from ebay (LM386) arriving in a few weeks so will try it out with the mega. Thanks again. Im going to check out yr other tutorials.

RichardN81 (author)2016-10-20

Why do you use a Mega instead of an Uno or another version of Arduino? I'm new to Arduino, and my inexperience may be showing (glaring?). This will be a great project for next Halloween.

Kapitein Haak (author)RichardN812016-10-20

Hello Richard,

I used a Mega because it was really cheap with a lot of components. I got myself something like this: It included a Mega which has way more inputs/outputs then the Uno and has more RAM. When you go for the original Arduino the price difference is quite high. You can probably run the project on the Uno, but no guarantees (and you may have to change some port numbers).

Best regards,
Kapitein Haak.

Swansong (author)2016-10-05

This came out really well! Your instructable is laid out really well too. I look forward to seeing the floating version when you decide to make it. :)

Kapitein Haak (author)Swansong2016-10-10

Hello Swansong,

Thanks for the compliment! It may take some time before a floating version comes from my hands. But maybe someone else will create a proper version ;-).

About This Instructable




More by Kapitein Haak:How to Halloween skull and bones
Add instructable to: