Introduction: Landing Strip Light System
If you've ever had the pleasure of navigating a large vehicle into a small space, you may understand how difficult it can be occasionally. Signalling proper entry with a dangling tennis ball or floor bumper might do the trick, but what if you want more? With your very own landing strip lighting system, you'll finally have an illuminated garage to match your style. In addition to a set of "runway" lights on either side of your floor, the system also includes ultrasonic distance measuring. Additional forward-facing strips of light guide you inside, without requiring you to hit, or run over any physical markers.
Step 1: Parts and Materials
Arduino Pro (any board that can use the NeoPixel library will work)
NeoPixel strip (60 led 1 meter)
(4x) 300 ohm resistor
1000 uF capacitor
(12x) 6-32 screw
(12x) 6-32 nut
(2x) 4-40 screw
(2x) 4-40 nut
(4x) #8 x 1" wood screw
(4x) terminal block
wire
heat-shrink tubing
electrical tape
magnet
Step 2: Design Overview
The lighting system is broken up into three main parts: the floor strips, the reed switch, and the main headboard.
Floor Strips
These act as our "Landing Strip Lights" and will "chase" like a marquee when the garage is open but a car has not entered. For this, I chose clear cable runner to protect the LEDs from damage while still allowing light to pass through.
Reed Switch
Paired with a magnet on the garage door, this will alert the Arduino when to power the lights.
Headboard
The headboard houses the control electronics, more LEDs, and the ultrasonic sensor. As the user pulls in, an Arduino detects the decreasing distance with the ultrasonic sensor. As a car pulls in, fewer LEDs illuminate and gradually fade from green to red to provide a strong visual cue for the driver. The RGB leds are the ever-popular WS2812B units, which Adafruit refers to as NeoPixels. These greatly simplify wiring as they can be daisy-chained together and controlled via a single pin per strip! I cut up a strip of 60 "pixels" so that I could extend them to match the dimensions of my headboard and floor strips.
(Note: Why not use an analog IR sensor?
While easier to use and often cheaper than their ultrasonic equivalents, IR sensors need to measure reflected light to accurately determine distance. As such, they have difficulty measuring the distance to black or transparent objects (black paint, windshields, etc.). While ultrasonic distance sensors have issues with spongy, sound absorbent material, most cars are made out of some pretty tough stuff.)
Step 3: Building the Headboard
Hardware
I designed the headboard in Adobe Illustrator and cut it out of 3mm acrylic with a laser cutter. The files were made to fit a laser with a three foot wide bed. However, there's no need to use a laser cutter. I simply wanted to have little triangular holes in front of each led instead of the typical round face. The headboard consists of three main layers, a front plate, two middle "wings" for the LEDs, and a baseplate; these are sandwiched together with 6-32 screws. The proto-board and circuit mount to the back for a clean face. Four 18" square dowel rods are screwed into the back plate in order for the unit to rest on a shelf, but these could be replaced with nails or hooks if you wished to have the unit hanging on a back wall.
Electronics
The schematic is fairly straightforward since most of the circuit is made up of pre-assembled modules. The only discrete components are the resistors to the Digital In pins of the NeoPixel chains and a beefy 1000 uF electrolytic capacitor across the power rails. The LEDs are broken up into four segments, two lengths of 16 LEDs extended to three feet for the headboard and two lengths of 12 LEDs extended to twelve feet for each floor strip. I used terminal blocks to connect the external NeoPixel chains and power supply; this makes installation easier with shorter wires and allows quick dis-assembly of the unit.
Software
The code is fairly modest as well. I decided to use an Arduino Pro Mini (ATmega 328 @ 5V) from Sparkfun, since they're cheap (~$10) and small. I wouldn't need to reprogram this board often, so there was no need to pay extra for the FTDI chip on a regular Arduino. The code is pretty compact, so with only slight modifications it would definitely be possible to use an even smaller micro like the Adafruit Trinket or even a bare ATtiny85!
Step 4: Building the Floor Strips
Take the cable runner and fold it in half. Mark the midpoint and cut.
Cut the NeoPixel strip into individual units along the midpoint of the copper traces. Tin the new copper pad edges.
Measure out one foot pieces each of red, yellow, and black wire. We'll need twenty two of these sets to extend the LED strips.
Measure out ten feet each of red, yellow, and black wire. These will connect the strips to the headboard.
(Note: a power-drill makes quick work of entwining your wires to make them nice and straight. This is important for them to slide easily into the channel in the runner.)
Solder the new one foot braids in between twelve of the LEDs. Attach the long braids to the ends of the strip marked "DIN." When cut to individual pieces, the LEDs look identical, but there are arrows indicating which way the signal goes. Pay attention the the orientation of each LED.
Pull the newly extended strips through the channel in the runner. I used a magnet to pull a paperclip attached to a piece of string tied around the strip to pull it through; slow going, but it works!
Step 5: Final Thoughts
Installation is simply a matter of unrolling the floor strips, attaching the headboard to the back wall, and installing the reed switch near your garage door. Test out the location of the magnet on the door to make sure the the lights turn off when the door is closed!
Overall, I'm quite satisfied with how the system turned out. The landing strip lights and headboard make for an impressive sight when entering your garage at night. The headboard especially creates quite the eerie glow! I hope you enjoyed reading this as much as I did building it. If you make a similar system for your own garage, please share in the comments!