Arduino powered Haunted Mansion Halloween

21 Dec

As I posted previously I wanted to put together a Halloween display emulating my favorite Disneyland/world ride of all time. Originally this was just going to be four heads on a table with the Haunted Mansion’s “Grim Grinning Ghosts” playing on a loop.

After I started learning to program my Ardunio this evolved into a photocell actuated video on demand Halloween display. I used an example I found on to control a Dell Mini 9 laptop using AutoHotKey. When the photocell switch it tripped the Arduino sends a serial signal to the Dell laptop which is converted to a keystroke by AAC Keys which in turn triggers the below AutoHotKey Script and finally plays back using VLC.

I had access to a industrial photocell switch (just like at Disneyworld!) which required an additional 12v power supply but I imagine this could be modified to work with a cheap ultrasonic or IR range finder.

This AutoHotKey script is running on the PC waiting for the “a” key to be pressed. When the key is pressed VLC launches full screen and ignores input for the duration of the video (60 seconds). It then closes VLC and waits to be triggered again.

Run, c:Program FilesVideoLANVLCvlc.exe -I rc "VIDEO_FILE_NAME"
Sleep, 61000 ; Pause for video to play, prevents triggering multiple times.
Process, close, vlc.exe ; Kill vlc and make sure it stays dead.

This Arduino sketch waits until the Photocell switch on pin 2 is tripped, then sends a serial character to the Dell laptop it’s connected to. It also ignores any input during video playback to avoid confusing the computer.

Serial Keyboard
Used to send keystrokes to a Windows PC running AACKeys.exe which
turns serial data into keystrokes. Best used in conjunction with
Examples and idea based on the work of and
information from
TheNewHobbyist 2010 
// Initialize variables
const int buttonPin = 2;
const int ledPin =  13;
int buttonState = 0;
// Set inpout/output and start serial
void setup() {
pinMode(ledPin, OUTPUT);      
pinMode(buttonPin, INPUT);
// Main code loop
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {     
digitalWrite(ledPin, HIGH);
Serial.print("a"); // send key to PC to start video playback
delay(61000); // ignore input until video ends
else {
// turn LED off:
digitalWrite(ledPin, LOW); 

Here are the installation photos and video compilation (note: the audio is a little out of sync after uploading to youtube).

While we didn’t get too many trick-or-treaters this year the ones that stopped by after dark really enjoyed it. I’m really happy with the way this turned out and I recommend anyone new to Arduino give it a shot. It really wasn’t hard to put together and they payoff was great.

  • Pingback: Halloween hangover: talking heads - Hack a Day()

  • bbsux

    What about the main rooms and ballroom? Don’t they use some kind of projected image onto a clear woven fabric or something?

    • chris

      @bbsux That illusion is called “Pepper’s Ghost” and it actually quite old. It’s really not too hard to pull off but it helps if the viewer is in a stationary location. You can see a better explanation on Wikipedia.

  • Nathan Byrer

    This is really cool. I’m thinking of building this for our Halloween display this year. I think my son, daughter, and I would have a great time putting all of this together. It would be a great project to introduce them to programming. Thanks for sharing.

    • Ben Center

      How were the heads projected?

      • chris

        I pushed some rocking chairs across the porch to keep kids from messing with them. Beyond that they were just duct taped to a folding table.

  • What type of projector are you using? Mine takes too long to turn on/off for something like this.

    Also, lol @ hackaday being marked as spam. Nubs

    • chris

      I believe it’s the Hitachi EDPJ32 LCD Entertainment Projector. As for boot up/shut down I just left it running for the ~6 hours it was setup. It’s not great for the bulb life but I figure if it’s only once a year it wont do too much damage. When the video wasn’t playing it returned to the Windows desktop which was all black with icons and start menu hidden. So it appears to turn off but it’s really just displaying a black image.

      • Ah, black screensaver. Makes sense. I wonder if sanding the mouths down would yield a better result. Next year you should make a single giant head and then record yourself saying something.

  • Adam Swant

    So…. what did you use for projecting the faces? I really want to do this for Halloween this year and I think I understand all the other parts to this project. An “Instructable” would be awesome!

    • Adam Swant

      I guess I understand you used a projector but where did you get the video?

  • cody

    Hi. I tried everything I could think of, but I can’t get AutoHotKeys to work right. I just coppied and pasted it into a new script. Then reloaded the script and nothing. Arduino is hooked up to a switch and has the right script on it too. Can you help? Thanks!

    • chris

      No kidding? I would insert some Serial.print lines after each step of the Arduino code to make sure everything is working right. You can verify it by watching the Serial monitor in the Arduino IDE and making sure it’s going through the motions like you think it should. When it doubt, print it out!

  • nice to see the vlc getting its usage

  • Pingback: 3D Printed TTA Ride Vehicle | The Disney Blog()