Introduction: LASER Maze - Halloween Haunted House

Picture of LASER Maze - Halloween Haunted House

The LASER Maze was our Processing and Arduino powered garage haunted house for 2011. A monitor sits outside of the garage, displaying "PRESS START." After the button is pressed, an intro video plays that instructs you to dodge the lasers and get your candy in the back of the garage. Whenever you break a laser beam, an alarm sounds, a police light flashes, and a point is added to your score. When you make it back out, you press the stop button to see your final time and score.

We kept all of the lasers very low to the ground to avoid everyone's eyes. Future versions may turn the lasers off for a short time when they are broken for an added layer of safety.

We also made a couple of flashing signs out of red and white blinking bicycle lights. The house is at the end of a cul-de-sac, so we had to advertise to attract more attention.

Here is Alice in Wonderland with her pirate and gremlin friends navigating the maze.

My friend is offering them chocolate milk in the video so he can show off the pile of severed heads he has stored in the fridge.

Step 1: Parts List

Picture of Parts List

The parts list:
a garage
a laptop
Arduino Duemilanove with USB cord
4 green Lasers ($7.54 each at Amazon)
4 CDS cells ($0.50 each at Electronic Goldmine)
4 1K resistors
3 push buttons (arcade style buttons)
1 breadboard
1 servo
1 surge protector with switch
1 red beacon light
1 1000W fog machine
phone cord long enough to run to your sensors (cheap at the thrift store)

You will also need electrical tape, cardboard TP tubes, soldering iron with soldier, velum paper or some other semi transparent paper, and possibly some other small items.

Step 2: Overview - How It All Works

Picture of Overview - How It All Works

The 4 green lasers are lined along one side of the garage, all wired in parallel to 3 D cell batteries. They are not connected to the Arduino in any way. On the opposite side of the garage, there are 4 CDS cells(Light Dependent Resisters) inside of cardboard tubes. The CDS cells detect the laser light, and the tube helps filter out other unwanted light from strobe lights.

The Arduino is programmed to watch the CDS cells, and the stop, start, and reset buttons. The Arduino sends 4 signals back to the Processing code on the laptop: start, stop, alarm, or reset. The Arduino also powers a servo that turns on a spinning red light when the alarm is set off.

The Processing code accepts the signals from the Arduino, and displays the state of the game on the monitor outside. The Processing code has 5 different states: PRESS START > Intro Video > 3, 2, 1, GO > Active Game (show time and score) > Display Final Score. The Processing code starts and stops the game, and increments the score as it receives the signals from the Arduino.

The music playing in the background is just shuffling on the computer, it is not connected to Processing or Arduino.

Step 3: The Floorplan

Picture of The Floorplan

The garage was laid out so that guests would have to cross the laser beams as many times as possible. Only 4 laser pointers were used, but the trick-or-treaters had to dodge laser beams 16 times.

The yellow lines in the picture show where we built cardboard or caution tape walls. The caution tape made a clear path for people while still allowing the lasers to pass through to the sensors on the opposite wall.

The air mask in the picture is an air compressor with a blower attachment pointing through the mouth of a skull mask. The blower handle was tied to a string and run through some pulleys so we could scare kids from a distance while they collected their candy.

Step 4: The Processing Code

The Processing code accepts 4 serial commands from the Arduino, and displays the state of the game on the monitor based on those commands. The basic flow of the program through the 5 states is:

1. Display PRESS START screen
(start button pressed)
2. Display intro movie
(start button pressed a second time, or end of movie)
3. Display 3, 2, 1, GO countdown
4. Display game timer and number of alarms
(stop button pressed)
5. Display final time and number of alarms
(start button to return to beginning)

If the reset button is pressed at any time, the game goes back to the PRESS START screen. The code is full of comments to help you figure out what is going on. Most of it is very similar to the examples I found on the Processing website. The default video library did not work well for me, so I used GSVideo instead.

Step 5: The Intro Video

Picture of The Intro Video

This is the video that plays as soon as someone presses start. The video can be skipped by pressing start a second time.

The intro video was made using Pinnacle VideoSpin free video editor. The video is a cut up version of the Half Life G-Man speech that I found on youtube, and the new dialogue was added using Cepstral Text-To-Speech demo. There is a character limit for the demo, so I made several small sound clips and put them together in VideoSpin.

Here is the final product:

Step 6: The Arduino Code

Picture of The Arduino Code

The Arduino code has a pretty simple function; monitor 3 buttons and the light dependent resisters, and send signals to Processing through the serial port.

When the Arduino first powers on, it finds a normal value for each CDS cell by averaging 3 readings together. This means the lasers must be on and pointed at the CDS cells before the Arduino is powered on. The reset button will cause the Arduino to find a new average for each CDS cell. This was done so we could recalibrate if the fog conditions changed too much.

There is also a sensitivity level that can be set. We test for a broken laser by checking if the current CDS cell reading is less than the average-sensitivity. When a break is detected, we send the alarm signal to the serial port, and we activate the servo that turns on the red light.

The push buttons for start, stop, and reset use the internal pull up resisters in the Arduino. The push button pins read high when they are not pressed, and low when they are pressed. The stop, start, and reset signals are only sent to the serial port one time when a high to low edge is detected. This prevents the Arduino from needlessly spamming the serial port.

The schematic shows how the buttons, CDS cells, and server should be connected to the Arduino.

Step 7: The Hardware

Picture of The Hardware

CDS Cells
These are used to detect the lasers. Their resistance changes depending how much light they are exposed to. We put them in cardboard tubes with velum paper (a thin frosted paper) on front, and electrical tape on the back. This gives you a much bigger target to aim the laser at, and the velum disperses the light so it hits the sensor. When the laser is broken, the CDS cell reads almost pitch black, since it is enclosed in the tube.

The factory battery holders were left off of the lasers, and they were all wired in parallel with 3 D cell batteries. This gave us a much longer run time, and it allowed us to turn the lasers all on or off at the same time. The factory buttons were held down with tape, and the lasers were taped to L brackets so they could easily be mounted to the wall. We kept all of the lasers close to the ground to prevent any eye injuries.

Beacon Light
Instead of interfacing directly with AC power, we used a servo hot glued to a power strip to turn on the spinning red light.

Step 8: Walk Through Videos

Picture of Walk Through Videos

Here are a few more videos of the final effect.

Oh, you're my neighbor as well? How unfortunate....

Flashing Laser Maze sign

Jumpy werewolf


bkhurt (author)2012-10-26

Check out the new version of the LASER Maze for 2012!

hobbz15 (author)bkhurt2013-09-30

could you put up the full and proper code for the processing app. i really like the clock feature.

wasif4 (author)2017-09-06

if i want to make this project with 20 lasers and 20 LDR , what should i do??? please help,

i want to make this project.

bcman12358 made it! (author)2015-12-26

I made a portable version. The software didn't want to run on any computer I tried to run it on. I finally got it to run on one of the computers I had laying around.

Mike X yt (author)2015-09-28

Were in the code do you change the trigger level for the C.D.S?

Mike X yt (author)2015-06-18

Maybe change the code to flash the laser they walked though?

Fission Chips (author)2014-10-21

Wow! You could always use a PIR or Ultrasonic Sensor for added accuracy, but lasers add an element of coolness that nobody can explain.

lsawyer_1111 (author)2014-08-28

I can't seem to download the processing code. Is that link broken?

ihart (author)2012-10-16

I haven't used Arduino before but I bought a proto board to try this great instructable out. Some quick questions:

1) Could you explain the relationship between the "laser_maze_processing.pde" file and the "laser_maze_arduino.pde" file? Does the "laser_maze_processing.pde" run on the laptop and the other on the arduino?

2) Does the "laser_maze_processing.pde" file cause graphics showing the counter to be displayed on the laptop?

3) Do the laptop and arduino board communicate over the USB connection? Is that what you call serial? So for example:
sends an alarm message from the arduino board to the laptop which is running the arduino SW?

4) Do you have the c:/alarm.mp3 file referenced in "laser_maze_processing.pde"?

Thanks again.

bkhurt (author)ihart2012-10-16

laser_maze_arduino.pde gets uploaded to your Arduino. This program monitors the light sensors (CDS cells). When the value of the light sensors falls too low (laser is broken), it activates a servo on a power strip to turn it on, and sends the alarm signal over USB to the laptop.

laser_maze_processing.pde runs on your laptop in the Processing environment. It draws all the graphics to the screen. It listens for the alarm signal, and increments the alarm count. It controls the timer, and controls the start and stop of the game.

You will need to install GSVideo and Minim(for the audio, may be in Processing by default) in Processing to get everything working.

GSVideo -
Minim -

See the comment to brandon83 below - I have new versions of the code that do not need video and really simplify setting everything up. It removes the "game" aspect and just runs continuously. I will get the LASER Maze 2012 instructable up as soon as I can.

ihart (author)bkhurt2012-10-16

Thanks for the replies. I have Processing up and running. I had never heard of it before. I can see the "PRESS START" page of your program now!

I had to make the following change to the Processing code to get it to run with the latest version:

//!! size(screen.width, screen.height); OLD FORMAT
size(displayWidth, displayHeight);

I will try to hack it some more to learn until my Arduino shows up.
Thanks again.

hobbz15 (author)ihart2013-09-30

could you put up a link or something for the complete processing file that needs to be inserted into the processing app

bkhurt (author)ihart2012-10-16

1) laser_maze_processing.pde runs on your laptop in Processing. Download it here:

laser_maze_arduino.pde runs on your Arduino.

2) yes

3) Yes they communicate over USB. Yes this is called serial communication. The laptop is running the processing software.

4) It is the "Industrial Alarm" from -

I renamed it to alarm.mp3. You can use any sound you want here as long as you rename it to alarm.mp3.

hobbz15 (author)2013-09-28

Im bad with schematics. Im working on it though. Could you give a better picture or wiring diagram so i can see and follow along. if it makes any difference i have this type of bread board. Also still having difficulty with the processing software. can you please give a step by step. it is giving me alot of trouble.

sujayjoardar (author)2012-10-18

The arduino code is not working, and the video file is not supported...
So what i supposed to do.
if any solution you can any one provide

bkhurt (author)sujayjoardar2012-10-18

You need to download and install GSVideo for Processing to get the video working. Get it here:

sujayjoardar (author)bkhurt2012-11-02

hi bkhurt
bt the problem is that when ever am tring to upload the code and comple the code to the arduino then the message shows in the sketch that, the video gs is not what to do now..

bkhurt (author)sujayjoardar2012-11-02

There are 2 different programs. The laser_maze_arduino program should be uploaded to the Arduino. There is nothing about video in the Arduino program.

The other program is laser_maze_processing. This runs in the Processing environment on your PC, and this is the program that controls the video. You have to download Processing from here. Then install GSVideo from the comment above.

I wrote a new version of the LASER Maze for 2012. It does not have any video, so it is easier to set up. You can see the new instructable here -

brandon83 (author)2012-10-10

is that speaker wire to power the lasers via the D batteries?

brandon83 (author)brandon832012-10-15

I am attempting a simplified version of this instructable and speaker wire does indeed carry the power around well. I don't see how three D batteries in paralell can power this though. I'm no electrician, but it seems I need 3V(two D batteries) to light the laser. I've made a 2x3 matrix of D batteries that seems to work, though it seems to get pretty hot, which is worrysome.

bkhurt (author)brandon832012-10-16

Yes I am using heavy gauge speaker wire to power the lasers. A 5mW green laser draws about 250-300mA when it is on. So my 4 lasers in parallel are drawing about 1000-1200mA (1.2A). The 3 batteries are in series, it is the lasers that are connected to the batteries in parallel.

I started with 2 batteries in series, but that wouldn't power all 4 of the lasers. I'm sure that drawing 1.2 amps puts a heavy load on the batteries, but it worked for the time I needed. This year, I will only run 2 lasers on each battery pack to make sure nothing heats up.

brandon83 (author)bkhurt2012-10-16

hey thanks for the reply. my 2x3 matrix of batteries should be okay then, as it outputs 3V, enough for the lasers. my heat issue was due to a short as i wired in a switch wrong, oops. all fixed now. i'll post back once it's all done. thanks for the inspiration.

brandon83 (author)brandon832012-10-31

here is my simplified version, as promised:

bkhurt (author)brandon832012-10-16

I have new versions of the processing and the arduino code for the 2012 version, but I haven't had time to write up a new instructable yet. Instead of a start and stop button with a timer and a counter, the new version is just continuous running. The screen does not show a game display, it just shows a graph of the sensors current readings. There is no intro video in the new version.

The "game" aspect didn't work well for Halloween last year, because a constant flow of people were going through the maze. We ended up just starting it and leaving it running the whole time. The new 2012 version is better for that situation, plus the screen shows you some diagnostics(the sensor readings and alarm level) to help troubleshoot if it isn't working correctly.

JDJr (author)2012-10-24

Nice instructables. I made something similar. Here are some things I did different. I mainly wanted the laser effect, I didn't worry about the video.

1 - Instead of the cardboard tube, I used 1 1/2 black ABS and bought the white PVC 1 1/2 end caps. I drilled two small holes in the end caps to pas the photo sensor leads through then hot glued them in place. Then I cut the paper slightly bigger then the tube and put the end cap on. I only shoved it down about 1/4 - 1/2 inch so it would stay on. I also screwed and tapped the tube so I could use mini tripods I found cheap on eBay. This helped to mount and position the receivers and make them more durable.
2 - I used mirrors to bounce the laser around a little bit. I tried the front side mirror trick instrucable and a few others. Some worked better then others. I used blue tack to stick them to the same little mini adjustable tripods.
3 - Because of the mirrors sometimes the signal could not be picked up properly with the fog, the 1k resistor was not sensitive enough so in order to make them more sensitive I bumped up the resistors. I also modified the arduino code slightly to take serial input so I could put it into a test mode and continually show the values so I could get a feel if the resistors were working. Also used this for alignment.
4 - I made a couple small changes to the arduino code to change sensitivity, so instead of variance from a sample, it took a low thresh hold value (Because I was mucking with the resistors).
5 - Instead of a servo, I used transistor (2n3904?), a diode, resistor and a relay to trigger a remote control for a cheap remote doorbell.

Thanks for the instcutable. It inspired me to get off my bum and do something.

bkhurt (author)JDJr2012-10-24

It's cool to see the imporvements you made to this project. I am writing the LASER Maze 2012 instructable right now, and I have made some similar changes.
1. I'm wanting to upgrade to PVC also, and I want to look in to RCA connections so I can run RCA cable between the sensor and the Arduino.
2. Old hard drive disks work well for bouncing the lasers if you have them laying around. I ordered some front surface dental mirrors from Amazon for this year: LINK
3. I got rid of the video in the new version and now the monitor shows bar graphs that disply sensor reading in real time. It also shows a red line that marks the alarm trigger value. I changed to 10k resistors this year.
4. Did you hard code an alarm value then? Or is it a percentage change?
5. I'd like to add some more props also, so that when laser1 is broken prop1 activates and so on. Maybe in the 2013 version...

Good work on getting yours set up. You made a lot of the same modifications that I had in mind. Post a video link if you can! I will get the new version and new code up as soon as I can.

JDJr (author)bkhurt2012-10-25

1 - RCA Connectors. Great idea. Maybe I'll switch mine over too!
2 - Tried HD platters worked ok kept foregtting there was a hole in the middle. I might try those little dental mirrors next time too.
3 - I'd love to see your new version. I used 10ks also. Although my CDS are rated a little different I like the higher sensitivity with the higher resisters.
4 - I just made a low threshold. Had them on without and without the laser to see how low/low they get, then (Frankly randomly) I picked a number. 30 worked good for me. Because of the shielding over the sensor it seemed to work good for this. The problem is where the fog machine was sometimes would trigger a false alarm.
5 - That's an awesome idea. I found using the transistor was slightly easier leading out to a relay.
6 - Couple other things I changed was the ability to use all 6 analog ports on arduino, just incase.

I ran it last night. One problem I have with Green lasers is they start off bright then dim after a few minutes. I'm just using the pen lasers with the AAA batteries. Do you see that problem with your setup? I was wondering if wiring them to a power supply would solve this problem (But it did this with new batteries too).


bkhurt (author)JDJr2012-10-25

The AAA batteries die really fast when you run them constantly. I left off the battery part of the laser case and wired them to D-cell batteries instead. I will be using 2 D-cell batteries per 2 lasers this year. A green ~5mW laser draws 250 - 300 mA of current, so if you wire them to a power supply make sure its current rating is high enough. 4 lasers at 300mA each will need a minimum of 1.2A supply, but I would go with 2A rating just to have some wiggle room.

tinker234 (author)2012-03-01

wow i like the idea wonder if i could set it up for a prop to pop up

bkhurt (author)tinker2342012-10-16

Yes you could. It is already powering a servo to turn on a power strip when the laser is broken. You could copy that code to make it activate any motor, servo, lights or whatever other props you want to control.

ihart (author)2012-10-16

Absolutely awesome! I want to try making this.

RebelWithoutASauce (author)2012-07-08

Wow, what a really fun idea. I might try to recreate this for some kind of spy adventure security system.

You could also probably make it so that, the more beams you break, the less candy you get. (like you lose one of those mini chocolate bars).

mathieulj (author)2011-11-13

Another safety measure would be to make sure you only use class 1 or 2 lasers. These are considered relatively safe. You want to stay away from class 3 and class 4 lasers, the former can cause instant eye damage and the later will also burn the skin.

With a class 1 laser -> no danger unless they bring a telescope or microscope into your maze (unlikely)
With a class 2 laser (1mW max) -> generally safe as the blink reflex will protect they eye from damage but intentionality holding your eye open (fighting the reflex) can lead to damage

Take it from me (I have a laser burn on my retina), higher power lasers should not be taken lightly.

About This Instructable




More by bkhurt:LASER Maze 2012 - Halloween Haunted HouseWine Bottle LED Gel LampLASER Maze - Halloween Haunted House
Add instructable to: