Introduction: Solid-state Halloween Controller and How to Build a Haunted House

About: Eric J. Wilhelm is the founder of Instructables. He has a Ph.D. from MIT in Mechanical Engineering. Eric believes in making technology accessible through understanding, and strives to inspire others to learn …

This was originally an article in Make 03 where my awesome editor Paul Spinrad actually made a replica of my controller and did a much better job documenting it than I would. For the controller board, if you need more explanation than "get a bunch of solid-state relays, connect them up to your parallel port, and go to town," check out the Make article. It also has an awesome comic that I have gone to pains trying to convince people that it doesn't star me.

With this Instructable, I'm putting in text that didn't make the cut for a size-constrained magazine article and creating a space to explore the latest options for computer control. The Win98 machine I had previously used to drive my controller can no longer by relied upon and I haven't yet conquerred external (parallel port, serial port, USB, ...) control with WinXP or MacOSX; hopefully we can collect some great pointers and links in the comments.

The original page describing this project is here.

Step 1: Background, or What Made Me a Bad Kid

During elementary school, my parents took me to a local Haunted House. In each room, you witnessed some gruesome scene; if you survived to the end, you got a grab-bag of awesome junk and candy. About mid-way through, there was a room lit by a single strobe-light, flashing at low frequency, and a guy in a hockey mask with a chainsaw. Maybe there was no chain on the saw, or maybe it was a weed-whacker? All I really remember is that I was terribly scared and I loved it. It was the first time I had seen a strobe-light and the saw was so loud I could feel it in my stomach. The experience was incredibly disorienting, and the feeling of terror and delight has stuck with me. No horror movie or ghost story has been able to top that low-budget, real-life fright.

As I grew older, trick-or-treating became more of a search for Haunted Houses than a search for candy and mischief. I was ever-hopeful that around the next corner would be that one weird guy who turned his garage into a haunted maze built from cardboard and bedsheets. I was never satisfied with what I found. “I could do better than that”, I often thought. So, for roughly the last ten years I’ve been perfecting my technique of scaring kids and handing out candy. In this project, I will show you how to build the tool I use most frequently in my haunted creations and give you some ideas for your own Haunted House.

Step 2: Controller

Without doubt, the best Haunted Houses are run by humans. People hiding under sofas, waiting for just the right moment, can always make the best scares. Unfortunately, I didn’t always have the manpower I wanted, and so resorted to computer control. The parallel port is the easiest way to interface external, homebuilt devices to a computer. It has 8 output pins that can directly operate LEDs and relays, and for more complicated projects it can be connected to a register to control even more devices.

In this project, you will build a simple circuit to switch on and off AC or DC via computer control. You can then write code to sync lights, motors, fog machines, pumps, laser pointers, and other things to computer generated sounds using the parallel port.

Step 3: Materials

Solid-state relays – These are optically coupled triacs with a logic-compatible input. While not a relay in the traditional sense, they do perform the same job. I used Crydom D1225’s for AC switching and D2D12’s for DC. You can find these for $25 on eBay, or it is straightforward and cheaper to build your own from schematics on the web: here or here for example. Also, check out Crydom's CX240D5R. Digikey has them for approximately $12.

Grounded extension cords – One for each AC relay; one should be at least 6 feet long with the others as short as possible because you’ll be cutting them.

Terminal block

Wire – #16 AWG for AC, #22 AWG solid-core for DC and signals.



Resistors, 470 – 1k Ohm

24 pin DIP connector

25 conductor ribbon cable

25 contact male D-subminiature connector

Non-conductive base and cover material (I used wood and acrylic)

Wood screws

Cable ties



Hand drill and drill bits


Wire strippers

Hot glue gun – optional

Step 4: Make It!

Here's the real reason to get the Make article: I built this thing so long ago, that I didn't take pictures at each step.

Step 1
Attach the solid-state relays, terminal block, and breadboard to the base using the wood screws. Lay the components out, mark places for holes, and drill holes appropriately sized for the screws.

Step 2
Cut the extension cords approximately 12 inches from their receptacles and strip 3/4 of an inch of insulation at the cut. Mount the receptacles to the base by drilling through holes and securing with cable ties; use hot glue for a snugger fit.

Step 3
Attach the cut end of the long extension cord to the base, and strip 3/4 of an inch of insulation.

Step 4
Wire up the AC side of the controller according to the schematic using the screw connections on the terminal block and the solid-state relays. Use short pieces of the #16 wire to connect hot to all the solid-state relays (it’s best to switch hot, not neutral).

The wires in extension cords are often color coded: hot is black, neutral is white, and ground is green. If yours isn’t color coded, look at the plug with the blades pointing towards you and the round, ground plug at the top; hot is the smaller blade on the lower right. Once you have identified the proper blade, use a multi-meter to check conductivity between the blade and the stripped wire. If you’re confused, ask a friend with AC experience to lend a hand and check your wiring.

Step 5
Make the data cable by attaching the ribbon cable to the D-subminiature and DIP connectors. This is done by positioning the ribbon cable in the insulation displacement connectors (the two rows of forked contacts) and pressing down with the strain relief, which will then snap into a locked position. Each of the forks pierce through the ribbon cable’s insulation and make a connection with a conductor in the ribbon cable. You will need to separate one of the conductors from the ribbon cable on the DIP connector side; this will be either pin 1 or pin 13 on the parallel port, neither of which are used in this project. Use the multi-meter to determine how the pins on the D- connect to the DIP. Pins 2 through 9 are output data lines and 18 through 25 are all grounded.

Step 6
Wire up the signal side of the controller on the breadboard according to the schematic. Use small pieces of cut and stripped #22 wire. The parallel port can only source a few milliamps of current and can be damaged if the data lines are shorted to ground. Ensure your wiring is correct before attaching to a computer. Use a cable tie as a strain relief so the DIP connector doesn’t get yanked out of the breadboard. Instead of a breadboard, you could use a prototyping board and solder all the connections. I chose the breadboard because I’m sure I’ll want to modify the controller later, or scavenge all these parts for some future project.

The LEDs are not required to operate the solid-state relays. They simply provide feedback about the state of the parallel port. With fewer solid-state relays than data lines in my controller, I used an LED on the fist data line to indicate that my code was operating and that there was a good connection to the computer.

Step 7
Cover the AC portion of the controller. Mark and drill holes in the base and cover and connect them with the stand-offs. I used clear acrylic so I could still see the LEDs.

Step 8
Once you’ve double checked all your wiring, plug the controller into your computer’s parallel port (leave the AC unplugged for now) and see if you can make the LEDs go. Use a parallel port monitor such as “lpt.exe” from The port number of the parallel port varies between machines, so be sure to check all the options. You may have to change your parallel port’s setting in the BIOS to something other than bi-directional, such as ECP or output only. The 8 output pins are addressed in binary fashion: writing a 0 to the port turns them all off, writing 1 turns on the first pin, 2 the second pin, and 3 the first and second.

Step 9
Plug the controller into 120 VAC and plug a lamp into one of the receptacles connected to an AC solid-state relay. The power to the lamp should now be under computer control. To control a DC device, modify its power supply (for example, the device’s wallwart), switching the positive conductor with the solid-state relay. For battery powered devices, you can use an external battery pack and run the wires through the controller, or cut apart one of those AC to DC transformers of the appropriate voltage from an unused walkman or other piece of discarded electronics.

Step 5: Create the Mood

The controller is great for computer control of all sorts of things including lights, motors, pumps, fans, fog machines, power tools, and laser pointers. But first, you need a location for your Haunted House. Whether you want to invite trick-or-treaters into your home for a scare depends entirely on your neighborhood. When I lived in Boston’s Back Bay, there was a list of Halloween-friendly residences that parents could pick up. Armed with this list, parents felt comfortable bringing their kids inside to go through a haunted maze made of couches, sheets, and mattresses. I have also postered my neighborhood with the theme and address (“Red Blood Needed! Open sunset to sunrise” and “Lost Pet! 7 ft tall, hairy, teeth that don’t fit inside mouth, may still be dragging chains on ankles and wrists. Please return to …”) and put strobe-lights and Jack-O-Lanterns in upper-story windows to grab attention. Garages and porches make great intermediate locations and can be further enclosed and divided with sheets of black plastic. If you decide on a small display just inside the front door, be prepared for the few kids who will burst in convinced there’s more.

There’s a special age when children think they understand the world, but are not totally sure. To them, those long fangs might be real, the red substance in the cup could be human blood, and something actually may have escaped from the basement laboratory. Weave together a story just plausible enough that the kids will focus on whether you are being truthful or not. Once they’re off balance, scare them with something startling. I have had great success with simple, well timed, but unexpected things like the hiss of a fog machine, abruptly changing the lighting from red to strobe, and spraying a little bit of warm water. However, unless you are guiding the kids through, the display needs to be short and concise. Trick-or-treaters aren’t known for long attention spans, and you don’t want the next group arriving in the middle of your sequence and missing the fun.

Step 6: Create the Soundtrack

Once you have a design in mind, create the soundtrack. Using a wave file editor, I sample, cut, and paste sounds from Halloween CDs. The best ones are meant to be copied and the sounds are separated into individual tracks. Here’s the mpeg soundtrack to one of mine: halloween2002soundtrack.mp3 below. First, there’s the sound of an angry mob; then a clap of thunder; a guillotine blade falls and someone screams; finally, maniacally laughter fades into the darkness. Here’s another that simulates a car crash on my front porch: halloween2001.mp3, also below.

An easier way to get a pretty good soundtrack is to play two sound-effects discs from different stereos at the same time. In isolation, one Halloween sound-effect after another sounds stilted, but two reinforce each other to create the perfect mood.

Step 7: Write the Code

Once you have made soundtrack, write the controlling code. Here’s a C code fragment to help get you started (check for information on using inpout32.dll) : halloween.cpp, below. Once the sequence is started, the computer plays the soundtrack and syncs peripheral devices through the controller. In this particular setup, which uses the halloween2002.wav soundtrack mentioned above, I would explain to trick-or-treaters that they came just in time to witness an execution. After some thunder and lightning, a small motor would trigger the blade of a guillotine, built from cardboard, aluminum foil, and modular extrusion (8020, borrowed from work) to fall. As a rubber mask stuffed with a pillow fell into a basket, warm water sprayed onto the trick-or-treaters resulting in shrieks, shouts, and frantic brushing to remove the “blood.” I then offered candy from a basket with a duplicate mask stuffed with spaghetti, tomato sauce, and beets. Everyone choose the candy. While this sequence ran open loop through pre-programmed maneuvers, adding feedback to make the display responsive to sounds or motion is quite doable.

Step 8: Connect All the Devices

The devices you use with the controller complete the display. Lights and strobes are easy; just plug them in. To drop the guillotine, I used an automotive seat motor, powered by a 12 VDC wallwart, with a trigger cut from cardboard. My motor, with integral worm gear, came with a matching shaft and flange making an easy connection to the trigger; if you don’t have matching parts you can make them from Friendly Plastic, a modeling material that softens in warm water. Instead of a trigger, a cam on the motor could be used to make a dancing skeleton or fluttering bats. To simulate squirting blood, I used vinyl aquarium tubing to connect an AC water pump to squeezebottle nozzles mounted overhead. The pump drew from a bucket that was periodically refilled with warm water. If you only have a small pump, try raising the bucket and pump to the same level as the nozzles. I captured the scare using a webcam (the strobe light acting in tandem as a flash) with its external, 5 VDC trigger connected to the controller (more pictures of this are here). You can create ghostly apparitions by projecting video onto a thin sheet of painter’s plastic. Place the projector low and aim the light through the plastic up above eye level. It may seem a bit hokey, but under the right lighting works beautifully. Use the video stream from a webcam to turn the trick-or-treaters standing in your door way into ghosts.

Step 9: Make It Come Alive

Making things come alive is another great way to set the mood. A mannequin with a rubber mask and cloak is almost a piece of furniture until its eyes start glowing red. Use helping hands to direct laser pointers at the mask’s eyes, and alligator clips to wire the battery terminals to the controller. I discovered that baby Furbies behave very strangely when given half their nominally required 6 VDC. Instead of batting its eye-lashes and making baby sounds, mine moaned and screamed like it was just skinned alive. So, I completed the effect by actually skinning it and wiring it up to the controller and an appropriate 3 VDC source. In fact, almost any skinned animatronic children’s toy will make a great prop, and many of them, such as Teddy Ruxpin, can be hacked to say whatever you want. In the dark, you often need only to suggest something rather than fully recreate it. For example, two bright white lights and a rush or air from a fan along with the soundtrack were enough to evoke the feeling a truck stopping just short of trick-or-treaters at the door.

Step 10: Anecdote

While assembling an aluminum scaffold for my haunted porch just hours before sunset on Halloween 2001, a group of about six kids from the neighborhood formed wanting to catch of glimpse of what was in store for them. They also wanted to help, which really meant running circles around me while I tightened bolts and threaded cable ties. Eventually, all but one of the kids headed home to get into their costumes. The remaining boy said he wanted to stay as late as he could helping me setup because that was going to be his only Halloween activity. His mother had forbidden him from trick-or-treating this year because she had credible evidence that Osma Bin Laden would be kidnapping children from our home town. I gave him a big handful of candy when he left -- probably the only candy he got.

Halloween seems to be one of the few holidays when it’s OK to be the weird guy on the street. I met more of my neighbors on Halloween than I had in the previous six months. Even though we lived in different worlds, we now had an easy conversation starter: “Have you started working on next year’s Halloween setup yet?” After a few years of haunted porches, families who had moved away would even bring their kids back to the neighborhood on Halloween.

Step 11: Happy Halloween!

You’ll know you have it right when kids come to the door holding their bags open for treats, watch wide-eyed for a few terror-filled moments, and clamp their bags shut and sprint back to their parents before the piece of candy you tried to drop in their bag hits the ground. Happy Halloween!