Introduction: LED Strip Controller W/ LED Amp + Arduino

About: IT-professional by day, DIY hobbyist (among other things) on my free time. I always have one or more projects going on. Usually something to do with home improvement or a tech project or a combination of the t…

Forget about DIY LED drivers with mosfet transistors! It is extremly simple to drive high powered LED-strips with Arduino at low cost without getting into too much circuitry. The secret is cheap mini LED Amplifiers.

This instructable is just about driving LED strips. If you want to see an application, see this Instructable: Arduino Helipad for mini Quad Copter

*** A word of warning - some people have had problems with overloaded/fried Arduinos using this instructable. Please read the comments before deciding to try it for yourself. If you come up with a more robust twist to the project, please comment below! ***

Step 1: Background and Circuits

See pictures for three circuit examples. The first picture reflects the implementation in this Instructable. The second circuit is for two RGB strips (uses all 6 PWM out on the Nano). The third circuit is for six single color strips (all Nano PWMs). Each mini LED amp can put out up to 12 amps. You can put more in parallell or at the end of a strip light as many meters of strip you want, provided you have a good 12v power source.

Each LED "pixel" on a strip consists of three light emitting diodes (LED). Most LED Strips are common anode. This means that the positive end of the diodes are connected at +12v at both ends of the strip. Connect +12v to the anode and 0v to B, R, G to light each circuit up. Single color strips and RGB look the same to the naked eye. Even single color strips have copper connectors which are labeled +12v, B, R and G even though all LED's are the same color.

LED Amplifiers/Repeaters are sometimes called RGB amps. Don't let that fool you. They work just as well for single color strips. A LED Amp is fed by 12v and has inputs/outputs labeled +12v, B, R and G just like the strips. The inteded use of the device is to take the input voltage potential, which can be considerably lower than 12v at the end of a long strip, and boost it back to 12v by feeding more power. I have discovered that a 5v voltage difference on the input is enough to get the LED amp to boost the signal to 12v on the output which means that we can toggle the Amp 12v outputs by means of Arduino digital pins. Arduino digital outputs operate at 0 or +5v.

The circuits connect 5v out on the Arduino to 12v on the LED Amp input (common anode). This may seem wierd. I'll try to make some sense of it. The R, B, G inputs of the amp are attached to Arduino digital out. Setting a pin to 0 creates a 5v potential to the common anode which will result on a 12v potential on the corresponding output which will light up the LED. In other words, a digital 0 turns the light on. A digital 1 turns it off. Or, when using PWM duty cycles, 255 is off and 0 is on.

Step 2: What You Need

Go shopping (probably ebay) for:
  1. 5050 SMD LED Strip
  2. Mini LED amplifier/repeater(s)
  3. Arduino Nano (or other preference)

Step 3: Wire It Up

Wire the Arduino to the input and theLED strip to the output of the LED Amp seen in the picture. You can power the Arduino from +5v or +12v (not some versions of Arduino. Check the spec). Your choice.

Step 4: The Software

Download Arduino IDE from http://arduino.cc/en/main/software and flash the following sketch to try it out. The sketch was used on the RGB strip as seen in clip in step 5. It fades each color up/down then white up/down.

int ledPinR = 3;
int ledPinG = 5;
int ledPinB = 6;

void setup()  { 
} 

/* Note:
When driving LED's using common anode LED AMP's you have to inverse the duty cycle,
i. e. 255 is off and 0 is full power.
*/

void loop()  { 
  // Red
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    analogWrite(ledPinR, fadeValue);         
    delay(30);                            
  }
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    analogWrite(ledPinR, fadeValue);         
    delay(30);
  } 
  // Green
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    analogWrite(ledPinG, fadeValue);         
    delay(30);                            
  } 
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    analogWrite(ledPinG, fadeValue);         
    delay(30);
  } 
  // Blue
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    analogWrite(ledPinB, fadeValue);         
    delay(30);                            
  } 
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    analogWrite(ledPinB, fadeValue);         
    delay(30);
  } 
  // White
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    analogWrite(ledPinR, fadeValue);         
    analogWrite(ledPinG, fadeValue);
    analogWrite(ledPinB, fadeValue);
    delay(30);                            
  } 
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    analogWrite(ledPinR, fadeValue);         
    analogWrite(ledPinG, fadeValue);
    analogWrite(ledPinB, fadeValue);
    delay(30);
  } 
}

Step 5: The Result