# RGB LED resistance calculations

This is my first time doing this, so forgive me for what seems like a very basic thing, I have read through both these articles, and I'm still not clear on the exact math to do.

https://learn.sparkfun.com/tutorials/voltage-current-resistance-and-ohms-law/an-ohms-law-experiment

First off, using this image:

http://www.hobbytronics.co.uk/image/data/tutorial/raspberry-pi/gpio-pinout.jpg

I think I have worked out that I should be doing this:

``````RPi pin 7 (GPIO 4)   -> RGB LED Common Anode
RPi pin 11 (GPIO 17) -> RGB LED Red -> Resistor -> Ground wire
RPi pin 13 (GPIO 21) -> RGB LED Green -> Resistor -> Ground wire
RPi pin 15 (GPIO 22) -> RGB LED Blue -> Resistor -> Ground wire
RPi pin 6 (Ground)   <- Ground wire
``````

Given this RGB LED (Common Anode):

https://www.jameco.com/Jameco/Products/ProdDS/2128500.pdf

It seems the Vf is:

``````Red: 2V 20mA
Green: 3.5V 20mA
Blue: 3.5V 20mA
``````

And I'm trying to calculate what resistor I should be using.. My first question is... are the pins on the GPIO 3.3V or 5V?

The main point I'm trying to wrap my brain around is if I'm supposed to subtract the Vf of the LED from the volts provided. Example:

Assuming the pin output is 3.3V, the Red is Vf of 2V with a current of 20mA, how would I calculate the correct resistance?

``````3.3V / 0.02A = 165ohms ??
or
(3.3V - 2.0V) / 0.02A = 65ohms ??
``````

Or, given a 5V GPIO

``````5.0V / 0.02A = 250ohms ??
or
(5.0V - 2.0V) / 0.02A = 150ohms ??
``````

Furthermore, with the Green and Blue.. if they have a 3.5 Vf, and the pin output is only 3.3V, do I need a resistor at all?

• Or maybe it depends on the pins? It would make sense from the picture that 7/11/13/15 are all 3.3V and 12/16/18/22 are all 5V? – slf Aug 19 '13 at 21:11

The GPIO pins will be damaged by 20mA. You need a transistor or driver IC to drive the LED at full brightness.

A resistor will always cause a voltage drop, so the green and blue will only light dimly from 3.3V

To calculate the resistor, you need to understand that the current through the resistor will be the same as the current through the LED.

So if the LED current is 20mA and the forward voltage is 3.5V. With a 5V supply you would have 1.5V across the resistor (at 20mA)

Ohms law says `V = I * R` substituting gives

``````1.5 = 0.02 * R
``````

solve for R

``````R = 1.5 / 0.02
R = 75ohm
``````

For the red led, you have 2V across the LED and 3V across the resistor (5V supply)

``````R = 3 / 0.02
R = 150ohm
``````

Those are the minimum values you should use for the resistors

• Thanks! could you give more details on the transistor calculations? – slf Aug 22 '13 at 13:14

don't worry about the voltage, any LED will work with 3.3V as well as with 5V without any problems. just don't go over 30V, mostly for your own health and safety.

regarding the resistor value, unless you're trying to squeeze the maximum brightness out of your design, I'd suggest you'll go with 470ohm or 330ohm or 680ohm, whichever you have around. your LED will be quite visible with resistors going as high as 1-2kOhm, basically for prototyping work I'd use whatever resistor I have around, there's no practical reason to calculate the exact value.

1-2mA usually gives a reasonably bright response, and reduces the chance to stress your GPIO pins beyond their limits, because they are not supposed to source a lot of current.

and if you need maximum brightness, I'd suggest to use a transistor switch (search for "Darlington transistor" -- these are made exactly for controlling LED and similar things).

• Yes, I am indeed trying to calculate maximum brightness. The LED is the main focus of the project, as it will function as a lamp. – slf Aug 19 '13 at 23:32
• to get the maximum brightness you should get the power from the 5V rail (USB), attach transistor to the GPIO, and limit the current using the resistor, calculated by R = (5V - Vf) / 0.02 A, that's about 75ohm or 100ohm depending on the color. – lenik Aug 20 '13 at 2:01

So the answer to my question is actually that using a Common Anode is unnecessarily complicated for the Pi GPIO.

The better way is to use a Common Cathode, and do this:

``````RPi pin 11 (GPIO 17) -> Resistor -> RGB LED Red
RPi pin 13 (GPIO 21) -> Resistor -> RGB LED Green
RPi pin 15 (GPIO 22) -> Resistor -> RGB LED Blue
RPi pin 6 (Ground)   <- RGB Common Cathode
``````

As far as calculating the resistor goes, you do need to subtract the forward voltage, but the forward current is not what I expected. The pi gpio pins output 3.3v 16mA. And, you need to use a RGB LED with a forward voltage on all pins something lower than 3.3v so it will actually light up.

Given this new LED:

https://www.sparkfun.com/products/105

The calculations for MINIMUM resistance needed:

So the algorithm for a single LED pin is

``````Min Resistor (ohms) = (3.3V - (Vf of the anode)) / 0.016A
``````

in this case, for the red pin that is

``````82 ohms ~= (3.3V - 2.0V) / 0.016A
``````

Which is confirmed by the links above.

The "best" way would be to use an external power source, and a transistor controled via the GPIO, but I'm lazy and won't be doing that.

Thank you #raspberrypi on freenode.

R = (Vpower supply - Vled) / Iled

where the Vled and Iled are nominal operating conditions for the LEDs and obviously running the LED and resistor in series.

You should in theory iterate this method however for most DIY situations im under the impressions this should work.

for example a power supply of 5V (standard on a pi) along with a Vled of 3.3V and a Iled of 20mA you would require 85 Ohms however the nearest standard resistors are 82 or 100, either of which should be satisfactory as there is +- 10% on most standard resistors.

so you are using the correct solution in the equation (the second one for each of your 3.3 and 5v examples) online calculators often go one step further and reccommend a standard reistor amount which is why they are often slightly different to your calculations.