Wednesday, January 05, 2011

Collaboration

Making fun little lighting projects is just one of my hobbies.  Interjecting my unsolicited opinion on the design of other people's projects is another.  My neighbors embarked on a basement remodel a while back and, like a moth to a light bulb, I fluttered about living vicariously through their ambitions.  I'm pretty sure doing something similar or anything more than hanging a well framed painting on the wall of my rented townhouse is some sort of lease violation. I said, "those are some nice shelves".  They said, "thanks".  I said, "you know what would look cool".  They said, "do it".  They have obviously read my blog.

The shelves are 16" cubed, built into the wall, made out of sheet rock and painted white.  I wanted to light'em up and I knew just what to do.  The trick was finding a RGB LED worthy of the job.  DealExtreme is a tad sketchy and based out of China but pretty much my only bet for 3W RGB's at anything close to a reasonable price.

The construction of the circuit board was pretty straight forward with only one notable addition.  Along with the 3.3V power supply, LED driver chips (CAT4103), and obligatory PIC micro-controller (PIC18F2510), I used a Lantronix XPORT Ethernet to Serial module to accept commands from any network attached device.  It was agreed that I would leave all the software design up to the neighbors.  After all, they are the professionals.  My board reads in a command packet, writes the LED intensity registers and creates a pulse width modulated (PWM) signal to update the RGB LED drivers.  When I design any board, I like to make it as versatile as possible in the event I decide to add any features after the fact.  There are only 7 shelves but I built the board with 12 drivers just in case.  Two boards can also be stacked to drive a total of 24 RGB LED's as you can see in the picture below.  Turns out we'd need all 24 but I'll tell you more about that later.


So I finished the hardware, installed my custom firmware and performed the least amount of testing it took to convince myself that there was a chance it could work.  My neighbor Mark was designing his visualization software in parallel with only a loose discussion of what the command packet should look like to go by.  The idea was to get together once each part was done and spend way too much time debugging the inevitable problems. That is until it worked right out of the gate.  Sometimes the lighting of a single indicator LED can stir up a bevy of emotions in the average geek... imagine the lighting of an entire bank of shelves.  I'll have to admit, Mark's software is pretty impressive. My favorite part is the connection with iTunes.  While a song is playing, it gathers frequency information on the fly and displays it on the shelves in a variety of ways. Check out the video at the bottom to get a better idea of what I'm talking about.

If working solo, I may have called it a project and moved on.  However, the neighbors had a vision and a suspicion that I wouldn't leave them hanging.  They installed 20 overhead can lights in the drop ceiling and four wall sconces in the theater section.  24 extra LED's huh, yikes!


The hardware wasn't a big deal cause it was pretty much done already.  LED installation and firmware development... Now that was a bit tricky. The room lighting was already wired up for 120Vac so the LED's had to be installed in such a way that proper light diffusion was achieved within the housing and the housing itself wasn't altered in a severe way.  The blue socket protection cap provided as close to a perfect solution as we were going to get. The cap was meant to fit snugly into the existing light socket so I just mounted the LED to that and attached a strain relief on the side. Neat and tidy.



So for the ceiling and walls, that is 24 RGB LED's which makes 72 (24x3) discrete sources of light.  To drive each LED at different intensity levels, I switch them on an off at a set frequency and vary the percent at which each LED is on during a cycle period.  If it's on half the time, it appears to be half as bright as a LED that is continually shining.  For this project I chose a refresh frequency of 60Hz with 32 levels of intensity.  Therefore, I have to update each of the 72 LED's 32 times every 1/60th of a second.  In other words, I have 520 microseconds to update 72 LED's.  With a 16MHz oscillator, the instruction cycle on my micro-controller is 250nS. So, the update period divided by the instruction cycle time divided by the number of LEDs gives me a total of 26 instructions to preform everything needed to decide whether a given LED needs to be on or off.   I ended up needing 22.  Just squeaked it in there after a bunch of tweaking and a little luck. 






The shelves and ceiling have a refresh rate of 30Hz and can generate over 30 thousand colors per pixel.  A pixel is a single shelf or can light in this case.  Not bad for a few bucks and hours of spare time. Best part, Both the shelves and ceiling consume less than 50 Watts when fully lit. And less than 10 on average when in visualization mode.  That's around the power draw of an incandescent night light.  Saving the planet one disco basement at a time.

I'm pretty psyched about this install.   I mean, it's what I'm really passionate about and, if I could toot my own horn for second, I may actually be getting kind of good at it.  What do you think?

Here are more videos for your viewing pleasure.  Thanks Mark.



10 comments:

TJ said...

Saw this on hackaday...very slick! Thanks for sharing.

OiD said...

What a great collaboration!
Must be even better in person.

Unknown said...

Whats the room look like with the lights on?

What did you use for the black ceiling tiles?

Colin D Bennett said...

How is the system architected? Did you put intelligence at each LED, or did you have all the driver and intelligence in the central board with just power wires going to each LED? My first thought if I were to design a system with LEDs in ceiling can-lights would be to use some sort of simple serial communication link and but a tiny microcontroller at each light that could be addressed serially and control the LED using PWM.

Also, what kind of power supply did you use for the system?

Evan Flint said...

@Colin D Bennett: All the smarts are on the main control board. Did it primarily for cost. And simplicity at the cost of scalability I guess. Bought a couple open frame AC/DC power supplies off Digikey. You have a valid point about the individual controller modules. Perhaps I'll explore that option when I do my next basement ;)

Crazyguy said...

Would you like to share the schematic of the board?
I'd love to take a look (Got my own basement project coming up soon) ;)

Anonymous said...

Are you willing to post the eagle file for the board or perhpas sell them (the boards?)

Dan Labarowski said...

Your LED Driver has a maximum current throughput of 200mA whereas each channel of those leds should be able to handle 350mA. Just curious as to why you made this design choice. Was it for heat or power consumption? Or was it just an availability thing? Really enjoyed this article. looking at doing something similar myself. Do you think a pc power supply would suffice to power 16 of these LEDs? I would think yes but I don't really know if leaving the 12V line hanging presents a problem

Evan Flint said...

@Dan Labarowsk: I could have driven the LED's much further but then more elaborate heat sinking would have been necessary. And it would have been a little overkill for the room. I balanced out cost, effort and power and came up with that solution. Let me know if you'd like any assistance with your project and we can talk directly.

Khaled said...

Hi Mate!

Can you share tha project you made?
I was planning to do something similar and could use some help.

If you can't share the project can you help me to do it?

Thanks.

PS: that thing you did with this basement it's just awesome. ;p