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.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: 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

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

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

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

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

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

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

Halloween Decorations Challenge

Second Prize in the
Halloween Decorations Challenge

4th Epilog Challenge

Participated in the
4th Epilog Challenge

Make It Glow Challenge

Participated in the
Make It Glow Challenge

1 Person Made This Project!


  • CNC Contest

    CNC Contest
  • Make it Move

    Make it Move
  • Teacher Contest

    Teacher Contest

33 Discussions


Reply 5 years ago on Introduction

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


2 years ago

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.


3 years ago on Introduction

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


4 years ago on Introduction

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


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


5 years ago

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


6 years ago on Introduction

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.

4 replies

Reply 6 years ago on Introduction

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.


Reply 6 years ago on Introduction

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.


Reply 5 years ago on Introduction

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


Reply 6 years ago on Introduction

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.


5 years ago on Introduction

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.

Photo on 9-28-13 at 7.12 PM.jpgPhoto on 9-28-13 at 7.12 PM.jpgPhoto on 9-28-13 at 7.12 PM.jpgPhoto on 9-28-13 at 7.12 PM.jpg

6 years ago on Introduction

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

3 replies

Reply 6 years ago on Introduction

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..


Reply 6 years ago on Introduction

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 -


Reply 6 years ago on Introduction

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.


Reply 6 years ago on Introduction

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.