Case side lighting mod
The ten new silent fans I recently purchased came with some rather bright white LEDs attached. For a while, I had my monitor and a piece of cardboard blocking them so that they didn't blind me while I was using my PC. Eventually though, I decided that it was time to do some new case lighting. In the past, I've used cold cathodes, single colour fixed LEDs, UV LEDs and combinations thereof. It was time for something different.
My original design involved simply replacing all 40 fan LEDs (10 fans with 4 LEDs each) with RGB LEDs. While this would have been entirely possible, I decided that it would not look as cool as simply attaching some RGB LEDs to the inside of my side panel, similar to UV LEDs I've had there in the past.
Attaching and wiring up 40 RGB LEDs at the edges of the window on my side panel was going to be a nightmare, so I reduced it to 20 RGB LEDs (five per edge of window). Controlling this many RGB LEDs individually was also going to be another design problem. My weapon of choice for a microprocessor was an Arduino Pro Mini 328 (5v/16MHz). I'm in love with these at the moment as they are small, simple to use and are well documented on the Arduino website.
The next challenge was to choose something to allow the Arudino to control this many RGB LEDs. Remember, I've got 20 RGB LEDs that I want to be able to control individually. That means I need 60 channels of PWM control (20 LEDs with R G and B channels = 60 channels). Fortunately I'd done some prior research on this and come up with two possibilities: shift registers or the TLC5940 from Texas Instruments. My first experiment was with the shift registers. My theroy was that I could achieve brightness control by shifting the bits really fast and relying on persistence of vision. Unfortunately, I found the shift registers to be more trouble than they were worth.
I discovered the TLC5940s after some Googling following the failure of my first experiment. As one was expect, they carried a hefty price tag compared to the shift registers, but they fit my requirements perfectly. In my research, I'd also found an extremely helpful TLC5940 tutorial on the Arduino website. After breadboarding and testing, it was time to start the build.
For the build, I decided to start with the bit that was least likely to give me headaches - the physical placement and wiring of the RGB LEDs. I found some 16 wire rainbow cable at my local Jaycar, and after parting with most of my spare change, started slicing up the rainbow cable. The arrangement involved having three wires for each LED (15 wires total) and the last wire for the common anode. After a few hours, the build started to take shape:
Now, for those of you keeping track of the numbers, you'd realise that that wiring will require a total of 61 wires ((20 leds x RGB) + anode = 60). To connect these with the controller circuitry, I settled on using two round IDE cables I had lying around. I managed to recycle a small section of protoboard to widen the pin spacing on the IDE header so that it would fit in my main protoboard.
So, the fun of building the main controller board began. I decided that I'd have two TLC5940s back to back on either side of the IDE header, so that their outputs would line up with the IDE header directly. I also decided to add a 7 pin debug header, so that I could connect the controller to my Arduino prototyping board for testing.
Now it's time for testing the TLC5940s all together using my debug header.
Something was a bit wrong, the LED order was seemingly random. At this point, I remembered that IDE cables aren't straight through, and decided to introduce my face to the desk with a loud thud. I had to swap out the IDE cables for the prototyping jumper leads pictured above. Luckily at this point I'd only half completed the build. To resolve this problem, I ended up making my own cables to connect in the IDE header, as seen in the photo above with two sides complete.
Okay, with that hitch out of the way, I continued with the build.
To be sure, I did another test with the new home made connectors. With the exception of a couple of channels, the LEDs illuminated in correct channel order.
Fitting the whole thing in to the case was a bit of a challenge in itself, as there wasn't much room betwen the ribbon cables and the various mating parts of the case side. The water cooling tube running right next to the case side didn't help much either. But, after some jiggling and shoving, the side was back on with the lighting system connected. The placment of the control board wasn't very good, but at least it wasn't shorting anything out.
Now all I have to do is place that control board in a better location and do some general cable management in my case.
Follow up (April 2014)
It has now been several years since I performed this mod. For some time now, this system has been replaced with a newer, neater and more elaborate system.
Nowdays, I have four strips of individually addressable LEDs from Adafruit. These are built using the LPD8806 LED controller IC.
As far as I understand, these controllers function similarly to the original TLC5940 (i.e. as shift registers).
This setup results in a much neater lighting system, as all controller ICs (except for the Arduino) are contained within the lighting strip. The big, ugly controller board has been replaced with a much more modest controller.
For (control of) the latest iteration, I have used a Leostick from Freetronics, which is an Arudino Leonardo clone. These have USB control circuitry integrated (much like the more recent Arduinos), but are quicker for me to source (and for around the same price).