I am new to electronics.

I am trying to control RGB Led Strip (5050) 5m using arduino. In doing so, tutorials recommended using TIP31 mosfets along with resistors. However, I switched them with BC547 transistors along with resistors.

Now, using a 10k resistor decreases the luminosity of the LED strip too much and when I use very low value resistors like 33Ohms, I get the desired brightness, but the resistors become way too hot and have even started blackening.

  • Is this due to replacement of TIP31 with BC547?
  • Or something else is causing this?


enter image description here

Note that, I am using BC547 instead of TIP120 in that schematic, without any heat sinks.

  • \$\begingroup\$ TIP31 is a BJT, not a MOSFET. Just a note. Also, the TIP31 is rated for a LOT more current than the BC547 -- perhaps 20 or 30 times as much. \$\endgroup\$ – jonk Aug 28 '16 at 5:39
  • 1
    \$\begingroup\$ Where are your schematic and values? \$\endgroup\$ – Ignacio Vazquez-Abrams Aug 28 '16 at 5:41
  • \$\begingroup\$ Use a resistor where? Show us what your tutorials recommend, and a schematic of what you actually did. \$\endgroup\$ – Neil_UK Aug 28 '16 at 5:43
  • \$\begingroup\$ Just updated the question. Sorry about that. \$\endgroup\$ – Stoic Aug 28 '16 at 5:49
  • 1
    \$\begingroup\$ That schematic is bad. Using it could lead to damaging the Arduino. \$\endgroup\$ – Ignacio Vazquez-Abrams Aug 28 '16 at 5:51

So much confusion you seem to have:

  • "tutorials recommended using TIP31 mosfets along with resistors" -- A TIP31 is a single NPN BJT usually packaged in a TO-220 package designed for power applications with currents up to a max of about \$3A\$.
  • By the way, the TIP31 is not a MOSFET. BJTs are transistors. MOSFETs are transistors. But not all transistors are BJTs, nor are all transistors MOSFETs.
  • "I switched them with BC547 transistors along with resistors" -- The BC547 is also an NPN BJT, but it is rated for currents up to a max of about \$100mA\$, or about 30 times less than the TIP31. Switching a low power BJT for a high power BJT is usually asking for trouble.
  • "Note that, I am using BC547 instead of TIP120 in that schematic" -- I thought you said you were using a BC547 instead of a TIP31. Now it's a TIP120, which isn't an NPN BJT but is actually a Darlington circuit that includes two BJTs and some resistors and a protection diode. It has still more different behaviors than a BJT.
  • "without any heat sinks" -- Which basically means to me that you are using a very low power BJT in place of.. I don't know what, anymore, except that everything else was designed for a LOT more power than the BC547 is.. a higher power BJT or Darlington.

Yeah. I'd expect trouble. I'm not even sure if it makes any difference to show you what to try, since if I specify an appropriately rated BJT you may run out and get something tiny, again.

The 5050 RGB LED strips come in at least two varieties I've seen -- 30 LEDs per meter and 60 LEDs per meter. You didn't say whether you have 300 LEDs or 150 LEDs. But either way, this basically works out to either \$1A\$ per color or else \$2A\$ per color. Best to plan for the worst and expect \$2A\$ and go with that.

If you apply something like the TIP31 here, which actually might handle a collector current that high, then you have a different problem. The base current will be about \$\frac{1}{10}\$th as much or about \$200mA\$, which is way, way over the ability of the Arduino to drive. This is almost certainly the reason why the TIP120 was specified in that schematic you pointed out. It includes a built-in second BJT that is used to enhance the gain and reduce the need for base drive current. This, in your case, reduces the base current (operated as a switch and even so dropping about one volt) to about \$8mA\$. This is, luckily, within the drive capability of the Arduino.

The circuit you offered shows no base resistor. Normally, this is considered to be pretty bad practice. In this case, I suspect the author was depending on the fact that there is on the order of about \$100\Omega\$ output impedance in the I/O pin for the Arduino. That means it drops about \$800mV\$ just trying to source that current. And the TIP120 anyway requires about \$V_{be} \approx 1.7V\$ to saturate as a switch with collector currents in the area we are discussing. So that's already \$2.5V\$. But it's not \$5V\$, which is why you got a comment that this is not good design shown in the schematic. What will likely happen is that even more current will be supplied, dropping the output voltage from the Arduino still further, until things work themselves out. I estimate then about \$24mA\$ base drive when things settle down. Which is probably not so good for an I/O pin.

I think the design choice for a TIP120 was right, if the concern was (1) to keep the circuit simple so that people would use it; and, (2) to use the TIP120 because it is rated so as to require a level of output current that the Arduino can supply for a circuit needing as much as \$2A\$ per color. I get that. But they should have included a base resistor, at the very least. One that would drop the required voltage so that the Arduino I/O pin is operating nicely within its parameters while at the same time the TIP120 is being given sufficient voltage headroom to drive it and the right current, as well.

The equation to calculate the base resistor, in this case, would be something like this:

\$R_{base} = \frac{Vcc - I_{base}\cdot R_{out} - V_{be}}{I_{base}} = \frac{5V - 8mA\cdot 100\Omega - 1.7V}{8mA} = 312.5\Omega\$

You'd round that up or down. In this case, either direction is probably okay. But a \$330\Omega\$ resistor would be my choice to try.

Here's a schematic.


simulate this circuit – Schematic created using CircuitLab

Note that I'm still saying you could use the TIP120! But do not substitute a transistor that isn't rated for the required power (here, about \$1V\cdot 2A = 2W\$) and isn't a Darlington topology. The design depends on it being a Darlington. You'll need more transistors (as you can see, looking at the insides of the Darlington) if you want to avoid buying a Darlington here.

Now, if you really do not want to use a Darlington, then I think this situation makes a case for using a logic level MOSFET. Otherwise, you will need several BJTs to get there. A MOSFET may be a better fit if all you want to do is keep it simple. An IRF510 might be a reasonable option for a jelly bean part, so to speak. It won't perform any better than the TIP120. But the Arduino should be able to drive it as I think the max Vth is about \$4V\$.


In general, the power dissipated or heat produced by the resistor is a function of the voltage across it and the current through it. This is calculated with the formula

$$P = IV$$

As an example, lets say the resistor has 5V across it and there is a 1A current flowing through it. To calculate the power dissipated (heat), we have

$$P=IV$$ $$P=1A*5V$$ $$P=5W$$

An ideal resistor can dissipate an infinite amount of power. In the real world, resistors are not ideal and cannot dissipate an infinite amount of power. Practical resistors have a maximum power that they can safely dissipate.

The resistors are getting too hot because they are either operating very close to or above their maximum power rating.

To sum up, decreasing the value of the resistors in your circuit, increases the current through them and therefore the power dissipated by the resistors. This increased power dissipation manifests itself as an increase in temperature.


Going from a 10K ohm resistor to a 330 ohm resistor is a pretty big jump. So now you're talking about a noticeable increase in the total power consumption (due to the increased current flow). Assuming, for the sake of argument, that you're not drawing too much power from the Arduino (which is a separate issue, and one you should consider, or you could fry your Arduino), then you need to make sure the resistor(s) you are using are rated for the power level in question.

So if you have, say 5 volts at 2 amps (totally made up numbers), that gives you 10 watts. If you do that using a resistor rated for, say, 5 watts, then yeah, the resistor is going to get too hot and probably fry.

The obvious fix is to use resistors that have a higher power rating. If you don't have those handy, you could cheat and bank your resistors in parallel so that less current is flowing through any one resistor. Note that putting resistors in parallel reduces the resistance, so you'd want to use correspondingly higher resistance components to get back to the original resistance.

All of this said, the change in the transistor could be a factor in why things aren't operating quite as expected, as the "original" transistor being called for may have higher internal resistance. In which case, switching it out is fine in principle, you just have to compensate for that somewhere else in your circuit.

And, again, check the total power draw for your circuit and if the LED strip is being powered by the Arduino directly, make sure you aren't pulling more current than the board is rated for. If it's questionable, power the LED's with an independent power supply and protect the Arduino by using opto-isolators between the output pins and your transistors.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.