Su circuito tiene varias fallas.
- Eso no es un transistor NPN. Es un MOSFET de canal n.
- No hay motor. En ese circuito solo estás "cortocircuitando" (en caso de un MOSFET ideal) el suministro de 9-V.
- No hay diodo de retorno. A menos que esté usando motores muy sofisticados (por ejemplo, piezoeléctricos), asumo que está usando un motor electromagnético. Por lo tanto exhibirá comportamiento inductivo. Una vez que apague su transistor MOSFET / NPN, la inductancia del motor intentará mantener el valor de la corriente que estaba fluyendo en él (ley de Faraday-Neuman-Lenz). Para hacer esto, creará "lo que sea" voltaje que requiera para forzar tal corriente. Eventualmente, esto alcanzará el voltaje de ruptura de MOSFET / NPN, que no es bueno.
- No hay resistencia desplegable en el Pin de Arduino. Cuando el Arduino se encuentra en el estado de restablecimiento, todos sus pines de E / S se configuran como entrada sin recuperación (el problema es aún peor si se habilitó la recuperación). Esto significa que la base / compuerta está flotando y lista para recoger todo el ruido. Esto es muy peligroso ya que, en el mejor de los casos, el motor simplemente podría encenderse (o aún mejor, no ocurre nada), en el peor de los casos, el BJT / MOSFET se apagará, porque lo está llevando a la región de "amplificación" (región lineal para BJT , región de saturación para MOSFET). En dicha región, las corrientes y los voltajes altos están presentes simultáneamente, por lo que la disipación de energía es enorme (¡no es necesario que esté en un interruptor!).
Le sugiero que no use un BJT, especialmente para motores de corriente relativamente alta. De hecho, necesitaría un BJT de potencia, pero los BJT de potencia tienen una ganancia de corriente muy pobre, por lo tanto, la corriente de base debería ser bastante alta. Es posible que el pin GPIO de arduino no proporcione suficiente corriente para encender completamente su BJT. El uso de un transistor Darlington no ayudaría demasiado, ya que su voltaje de saturación es bastante alto: necesitaría un disipador muy grande.
En su lugar, utilice un canal n, LOGIC-LEVEL (es decir, bajo voltaje de umbral), bajo Rds (ON), MOSFET de potencia. Cuál depende, por supuesto, de su requerimiento! Digikey o Mouser tienen buenos motores de búsqueda.
Los esquemas finales deben ser:
simular este circuito : esquema creado usando CircuitLab
Debe elegir el MOSFET y también el diodo, según las especificaciones de corriente del motor (sí, también en el voltaje, que es bastante bajo en su caso).
La resistencia de 4.7k Ohm asegura que la E / S de Arduino permanezca baja (no para encender el MOSFET) incluso si configuras accidentalmente el pin como una entrada con pull-up.
Si el motor es de muy baja potencia, entonces puede usar un BJT, en lugar del MOSFET, siempre que coloque una resistencia de serie adecuada entre R1 y la base del BJT.
EDITAR:
Si la batería de 9 V a la que se refiere es una batería PP-3 estándar, asumo que su motor tiene una corriente muy baja. De hecho, tales baterías tienen una capacidad de corriente de salida muy limitada. En ese caso, un BJT como BC337-40 podría funcionar para usted. El diodo y los dos resistores (uno es R1, el otro, no se muestra para el MOSFET, pero está en serie hasta la base del BJT) aún son necesarios.