¿Cómo usar un transistor para conducir cadenas de LED desde pines GPIO?

Esto es similar a How to drive a 20mA LED from a 4mA max GPIO Pin, excepto que necesito un poco más de control para entender lo que está sucediendo.

Para los antecedentes, soy ingeniero de software y actualmente solo sé lo suficiente sobre electrónica para probar con éxito una batería de 9V con mi lengua.

Tengo una placa Arduino Uno que he manipulado para controlar por separado 3 LED que parpadean en un tipo de configuración de "luces de persecución". He conectado cada pin GPIO directamente a un LED, una resistencia y de vuelta al pin de tierra de +3V de la placa. El software enciende los pines GPIO a intervalos para lograr el efecto deseado.

Con un LED cableado, todo se ve muy bien. Al agregar un segundo LED a cada uno de los 3 circuitos pequeños (para "extender" mi cadena de luces de persecución), los LED se atenúan considerablemente. Mi plan era eventualmente cablear una cadena de 10 LED para cada circuito para un total de 30 LED. Obviamente, si no puedo encender 2 LED, 10 están fuera de discusión.

Así que pensé en usar un transistor para cada circuito con el GPIO simplemente proporcionando el "disparador" para encender el hilo de 10 LED. Conecté algunos LED, una resistencia y el transistor, y lo conecté todo a una batería de 9V. Está oscuro, como era de esperar. Solo hay un pin base en el transistor, por lo que obviamente el pin GPIO debe estar conectado a eso , pero ¿cómo debo completar correctamente el circuito de regreso a la placa Arduino?

Experimenté tomando una batería de 3V y conectando el terminal negativo al pin del emisor del transistor y luego tocando el pin base como disparador y parecía funcionar, pensé que los LED parpadeaban un poco. Eso podría deberse a que mis manos no eran muy estables. ¿Es este el enfoque correcto para trabajar con los pines GPIO de Arduino?

Aquí están todas las especificaciones eléctricas de los componentes que tengo frente a mí, porque las matemáticas importan, por supuesto.

Arduino GPIO: 5V LED: NTE30143 5V 25mA (corriente directa continua) Transistor: 2N4401 600mA

¿Cuál es la forma "adecuada" de usar los pines GPIO de Arduino para encender una cadena de 10 LED? ¿Se puede hacer con los componentes anteriores, o realmente debería hacerse con un circuito más complejo?

Estoy construyendo esto como un prototipo para que algunos estudiantes de primaria lo construyan ellos mismos, y prefiero hacer el circuito lo más simple posible.

(Puntos de bonificación por explicar dónde deben ir las resistencias, cuáles deben ser sus valores y por qué deben estar allí en primer lugar :)

ACTUALIZAR

Olvidé mencionar que quiero cablear cada cadena de 10 LED en serie, no en paralelo, quiero minimizar la cantidad de cable requerido. Estos LED terminarán separados entre 4 y 5 pulgadas y la cadena completa de 30 LED formará un gran bucle, por lo que no quiero encadenar cada LED individualmente. Me gustaría tener 3 bucles grandes de 10 LED cada uno con todos los controles en un solo lugar.

ACTUALIZAR

Un último requisito (creo): esto tiene que quedarse sin pilas. Sin alimentación de red. :)

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat . Cualquier conclusión a la que se llegue debe volver a editarse en la pregunta y/o cualquier respuesta.
Solo para su información, las baterías de 9V son caras y tienen poca capacidad. Si quieres usar pilas alcalinas, AA o AAA serán mucho mejores. Si desea la mejor batería recargable, elija iones de litio, pero dependiendo de la edad de los niños, puede ser una mala idea y complican el circuito de carga, por lo que NiMH es probablemente su mejor opción. Si está manejando LED con resistencias, el coeficiente de temperatura de las resistencias se usa para evitar la fuga térmica, por lo que la resistencia probablemente debería caer entre 1/4 y 1/3 de su voltaje, pero 9V es mucho más de lo que necesita. 3 pilas alcalinas AA o 4 NiMH AA probablemente sean buenas.
@KH Gracias por la nota sobre las baterías. De hecho, estoy usando una batería NiMH recargable de 9V que en realidad proporciona ~8.5V cuando está completamente cargada. No tengo un paquete de baterías para AA a mano, así que estoy usando el 9V como un sustituto conveniente. Cuando ya no tenga que equilibrar las cosas en mis manos como prueba de concepto, cambiaré los 9 V por algo que proporcione más cerca de 5 V y dure más (probablemente 4x 1.2 V NiMH).
Tiene sentido. También puede agregar un regulador de voltaje al circuito si lo desea, pero tendría que ser un regulador de conmutación para mejorar la vida útil de la batería. La mejor manera de alimentar los LED es con un regulador de corriente, pero eso probablemente no sea tan útil para enseñar.
¿Cuál es el rango de voltaje de los LED que está usando y a qué voltaje considera que su batería se agotó?
La clasificación GPIO de 4 mA es solo para márgenes de niveles lógicos estándar a máxima velocidad, lo que no se aplica aquí. GPIO en lógica de 3 V es de 25 ohmios, por lo que la caída de voltaje de 50 mA es de 1 V y está bien para los LED con 50 mW de calor agregado por puerto.

Respuestas (3)

Tienes un GPIO débil. Quiere 250 mA y quiere (créame en esto) saturar su transistor de salida. Un 2N4401 necesita una relación de corriente base a corriente de colector de 1:10 en saturación. Entonces necesita 25 mA en la base de su transistor de salida. Esto es más que sus débiles suministros GPIO. Entonces necesitas otro transistor.

Q1 es un seguidor de emisor. El voltaje del emisor será de 0 V cuando el pin GPIO esté bajo y de 0,7 V por debajo del voltaje del pin GPIO cuando el pin esté alto. Suponiendo que el voltaje de suministro al microprocesador es de 5 V, la base de Q1 será de 4,3 V cuando el pin GPIO esté alto. La base de Q2 estará en aproximadamente 0,7 V cuando Q2 esté encendido. Esto deja 3,6 V para generar corriente a través de R1.

Necesita 30 mA en R1 (eso es 25 mA redondeado). (3,6 V)/(30 mA) = 120 Ω (Tenga en cuenta que las unidades funcionan, es bueno cuando eso sucede). Siempre que su Arduino sea una unidad de 5V, está bien. Cambiar R1 a 47 Ω si es de 3.3V.

A los LED no les gusta ser alimentados por una fuente de voltaje: debe comenzar con el voltaje que está suministrando y averiguar cómo darles la corriente especificada. Sus LED caen alrededor de 3.5V (verifique eso, voy de memoria y soy perezoso). Suponiendo que está manejando esta cadena desde una fuente de 9V, puede ejecutar pares en serie con una resistencia de límite de corriente; ese es el R2 que estoy mostrando en el diagrama.

Si usted tiene norte LED en una cadena (dos si es de 9 V, uno si es de 5 V), luego

R 2 = V C C norte V yo mi d I yo mi d
En el caso de que uses 9V y quieras 20mA, eso es R = (9V - 2 * 3.5V) / (20mA) = (2V) / (20mA) = 100 Ω .

Tenga en cuenta que probablemente no desee obtener sus 9V de una batería de "9V". Una batería de "9V" es de 9V, completamente cargada con una carga ligera, y no desea extraer más de unos 50 mA de ella. Si va a extraer 250 mA (o incluso 125 mA), entonces debe diseñar su circuito para que siga funcionando a alrededor de 6 V , lo que significa solo un LED por sección, lo que significa el doble de corriente, no puede ganar por perder, etc. .

Entonces, use una verruga de pared de 9V y sea feliz.

esquemático

simular este circuito : esquema creado con CircuitLab

Entonces, el pin GPIO del Arduino está conectado al pin base del transistor, pero ¿cómo conecto todo el circuito a la tierra del Ardiuno? ¿Y dónde está conectada la alimentación "externa" al circuito? Todavía soy demasiado tonto para poder leer el diagrama del circuito que tienes, lamentablemente.
El pequeño triángulo en la parte inferior significa "tierra". Entonces, el emisor de Q2, la tierra de su fuente de alimentación externa y la tierra de Arduino se conectan entre sí. Conecte el terminal + del suministro externo al colector de Q1 (la red etiquetada como "Ver texto"). Si puede suministrar suficiente corriente, puede usar la misma fuente de alimentación para las luces y el Arduino.
De acuerdo, eso es lo que asumí que funcionaría pero también me preocupaba un poco . Para mí, estaba claro que la única forma de completar el circuito con el pin GPIO era conectar todo a tierra, pero estaba un poco preocupado de que pudiera terminar volcando parte de la corriente de la fuente de alimentación externa al GPIO.
Mi circuito actual tiene 6 LED en total en 3 "cadenas" separadas. Cada LED está acoplado con una resistencia, y cada uno de los pares de LED+R está conectado en paralelo entre la fuente externa + y el pin colector de un transistor (es decir, 3 transistores). Cada uno de los 3 pines GPIO está conectado al pin base de un transistor (cada uno). Todos los pines del emisor están cableados junto con la tierra "compartida" de la fuente externa y la tierra GPIO en el Arduino. El Arduino tiene una batería de 9V que lo alimenta, y la "fuente externa" es otra batería de 9V (demasiada, lo sé). Todas las luces son brillantes y no hay humo mágico.
Entonces, parece que lo siguiente que debo hacer es configurar otro bucle que separe el GPIO de los transistores introduciendo otro transistor entre GPIO/transistor existente. Estoy empezando a quedarme sin espacio en mi protoboard de 30 columnas :)
Espero que tenga transistores limitadores de corriente desde GPIO hasta la base del transistor; mi esquema no lo tiene porque Q1 tiene una corriente limitada automáticamente en virtud de ser un seguidor de emisor. Si está manejando un transistor directamente desde un GPIO, debe tener una resistencia como R11 en el esquema de @Electron (y debe ser más grande que (5V - 0.7V) / (4mA) = 1075 Ω , o 1200 Ω más o menos).
Si desea alejarse del 2N4401, también puede usar transistores Darlington (más ganancia de corriente), pero caen alrededor de 1V en saturación. O podría usar MOSFET de nivel lógico de canal N, que son impulsados ​​por voltaje en lugar de por corriente.
Estaba a punto de escribir esto... curiosamente, en el "paquete variado de transistores" que compré, algunos de ellos son "transistores Darlington" (por ejemplo, MPSA13). Parece que simplemente podría reemplazar mi 2N4401 con un MPSA13 y admitir más LED que con el 2N4401, ¿sí?
Re: transistores limitadores de corriente para GPIO a base... no, no los tengo, así que los agregaré. Hablaba en serio cuando dije que mi experiencia se limitaba a enviar mensajes de texto con baterías de 9V con la lengua.

esquemático

simular este circuito : esquema creado con CircuitLab

Las resistencias R1 a R10 son resistencias limitadoras de corriente, para cada LED de la hoja de datos, la corriente directa es de 20 mA a 3,1 V de voltaje directo. de esta fórmula

ingrese la descripción de la imagen aquí

donde Vs es el voltaje de la fuente, Vf es el voltaje directo del led e i es la corriente. obtenemos R casi igual a 100 (valor estándar más cercano). en el circuito de led en paralelo, debe agregar una resistencia separada para cada rama de led, ya que, aunque tienen las mismas especificaciones, sus voltajes directos son una ligera diferencia y dan como resultado que algunos led se enciendan brillantes y otros apagados. incluso algunas veces se quemarán . entonces la mejor práctica es agregar una resistencia individual en cada rama (para led individual)

con respecto a los cálculos de la base del transistor

número total de leds: 10 consumo de cada led: 20mA

entonces la corriente total es: 20*10 = 200mA es la corriente del colector.

el factor de ganancia actual de 2N4401 es 40 @ 500mA (ya que aunque es 100 @ 150mA, pero cruzamos el límite, considérelo como 40)

Ic = hfe * Ib (corriente de colector = ganancia * corriente base)

entonces Ib = 200/40 = 5mA (esta es la corriente base mínima requerida para obtener 200mA de corriente de colector).

NOTA: Arduino GPIO puede entregar hasta 40mA. entonces puede optar por esto. Si desea controlar esto incluso con menos corriente base (según su pregunta con 4 mA, necesita un transistor adicional en la configuración de par darlington)

ahora la base se maneja a través de arduino GPIO (5V) el voltaje efectivo a través de la resistencia es = 5V - Vbe (voltaje del emisor base) = 5V - 0.7V = 4.25V

Entonces Ib = resistencia base V / resistencia => resistencia = resistencia base V / Ib => 4.25/0.005 => 850 ohm, por lo que el valor más cercano con algún factor de margen será 750 ohm / 820 ohm

Sin embargo, 4 mA en la base no llevarán el transistor a la saturación de manera confiable; probablemente reducirá el voltaje del colector a menos de 1 V, pero a más de 0.2 V.
@TimWescott Entonces, ¿el problema con un enfoque de "transistor único" es que el pin base necesita suficiente amperaje en relación con el amperaje del colector para activarse realmente?

Este es el método simple de contador de Johnson que usa 10 Cd ~ 20 Cd 5 mm 5000k LED usando solo 5 mA por LED, que es realmente brillante con estos.

Con 30 resistencias más, puede desvanecer el LED principal y posterior a la mitad de la intensidad

ingrese la descripción de la imagen aquí

Un efecto más suave utiliza resistencias y transistores como este. ingrese la descripción de la imagen aquí

La resistencia de 50 ohmios controla el brillo y la corriente promedio y se puede emparejar a 25 ohmios.

Enfoque de seguidor de emisor de transistores

Asumiendo 5V GPIO

esquemático

simular este circuito : esquema creado con CircuitLab

Si asumí mal y es un 3.3GPIO, entonces se necesita otro diseño. ACTUALIZAR aha 3V argh ..

Así que ahora necesitamos un interruptor HEX de drenaje abierto inversor de bajo voltaje en el chip DIP. http://www.ti.com/lit/ds/symlink/cd74ac05.pdf

Con Vcc=3V a 5V la resistencia del interruptor < 20 Ohms. que invierte todas las entradas y los LED en ÁNODO común a 5,0 V sin una resistencia compartida de 50 ohmios que ahora usa la resistencia de drenaje abierto.

se necesitan más cálculos.

Aprecio el diseño de "mejor circuito", pero quería entender cómo usar GPIO para activar la cadena de LED conmutada por transistor.