Smart LED Lights

by joshtlawson in Circuits > LEDs

13277 Views, 216 Favorites, 0 Comments

Smart LED Lights

20150419_161733.jpg
IMG_1790.JPG
IMG_1791.JPG
IMG_1766.JPG
I recently finished up a bunk bed project for my kids. Being an engineer I was eagerly looking for a "problem" that needed an overly complex solution. Besides, it's obvious that young children sleep better with unfettered access to a light slightly brighter than a collapsed sun.

I'd had my eye on Adafruit's NeoPixels and the Arduino Yun for a while, looking for the right project, and these smart strip lights seemed to fit the bill. The project goal was pretty straightforward: Integrate wall mount lights into the bunk bed with a Night Light mode, Visual Alarm Mode, and User enabled reading lights. The project was about 50% software and 50% mechanical/electrical manufacturing. I've attached the software, so if you choose to use the same electrical and mechanical setup, half the work is done!

Let's begin.

Buy Your Supplies!

20150408_194356.jpg
20150406_203120.jpg
20150411_191538.jpg
20150410_185658.jpg
20150411_193415.jpg
20150418_104756.jpg

You can purchase most of the electronics from Adafruit.com, everything but the NeoPixels can be sourced from elsewhere though. Here's what you need:

- 2 meters of 144 LED/m Neopixels

- 1 x Arduino Yun

- 1 x 4700 uF Capacitor

- 1 x 5 V - 10 Amp Power Supply

- 1 x 2.1 mm Panel Mount Barrel Plug DC Power Connector

- 2 x Female DMX Connectors (Similar to XLR Mic Audio Connectors)

- 2 x Male DMX Connectors

- 1 x Electronic Enclosure

- 15 ' 5 Conductor Cable

- 2 x LED Backlight Momentary Switch

If you haven't already, make sure to read the Adafruit Uberguide for NeoPixels.

You'll also need some wood -- I happened to have an 8/4 (Woodworking nerd speak for 2" thick) walnut laying around. If you want to use aluminum end caps like I did, you can buy some 1/4 5086 Aluminum from McMaster.com

Shape the Wood

20150406_191733.jpg
20150406_191741.jpg
20150406_191802.jpg
20150406_192450.jpg
20150406_192806.jpg
20150406_192802.jpg
20150406_193410.jpg
20150406_193424.jpg
20150406_193603.jpg
20150406_200332.jpg
20150406_194234.jpg
20150406_200858.jpg
20150410_201651.jpg
20150410_201819.jpg
20150410_202325.jpg
20150410_202838.jpg
20150412_151632.jpg
20150406_201229.jpg
20150406_201900.jpg
20150406_202247.jpg

So, I'm going to assume you have some table saw experience and know how to use the saw safely -- you could certainly do the same thing with a router if you're feeling ambitious and have the right bits. But for me, the easiest way to cut the dados and angles was on the table saw. First, cut two pieces of 8/4 stock down to squares, then trim one side to a slightly downward angle. The angled side will be the one with the lights on it, and will help angle the light towards the mattress (for reading). I choose 20 degrees, but feel free to choose whatever suits you. Next, measure the width and thickness of the LED strip -- you'll want to add some extra width and depth to ensure the fit isn't too tight and the epoxy will completely cover the LEDs. You can see I took most of measurements relatively by eye-balling it. Again, make sure to use your table saw safely and use push blocks to maintain good finger retention. I really enjoy grasping objects, so I plan to keep all my fingers and thumbs.

I then cut a groove on the bottom to make space for wires, about 1/2" x 1/2" worked good for me. Then I cut the necessary grooves to get a 1/8" Thick 3/4" x 3/4" angle aluminum stock to fit flush on the back. This will be how we mount it invisibly to the wall, and allow for centering of the light regardless of 2x4 stud spacing behind the light. Check that everything fits (LED strip and angle aluminum) then cut to length.

I had initially drilled a hole on both ends of the LED strip thinking I would want to run power to both sides of the strip to ensure even lighting, but I found that was unnecessary, so pick your favorite side and put a clearance hole for three wires on one side, doesn't have to be perfect, but try to keep it close to the end.

LED Strip Preparation

20150406_191824.jpg
20150406_192142.jpg
20150406_192342.jpg
20150406_203609.jpg
20150406_203934.jpg
20150406_204401.jpg
20150406_204240.jpg
20150406_205021.jpg
20150406_205043.jpg
20150406_205147.jpg
20150406_205747.jpg
20150406_210640.jpg
20150410_185644.jpg

First things first, you'll need to remove the LED strip from the weather seal that it comes in. Pick your favorite sharp knife and start cutting it off, taking care not to cut the LED strip. Then set the LED in the groove you cut in the wood and figure out how long you want it. Next, cut it to length.

Now you'll get to start soldering, hopefully it's obvious which pins are which, but if not read the NeoPixel Uberguide again. Also, make sure to note the directions of the arrows, your wires need to be connected to the non-pointy side of the arrows -- that's the way the data will flow. Solder a couple wires to the LED strip, pick a color scheme and stick with it. I'm a big fan of red = 5V, black = ground, Yellow = data. Once you have a good solder for each, stick the LED strip in the wood and hot glue the strip in place. I put a dab of hot glue every 6" underneath the LED strip in the slot as I set it in place. Also, you'll want to hot glue the wire hole shut now. Make sure it's good and closed because once the epoxy starts in the next step, it's a very bad time to find it's not closed well.

Now TEST!!! You will be filled with regret and unkind words if you epoxy this in place and you had a bad solder. So load up a test program and verify your work. I put a dab of hot glue ever 8" or so on the bottom side of the wire channel to make sure the wires stayed out of the way.

Make It Rain (epoxy)!

20150406_212238.jpg
20150406_212242.jpg
20150406_211046.jpg
20150406_211403.jpg
20150406_211552.jpg
20150406_212233.jpg
20150407_180937.jpg
20150406_211817.jpg
20150406_211342.jpg
20150408_183358.jpg
20150406_211809.jpg
20150408_183531.jpg
20150408_184454.jpg

Don't actually make it rain epoxy, that'd be a terrible idea.

This is the part where you go to town with epoxy filling in the LED channel. This will help the final light have smooth surfaces, provide some light diffusion, and heat distribution.

Now that you've got the LED strip in place, apply masking tape vigorously on both ends -- don't skimp and don't buy super cheap stuff.

Now you'll need to get the top edges of the LED Dado you cut earlier nice and flat, so get out your level and some shims and get it flat in both directions. If you don't get it flat, all the epoxy will pool on one end (as it did for me on my first round) and you'll have to level it with the epoxy wet, which is less fun.

Once you've got it level, mix up some epoxy, I generally use the "West Systems" slow cure stuff, which works well. Keep in mind you'll need a fair amount depending on the size of the dados you cut -- I used around 6 oz. Wear gloves and mix well, then just poor it over the LED strip. If you prepared well, it should be a single pass to get it working. Make sure to pop any bubbles you can see so you get a nice finish. You'll want to target a little over full, use the suface tension to overfill it so you have a crown of epoxy above the surface of the wood.

Once it's fully cured, pull off the tape and scrape and sand it flush. A good card scraper works spectacularily for epoxy smoothing.

Add Some End Caps

20150408_192009.jpg
20150408_192444.jpg
20150408_192449.jpg
20150408_195050.jpg
20150408_200114.jpg
20150408_195123.jpg
20150408_211417.jpg
20150408_194024.jpg
20150408_195635.jpg
20150408_194232.jpg
20150408_212441.jpg
20150408_212444.jpg
20150408_212501.jpg
20150408_213033.jpg
20150408_213031.jpg
20150410_203158.jpg
20150410_203706.jpg
20150410_203702.jpg
20150410_203939.jpg
20150410_204317.jpg
20150410_203949.jpg
20150410_203936.jpg
20150410_203724.jpg

So you certainly could use a contrasting wood for the end caps, I was looking for a modern vibe, so I ended up using aluminum.

I cut the flat stock down to size using a regular old miter saw, so long as you have reasonable high tooth blade and take the cut slow, you can cut aluminum without any problems -- just don't rush it. Next I marked each plate with a number that correlated to the end of the wood I was going to mate it with. Marked the outline with a sharpie and cut it out on the bandsaw.

Next you'll need to locate some holes -- one end has a larger hole for the momentary button and the other has a smaller hole that is the diameter of the wire/cable you're using to feed power and signals to the LEDs. You'll want your cable hole to match up roughly with the wire channel and the button hole you'll want to make sure isn't too far away from the channel. Mark the holes, center punch them so your drill bit doesn't wander, and camfer or countersink the holes as needed. Don't forget the 4 screw holes on each plate to affix them to the wood substrate.

Now that you've got your plates mostly done, attach them to the wood, and hit them with the belt sander to get them nice and flush with the wood. Then sand all the endges by hand to break the sharp corners and clean everything up.

Wiring the LED Bar

20150408_200553.jpg
20150410_202331.jpg
20150408_194350.jpg
20150408_220846.jpg
20150408_220852.jpg
20150411_113812.jpg
20150411_113911.jpg
20150411_113942.jpg
20150411_191211.jpg
20150411_191318.jpg
20150411_191337.jpg
20150411_191345.jpg

Now that you've got the end caps in place, you can use the holes you cut in the plate to position the holes needed for clearance on the button and cable. I marked the center with a forstner bit while the place was in place, removed the plate and drilled a sligtly larger hole for the button (to allow clearance for the panel mount nut) and a slightly larger hole for the cable exit as well.

Next you'll need to start wiring. The LED should be wired with ground on one side of the switch (so you can use the internal pullup on the arduino to get a deterministic switch state), and the other side returning signal to the arduino. Then you need a Arduino Digital Output to drive the LED backlight, and a ground on the other side. Solder, then cover with heatshrink each joint you make. All the connections will be pretty innaccesible after installation, so do them right the first time. Feed one end of the cable through the exit plate, and trim back the casing so you can solder the connections. If you happened to purchase the same cable I did, it has two heavier gauge wires for power and ground and three thin signal wires. Pick a strategy for wire colors and stick with it. I documented mine on a scrap of MDF.

Finish the LED Strip Out

20150411_191603.jpg
20150411_191854.jpg
20150411_191641.jpg
20150411_191649.jpg
20150411_192643.jpg
20150412_090329.jpg
20150412_150240.jpg
20150412_150413.jpg
20150412_150228.jpg
20150412_151643.jpg
20150412_150232.jpg
20150410_202321.jpg
20150413_200355.jpg
20150413_201122.jpg
20150413_200346.jpg
20150413_200351.jpg
20150413_200338.jpg

Now you'll need to solder on the DMX (XLR) connectors on one side. Make sure you get the backshell on the cable before you do your soldering... otherwise you'll get to practice more by re-doing it. The clamping piece for my connector was intended for a thinner cable, so I got out the old sandpaper on a screw in a drill routine to sand it out some so it wouldn't be too tight. Solder it all up and you're done with the electical on the LED strip side. Now go to town with a hot glue gun securing all your wires to the channel so nothing sticks out or falls out.

One final thing to do is to drill and tap some holes that will grab onto angle aluminum after it's mounted on the wall. I put three tapped holes on the top side of the walnut and put a 1/4-20 set screw in each. Tapping wood isn't always a good call, but with a course thread and limited clamping force it's no problem.

Next cut the angle aluminum pieces to 18" long (if your studs are 16" on center) and drill and counter sink two holes at 16" into the aluminum.

In the future when you go to fix it to the wall you can find two studs, screw the angle aluminum to the wall. Once it's on the wall you have 15" of play either direction to center the light. I've used this technicque a number of times and it works great!

Now, mask off all the metal and the cables and apply your favorite finish (mine is a spray on waterbased topcoat by General Finishes)

Nerd Time

20150418_083800.jpg
20150418_085023.jpg
20150418_083514.jpg
20150412_093943.jpg
20150418_083508.jpg
20150418_104811.jpg
20150418_104800.jpg
20150419_134704.jpg
20150419_134648.jpg
20150419_134619.jpg
IMG_1792.JPG
Screenshot_2015-05-02-13-33-10.png

Now make the other side of your DMX connector to cable assembly, and bring the loose end of the wires into your electronics enclosure. Bring in the power connector on the other side and get soldering. The pins are all clearly called out in the software, using #defines at the top, so just match it up to your hardware pins. Make sure you pull your power directly to the LED strips, not through the Arduino unless you're trying to make a single use Arduino toaster, which kinda suck.

I would recommend reading up about the arduino Yun's setup on the arduino.cc website or many other great resources out there.

I've attached the software as a starting point (or a one stop shop if you do 2 of them like me). I'm not exactly the most efficient coder, so it could probably be written much better, but it gets the job done. But, it does take about 99% of the program memory and 50% of the RAM, so don't expect to add much software without removing some first.

All the settings are stored in EEprom so the user can adjust them as desired (my kids have frequent requests to change colors) and you can set those over Wifi using any device with a web browser. It's using the rest api, so if you don't have a password setup you can just use the command 192.168.xx.xx/arduino/UserRed/255, where UserRed is the variable you want to set and the value after the / is the desired value. You can see in the screenshot any time I send a command, it'll tell me what the other parameters are currently set too -- which is a great way to debug.

The software has a visual alarm, nightlight mode, and user chosen light color -- each one has an independant color. There's fading between on/off and time syncronization with internet time as well. I had initially planned on setting up a web server to ease the use of the REST api --- but since I found I don't often need to change the settings I haven't bothered.

Hope you enjoyed my first instructable!

If you're interested in the bunk beds, I have them and a bunch of other woodworking projects on LumberJocks.com

Downloads