Don’t like context and pre-amble? Go to The Build. Be warned, this is a rather long post.
Distant History
Back in 2016 I’d just got to grips with using my 3D printer. It was still giving me a lot of grief but I was getting used to the niggles and workarounds needed to keep it printing. While we haven’t had much of a trick-or-treat culture around our neighbourhood for several years, I had a hankering for a fun Halloween decoration and decided I’d try to 3D print a laughing skull. I went looking for an open licensed skull that I’d be able to modify to take a motor and hollow out to fit some electronics. To my delight and disappointment I found a model on Thingiverse by user death_metal that already had these modifications. Delight because I wouldn’t have to spend ages cleaning up a model to add cut-outs for hardware, disappointment because that seemed like the biggest part of the project. The skull is licensed under Creative Commons Attribution Share Alike.
I set about chopping the top of the skull off and created a cavity inside the top. This was one part hoping I could fit a board in there and one part hoping it would help with the print as I could flip the skull upside down and reduce the number of visible/external overhangs, minimising the need for supports and ultimately saving some print time. I then cut the biggest cavity I could out of the inside of the skull. Again, this was in the hopes of minimising print time.
The final modification I made was to flatten the bottom of the jaw a little to make printing easier.
Original Electronics
When it came to electronics I wanted the cheapest hardware I could find. At the time I couldn’t find an audio device for the Arduino for much less than the cost of a Raspberry Pi so I decided to use one of my Raspberry Pis for the audio. This caused its own problems as the Raspberry Pi isn’t 5V safe and the Arduino produces 5V signals. My first solution was to use I2C with the Arduino in slave mode so that everything would be safe but I ended up having reliability issues. My second attempt was to use a voltage divider as a make-shift level shifter. This allowed me to do all the sensor/motor work on the Arduino and send a simple signal to the Raspberry Pi at a safe level which would trigger the Pi to play the audio file. This worked but I was never really happy with it. I happened to have a large 10000mAh portable charger with two USB ports that was ideal for powering both the Pi and the Arduino.
Finishing
I didn’t have any more time to print more parts such as the neck or a base to house the electronics, speaker, sensor and battery. I settled on using a medium sized Amazon box with the skull precariously perched on top. I cut a hole through the side and taped the PIR motion sensor inside. This worked surprisingly well, the skull is balanced enough that it would launch forward on the box without falling off (most of the time). The final addition was going to be to drape some thin cloth over the box to give a kind of psychic medium vibe whilst disguising the shabby box, an addition I never got round to trying. You can see the final result in the video below.
Overall the project came out OK but the skull was smaller than I had anticipated and none of the electronics fit in the skull. I had measured to make sure the parts would fit but between the close fit and the number of wires it proved impractical to try and squeeze the electronics in the head.
The Second Attempt
Cut to 2018 and I wanted to take a second stab at it, this time not using a Raspberry Pi for the audio interface and preferably without having to print a new skull. I looked to see how much an audio board for the Arduino is now and was pleasantly surprised to discover that DFRobot have made a board called the DFPlayer Mini which is relatively inexpensive, you can get 2 for about £10 or 1 for about £2 if you’re willing to wait for it to ship from China. This is a big improvement over the £25+ required for other MP3 audio devices out there.
An alternative I had considered was to use an Arduino Nano and a Raspberry Pi Zero but unlike its larger siblings the Zero lacks a convenient audio output for a speaker. According to this Adafruit article it may be doable but it was more work than I was willing to put into this project a second time round.
I tested the DFPlayer on an Arduino Uno and it worked fine with no interference even when the servo was moving. Moving this to the Arduino Nano proved very difficul as the DFPlayer would lock up 90% of the time, sometimes taking the servo with it. I spent a lot of time tweaking with different pins, libraries and resistors until I came up with a solution thanks to some relatively obscure forum posts.
I posted a Youtube video documenting the circuits for both the 2016 build and the current 2018 build.
The image below is for the Nano version of the circuit however as the Arduino Nano is virtually identical in functionality to the Uno you can easily substitute an Uno, just look for the correct pin labels on the Uno and match them to the diagram.
The Build
This project is still somewhat a work-in-progress mainly because never worked out a good way of mounting the skull securely to a box that houses the electronics. The modifications I made to hollow out the skull for speed of printing and electronics installation have made it a little front heavy.
This build isn’t especially hard but it does assume some basic knowledge of both 3D printing and electronics. I’ve tried to make this guide as beginner friendly as possible but some small steps may be missing for readability.
You can get the STL files, code and laugh track at the Github repository.
Printing The Skull
These files are slight modifications from the version I printed in 2016. I haven’t tested them but the changes are minor and everything should work fine. In the original 2016 version I used pegs and sockets to hold the top of the skull together. I didn’t want to use screws as I felt they’d harm the scare factor. This ended with all the pegs breaking very quickly. Luckily the back of the skull was a tight enough fit that it sits snugly when fitted in place. The top of the skull however required gluing to keep in place which somewhat limited its use. As a result the new designs use small neodymium magnets to hold the pieces together. There are 4 slots in the top of the skull and 4 matching slots in the main body of the skull. You will most likely need to glue the magnets in the main body to prevent them being pulled loose but with gravity working in their favour this should be enough to keep them seated.
I personally went with chocolate brown as I felt it looked the most like a dirty old, gooey skull without needing to add detail with paint.
Files To Print
Skull Main – Print it upside down so that the teeth are at the top of the print. This reduces the need for support material though you may want to print with supports if you have trouble with the inside of the cavity collapsing. Mine drooped a little but as it’s an internal surface it’s not really a problem.
Skull Top – There are several versions of this. Print with a small amount of support material. The finish underneath doesn’t matter too much. When I originally printed this part I printed it upside down to minimize supports but this required too much clean up. With the magnet holders this also becomes a little impractical.
If you would like to try housing the speaker in the skull, print the one with the small speaker grill holes in the top.
If you are confident gluing the magnets without demagnetising them consider printing the version with the holes underneath as this should be easier to assemble.
SkullOnePiece – If you’d rather not bother with the split skull you can print the one piece which retains the cavity for the electronics but loses the separate skull top. For quality it would be best to print this right side up (teeth on the bed) but for speed and to minimize supports it would be best to print this upside down.
Skull Back – Somewhat optional. If you’re going to have the skull against a wall you might be better off leaving it off as you won’t see it and wiring will be easier without it. Having said that it may help balance the skull when it’s mounted on the
Jaw
Base Top – Optional. This attaches to the base and allows the skull to sit nicely on it.
Base – Optional. Use this to attach the skull to a sturdy box, preferably one with a removable lid. If you find the base warps, try printing it 30-45 degrees on the bed as this should prevent the legs being in the same orientation as the filament.
Printable M8 washer – Optional if you have real washers lying around.
All files were printed at 0.3 layer height with minimal supports and 2 walls.
Things You’ll Need
A note on links. Some links provide more units than you’ll require for this build but this usually results in lower prices per unit and gives you a safety buffer in case of failures. The links below contain affiliate links, these help further developments on this site and it is appreciated but not required for you to use them.
Arduino Uno/Nano
Get an official Arduino to support future development
Get a 3rd party Arduino with extra features if you’re looking to save money
HC-SR501 PIR sensor – You can get individual units but they’re cheaper and more readily available in multiples and I’m sure you’ll add more to other projects in the future
Mini DFPlayer – Wav and MP3 player – You can get them cheaper but not if you want them quickly
Micro SD card – You really don’t need anything this big but it’s almost impossible to find something under 16GB these days
1 x 1000 ohm resistor
2 x 100 ohm resistor
Get a resistor pack with a huge variety of resistors
IN4001 Diode – Optional but can help with some DFPlayer issues any diode that can drop the voltage from 5V to about 4.5V should be OK.
2 x Red (or blue) 3V LEDs – Again you don’t need anywhere near this many but if you’re an existing electronics hobbyist you’ll most likely have some or if you’re getting started and looking to have a life-long hobby you’ll probably get through these in no time
Mini Breadboard – If you’re good with soldering you could get away with a medium sized perfboard for a more permanent setup.
Acrylic breadboard mount – This is optional but helps keep the Arduino Uno and breadboard close together. It can then be glued into the box to stop them moving around. These often come with a 3rd party Arduino so check the listing if you choose to buy one. You could also try printing your own custom mount for the hardware you use.
4ohm/3W speaker or portable mini speaker – I would recommend the portable mini speaker, it should have more presence and bass.
3.5mm socket (if using the portable speaker)
Portable USB Charger – The bigger the better but a small 2000mAh one should give you a good few hours of runtime, enough for a night of Halloween fun.
8 x 5mmx1mm disc magnets – These are used to hold the skull together
1 x M3x30mm screw
4 x M3x20mm screw
4 x M3 nut
Heat shrink tubing or electrical insulation tape
Super glue or hot melt glue and glue gun
A locking food storage box or old Amazon/similar cardboard box.
Some fabric sheet to cover the box. I’d recommend something purple or red to give it a bit of a magician’s skull vibe.
About 7-10 hours of print time
About 90 grams of chocolate brown filament (or white filament with brown/beige paint)
Wiring
The wiring for this project is pretty simple. The DFPlayer communicates using just 4 wires. The LEDs use just two digital or PWM pins for their signals and another two for ground. The PIR motion sensor uses 3 wires. The servo communicates via 3 wires, two for power and one for signal.
If using the portable mini speaker you’ll need to wire up a 3.5mm stereo jack connector. Solder a black wire to the middle terminal (it may be labelled 1). This is ground. Solder a red or yellow wire to either of the other 2 terminals. This will be your signal wire. I don’t think it should matter which but I chose the left terminal, labelled as 3 on my connector. I found it best to plug this into the speaker outputs of the DFPlayer, not the DAC connections.
Code
You can get the Arduino Sketch from the Github repository. Everything should be fairly well documented but be sure to leave a comment on the Discord or Twitter if there’s anything you don’t understand. The basic idea is that the sketch tries to connect to the DFPlayer. Once everything is initialised the loop will run. It will read the signal from the PIR sensor and if it has just been triggered high it will begin the laugh animation. The animation consists of reattaching the motor, sending a signal to the LEDs to turn on, sending a signal to the DFPlayer to play the provided laughing track then moving the servo to open and close the jaw in time with the audio. Once the animation finishes the LEDs will slowly fade out.
Choice of Box
The removable lid of a food storage container should make it easier to run wires and mount the skull. You’ll need to measure the electronics, battery (and speaker) to find the right size food storage box for your needs. I would imagine a 1 litre box should provide enough room.
Post Production
Clean Up
You will probably require a little bit of clean up on the prints, removing supports and pulling of strings on smaller parts like the teeth and septum. You might also need to do a little sanding around the jaw spokes.
Painting
If you printed in white now would be the time to really dirt up the skull, have a look at some references of old skulls, add yellow and brown paint where appropriate.
If you printed in brown you may still want to add some paint details, lighting a few places or maybe adding some dark red where you think left over muscle and fibre would be. Again, have a look at some reference photos of zombie skulls.
Wiring and Installing the LEDs
My initial attempt was a bit hacky, I used some female jumper wires and plugged them into the ends of the LEDs. I then glued both the wire housings to the LEDs and the LEDs to the skull. This worked but I’ve been nervous about shorts ever since so the way you’re going to do this is hopefully much safer.
Cut two long lengths of wire, one red and one black and strip both ends of each wire. Solder the red wire close to the bulb of the LED on the longer lead, if you have multicore wire you might find it easier to wrap the exposed end of the wire around the lead a couple of times. This is the positive terminal. Now cut any excess off the long lead. Repeat this step for the shorter lead with the black wire. Now test the LED still works by plugging the red end into the resistor and the black end to ground. If it’s working wrap the leads with some electrical tape or heat shrink tubing so that the metal of the leads and wire are covered. Place a small amount of super glue on the bulb and carefully place the LED into one of the eye sockets inside the skull, hold it until it’s set. Alternatively if you’d prefer not to use super glue you can try using some hot glue but this will likely be more messy and you risk getting glue between the LED and the skull. Repeat the above steps for the second LED.
Assembling The Jaw
Attach a single arm horn to the servo motor and slot this into the receptacle in the jaw.
It’s worth getting an M8/M10 washer (or two) to put over the motor-side spoke of the jaw as the fit can be a little loose and this can cause issues with the motor. The washer will push the jaw closed, keeping the horn attached firmly to the motor. You can try screwing the horn into the motor before hand but it might make fitting the motor and jaw more difficult. You may find that you need to add some glue to hold the horn in place especially if you only have a tapered horn like I did.
The jaw should be flexible enough to (gently) squeeze into the main body of the skull. It is best to try and slot the motor into its socket as you do this. It can be fiddly but can be done.
Run the wire for the servo up through the large slot under the skull and out the back of the cavity.
Assembling the Base
If you printed the optional base, cut out a hole in the top of your box wide enough to fit the base cylinder. Slot the base through the bottom of your box lid. At this point you could either hot glue the base to the box lid. If you’d rather attach it with screws, mark the 4 screw holes. Drill the holes for the screws. Screw the base into the box lid. grab a M3x30mm screw (shorter might be OK). Place the screw through the top of the base top and tighten it into the column of the base. You may need to ream out the holes just a little bit to get the screw to fit but don’t go too far or the screw won’t have any plastic to hold on to. If you find this is the case, try adding a little bit of super glue into the hole and let it set before trying to tighten the screws again. The base should now fit snugly below the servo
Fitting The Speaker
This part is optional. If you’d like to mount the non-amplified speaker inside the head now is the time to do so. Glue the speaker to the top of the main skull print using some hot glue.
Feed the wire either through the large hole at the front if you’ve managed to get the electronics in the hollow or through the small wire to the rear of the skull if you plan to house the electronics in a box.
Assembling the Skull
You can skip this step if you printed the one piece skull.
If you don’t plan to use the top cavity for anything you may want to just glue the top of the skull to the main body of the skull. I split the skull here mainly so I could print the skull upside down for stability though I originally had hoped to be able to fit some electronics in there. However if you’d like to be able to remove the top you can perform the following.
Fitting the magnets may be a little fiddly as you need to reach over the lip of the holder in the top of the skull while making sure they retain the same polarity as the ones in the main skull. The magnets in the skull top shouldn’t need gluing in place though you can try if you feel like you’ll be manhandling the skull a lot or if the magnets are loose in the socket. You may find it helpful to take a few spare magnets and line them up from underneath to help seat the magnet in its socket. Repeat this step for the magnets in the main skull but this time add a little glue to make sure they’re not pulled loose when you remove the top of the skull.
Final Steps
Cut a hole about the size of the PIR sensor dome in the side of the box. Push the PIR through the hole and tape it to the inside of the box.
If you printed one, cut a hole for the long stalk of the 3D printed base. Push it up through the hole. You could use some hot glue to stick the base in place under the lid or drill some holes for screws. If using screws feed them through the box lid and finish with a nut on each screw to hold the base in place. Finally take the 3D printed base top and screw it into the stalk of the main base, tighten until both parts are flush and level.
Cut a large hole in the lid of the box or cut a groove in the side of the box from the top down to run wires through. The hole in the side will make it easier to remove wires and adjust things but drilling a single hole in the top will be quicker and easier, it’s up to you. If you’re good with a saw you may want to consider removing most of the rear side of the box as this will allow easier access without having to fiddle with the lid.
Take your assembled breadboard and Arduino and place them in the box alongside the battery pack. If you want you can remove the backing from the breadboard and stick it to the box. If you have them you can use some nylon screws and nuts to mount the Arduino in the box. You may also want to strap the battery to the box with some velcro to stop it knocking into the electronics. Finally connect any remaining wires into the breadboard such as the eye LEDs, servo motor and PIR sensor.
Now that your electronics are all wired in the last thing to do is cut a hole in some fabric and drape it over your base. This just hides the mess of wires and blinking lights from the electronics. You may want to add some additional spooky decorations to distract from the boxy shape.
Finally place your skull on the edge of the box and it’s ready to go! Just make sure it’s steady enough not to fall off. If you’re using the 3D printed base you should place the skull on the top. If you find it a little loose you might want to add some hot glue between the base and the skull. Try to avoid gluing the servo. This will make the installation fairly permanent but if you need to make modifications it should be possible to peel apart.
Future Improvements
I’d quite like to print a life-sized skull but this would take quite a bit of engineering. The average human skull is just a little bigger than my printer’s maximum build volume and even scaled down to fit would result in print times longer than I’m usually comfortable with. Another big issue with this is resizing the head without resizing the motor housing but also being able to move the housing closer to the jaw.
There is still room for additional features regarding the software. One feature I would have liked to have added is a potentiometer for laugh delay. If the room is going to be busy, frequently visited by people unaware of the skull (like trick-or-treaters on your porch) you could turn the delay right down but if you’re going to be in a room with a fairly static population then a longer delay would be better as it will catch out newcomers and those with short memories without triggering so often that people end up hating you.
I also thought it would be nice if the skull could play some ominous spooky music during long periods where it’s not laughing however I found that the unamplified speaker wasn’t capable of producing the bass tones associated with such music. Since first writing this post I have managed to get the amplified speaker working with the DFPlayer board however it’s not quite right yet so I’ve left this as a possible improvement.
There’s even room for a second potentiometer to control the volume but this is only really necessary if you don’t use a powered speaker.
I’m still working out the best way to keep the skull hollow but improve its balance for mounting. I suspect keeping the back of the skull attached should help with this as it should move the centre of gravity further back and down though this is currently untested.
If this project proves popular I may design an Arduino shield for the DFPlayer and servo/PIR connections or a general PCB for mounting a Nano and all the hardware in one place. Let me know what you think.