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
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 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
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
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
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.
Instead of interfacing directly with AC power, we used a servo hot glued to a power strip to turn on the spinning red light.