El circuito de transistor para encender/apagar el motor no funciona (Arduino)

He estado tratando de crear un circuito de transistor simple con un 2N3904 que activará y desactivará un motor de CC con engranajes sin extraer energía del arduino; he seguido el esquema que se ve en la segunda imagen.

(Vista de tablero)

(Esquemático)

El circuito no se está comportando como esperaba. Para fines de prueba, he estado alimentando los 5V del arduino al pin base (antes de la resistencia) para activar el 'interruptor' del BJT. Esto solo alimenta el motor cuando tengo una resistencia de bajo valor en la base (~ 10 ohmios). Cuando uso una resistencia de 1k, el motor no enciende. Además, he usado un pin digital configurado en alto para intentar alimentar el pin base y encender/apagar el motor, pero esto no hace nada, independientemente del valor de la resistencia.

¿Quizás mi circuito es incorrecto? Todo lo que quiero que haga el circuito es encender y apagar el motor cuando le entrego una señal alta del arduino.

Notas: El cable rojo que ingresa al nodo en la parte superior proviene de una batería de 9V. El bus de tierra en la protoboard tiene tanto la tierra de arduino como la tierra de la batería conectadas a él.

¿Qué motor? ¿Ficha de datos?
El motor se encuentra aquí: jameco.com/webapp/wcs/stores/servlet/…

Respuestas (4)

Su motor al que se vinculó es un motor de 4.5V 190~250 mA (sin carga). A 9v, la corriente probablemente aumenta. Lo estás sobrecargando en un 200%. Y cualquier carga/peso también hará que aumenten los requisitos actuales. La corriente de parada es probablemente 10 veces mayor que al menos.

Le falta el diodo de protección en el motor, que puede matar fácilmente el transistor.

El transistor que está utilizando es un estándar de 100 mA, máximo absoluto de 200 mA . Uno de esos motores por sí solo sin carga puede matar fácilmente ese transistor.

La resistencia base se calcula como (Base Voltage - Base-Emmiter Voltage) / Current required. El voltaje base es el pin Arduino, por lo que 5v, Vbe depende de la corriente del colector, que aquí es de 200 mA, por lo general, 1V. La corriente requerida se calcula como Corriente de colector (200 mA) / Hfe (De la hoja de datos, 10~30). En el lado seguro, vamos con 10, entonces 200/10 = 20mA necesarios en la base.

(5V - 1V) / 20mA o 4V / 0.02A = resistencia de 200Ω. Una resistencia de 1 kΩ solo permitiría 4 mA en la base, lo que multiplicado por el Hfe de 10, solo permitiría 40 mA en el colector, probablemente no sea suficiente para encender el motor.

TLDR: necesita el diodo de protección, su fuente de alimentación de 9v es demasiado alta y su transistor es demasiado débil para el motor que está utilizando. Y necesita una resistencia más grande en la base porque el motor requiere más corriente de lo que piensa. Un transistor 2n2222 común con una resistencia de 470 Ω funcionaría mucho mejor.

Editar: no hacer que el pin sea una salida también pone un freno a las cosas. Respuesta, los pines de Arduino están predeterminados en la entrada.

Sin mencionar que una batería de 9V no puede suministrar cerca de 250mA.
Hola transeúnte, implementé todos estos cambios hoy: agregué un 1n4001 en paralelo con el motor y el capacitor, siguiendo el circuito que se muestra en este video: youtube.com/watch?v=5bHPKU4ybHY , cambié el 2n3904 con un 2n2222 y cambié la resistencia base a 470ohm. Todavía tengo el mismo problema sin embargo. Si alimento la base con los 5V del arduino, el motor se enciende, pero al alimentarlo con una señal ALTA desde un pin de E/S digital no se obtiene nada. Estoy atascado una vez más :s
@ pwee92 que hace que parezca un problema de código. El pin arduino gpio es más o menos lo mismo que vcc, o 4.9 voltios, y puede generar suficiente para esa resistencia. No debería haber diferencia. Si pones un led + esa resistencia de 470Ω en lugar del transistor se enciende? ¿Puedes publicar tu código?
Probaré el LED cuando llegue a casa esta noche y te responderé, gracias por todos tus aportes hasta ahora, por cierto. He pegado mi código aquí: pastebin.com/HwudHKSU
@ pwee92 No soy un experto en Arduino, pero parece que olvidó declarar el pin del motor como salida . El valor predeterminado es input, y el uso de digitial_write alto en un pin de entrada permite un pullup débil de 20k, que no sería suficiente para hacer nada. Intente agregar pinMode(motorPin, OUTPUT);en la sección de configuración(). HH.
Oh hombre. Siempre son las cosas simples, ¿no? Supongo que es por eso que echar un segundo vistazo es tan crucial. ¡Gracias!
@ pwee92 le pasa a todo el mundo. Sin embargo, todo lo demás sigue siendo válido, es mejor reemplazar el insignificante 3904 por el n2222, la resistencia, el diodo, etc.

La explicación más probable es que el motor necesita más corriente de la que el transistor quiere entregar. Has medido la corriente del motor?

De hecho, puede ser que el motor requiera más corriente de la que puede suministrar su batería de 9V. ¿Ha hecho funcionar el motor directamente con la batería de 9V?

Lo segundo más probable es que la fuerza electromagnética del motor haya hecho estallar el transistor. Sustituya el motor por una pequeña bombilla incandescente y vea si puede arrojar algo de luz sobre el tema.

Coloque un diodo de polarización inversa a través del motor. Probablemente tomaría un 1N4001 o algo similar.

Hola John, no he medido la corriente del motor porque no tengo acceso a un multímetro en este momento (el mío parece estar roto). He hecho funcionar el motor directamente con los 9 V sin problemas, por lo que creo que debería proporcionar suficiente corriente para esta aplicación. Tengo entendido que, dado que los 9 V proporcionan la corriente, cuando se activa la base, ¿debería permitir que fluya toda esta corriente? Sin embargo, parece que la corriente proporcionada al motor es una función de la corriente en la base. Probaré tus sugerencias cuando tenga la oportunidad. Salud.
No sé dónde vives. Donde vivo, los DVM chinos de productos básicos aceptables cuestan alrededor de diez dólares cada uno en la tienda de herramientas local.
Diablos, el flete portuario regala sus 5 ~ 10 dólares uno (cupón en su folleto) como cada dos semanas. @JohnR.Strohm

Por lo que vale, creo que los MOSFET de canal N con puertas de nivel lógico son mucho más fáciles de usar que los transistores NPN para este tipo de conducción. Una resistencia de un kiloohmio funcionaría bien para la base, ya que solo se necesita una pequeña cantidad de carga para hacer que el MOSFET conduzca, y luego no consumirá básicamente nada.

El BS170 (similar al 2N7000) viene en una versión de 500 mA que es excelente para la experimentación de propósito general y puede comprar 25 por unos pocos dólares. El MOSFET de canal N IRLB8721 es excelente para manejar cosas más grandes (fácilmente más de 10 amperios sin disipación de calor) y cuesta alrededor de un dólar cada uno. En buena medida, probablemente desee una resistencia de 220 ohmios en la puerta de eso, para encenderlo bien y rápido.

Es posible que haya invertido demasiada fe en el transistor. Cuando miro la hoja de datos del 2N3904, tiene una corriente de colector máxima de 200 mA, que es lo que obtiene su motor de CC. Los motores de CC son dispositivos de alta corriente, trate de averiguar la corriente necesaria para encender este motor.

La corriente de colector del transistor será una función de la corriente a la Base del transistor. Recuerda que B*I(b) = I(c).

Cuando usa el pin de 5V del Arduino, se conecta directamente a la salida del LDO integrado. Esto será mucho más adecuado para impulsar su motor de CC, por lo que este pin funcionará (una corriente de base más alta es igual a una corriente de colector más alta).

Sin embargo, Arduino solo puede generar un máximo de 40 mA por pin de E / S, no he verificado la corriente máxima del LDO, pero estoy seguro de que es mucho más alta.

Aquí está el esquema de referencia: Arduino Schematic

De todos modos, el consejo más pragmático que puedo dar es que su transistor solo debe usarse para impulsar pequeños motores de juguete. Si tiene un motor de CC de valor, es necesario usar un relé o un transistor más robusto.

Hola Nick, el motor que estoy usando es para fines de juguete/robot: jameco.com/webapp/wcs/stores/servlet/… Siento que la corriente proporcionada por el pin de E/S debería ser suficiente, especialmente con tutoriales como este: youtube.com/watch?v=5bHPKU4ybHY Traté de seguir ese ejemplo exactamente (menos el diodo, no puedo agarrar uno ahora), pero fue en vano.
Teóricamente en este punto, todo debería funcionar. Lo que deberá hacer es comprar un multímetro y medir la corriente que fluye a través del motor de CC. Necesitará saber con seguridad si el motor está siendo alimentado lo suficiente o no. Toda la suerte.
Intentaré conseguir un multímetro lo antes posible, gracias. Si la corriente proporcionada por el pin arduino no es suficiente, ¿tiene alguna sugerencia sobre lo que debería hacer (quizás un enfoque diferente)? Mi proyecto gira en torno a encender y apagar el motor según la lógica escrita en mi programa arduino
@PhilFrost Sí, ese fue un comentario apresurado que hice y no fui muy específico; mi intención no era hacia todos los transistores, sino hacia el transistor específico. Haré una edición.
@ pwee92 No medirá la corriente del Arduino. Querrá medir la corriente al colector porque esa es la corriente que está recibiendo el motor. También querrá considerar el comentario de Passerby sobre el voltaje en el motor.