If you happen to have a few RGB LED strips around and you play with electronics you are probably tempted to hook them to your arduino (or other preferred microcontroller) and paint your favourite corner of the house with beautiful colours.
Now, if you are lucky and the LED strips have a common anode that's quite simple; follow the instructions that Ladyada has put together and you are done. However if the LED Strip happens to have a common cathod (i.e. red, greeen and blue share the negative side of the voltage gap) you need a bit more circuitry to control with your 5V arduino the oscillation of the +12 volts that led strips tipically require (a bit of further discussion on this arrangement is available).
Tu put it simply you need a low power transistor to provide a voltage high enough to toggle the power mosfet, as the 5V of the arduino are not enough; you can achieve this (for each signal) with a circuit like the following:
Well, in our case we wanted to power 10 such strips and control R, G and B of each one indipendently, so we needed 30 channels; the mosfet used in this configuration is quite overspecified but it has been selected to allow higher loads in the future, if needed, and they are only about 1 pound each anyway.
The next hurdle now is to be able to control the PWM of 30 channels without spending too much time in the design of the circtuitry. The easy way out I chose is to use SoftPWM, a library that allows you to control every I/O pin as a PWM output.
This means that an arduino can control up to 20 channels, so I have connected two arduinos through the I2C protocol to control the 30 channels. The I2C only uses two pins and leaves the Seial port free to communicate with the PC. Of course the PC is optional and the control logic can be stored int the arduino Master firmware. The lenght of the arduino chain is limited by the addresses available on the I2C bus and the desired refresh rate, but this is far from being a problem in this implementation. The overall framework looks like this:
In our case the hardware is controlled from a PC that is animating the space in an interactive installation, but I've also prepared a custom application to control the light effects that will soon be made availanble on our GitHub repository along with the EagleCad schematics and board drawings.