Photo by Axel R. / Unsplash

Controla un motor con un transistor NPN

Arduino 21 de jun. de 2023

Si has estado siguiendo mis artículos, sabrás ya que es posible controlar tanto la dirección como la velocidad de un motor de corriente continua mediante un puente H; hemos visto cómo hacerlo mediante el L298N y el L293D, con enlaces a continuación:

Módulo driver puente H L298N con Arduino
Tutorial, guía de cómo usar el Módulo driver puente H L298N con Arduino para controlar motores de corriente contínua.
Control mediante L298N.
Puente H L293D para controlar motores
Tutorial L293D para controlar dirección y velocidad de un motor de corriente continua con Arduino. Código, esquemático y datasheet.
Control mediante L293D

Sin embargo, es posible que necesites una solución más sencilla, quizá solo quieres controlar la velocidad o si el motor está encendido o no, pero la dirección siempre será la misma. Para estos casos, con un simple transistor que haga de interruptor es suficiente. ¡Veamos cómo podríamos hacerlo!

Control mediante transistores

Puedes pensar en un transistor BJT NPN como un interruptor que deja fluir corriente de su colector a su emisor según el valor de voltaje que vea en su base. Piensa en ello como un grifo, a más voltaje en la base, más abierto está y más corriente deja pasar.

En nuestro caso, únicamente nos interesan las posiciones extremas: completamente abierto o completamente cerrado, lo cual nos simplifica mucho las cosas.

La idea detrás de nuestro circuito es el de usar la salida PWM del Arduino para alimentar la base del transistor, con lo cual estará completamente abierto cuando la señal de PWM sea alta y completamente cerrado cuando la señal de PWM sea baja, en efecto amplificando nuestra señal de PWM, pues el colector estará conectado a una fuente externa (de 9V en mi ejemplo).

De esta manera podemos controlar una potencia alta (alimentación de 9V) a partir de una señal de potencia baja (la señal PWM del Arduino).

Esquemático

A continuación podemos ver cómo quedaría el circuito resultante:

Controlamos un motor con la señal PWM del Arduino y un transistor NPN.
Conectamos la salida PWM a la base el transistor.
💡
¡No olvides conectar la tierra del Arduino con la tierra de la batería!

Vemos que el transistor está conectado a la batería de 9V en su colector y al motor en su emisor. Cuando la señal de la base, controlada por nuestro Arduino, sea alta, dejará pasar corriente y alimentará el motor. Fíjate en que he añadido un diodo de protección. Es buena idea para proteger el resto del circuito de cargas inductivas que se generarán cuando el motor se encienda y apague.

¡Recuerda también consultar la hoja de datos de tus componentes para comprobar que pata es el colector, cual es el emisor y cual es la base!

En cuanto a los componentes, yo recomiendo el uso de transistores BJT NPN 2n2222, de uso general, pues te serán útiles en muchos proyectos diferentes:

💡
En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables
BOJACK - Transistores de uso general 2N2222 NPN (60 V, 0,8 A, 0,5 W, 250 MHz), paquete de 200 unidades : Amazon.es: Industria, empresas y ciencia
Transistores de uso general 2N2222 NPN (60 V, 0,8 A, 0,5 W, 250 MHz), paquete de 200 unidades : Amazon.es: Industria, empresas y ciencia
2n2222

Sin embargo, también puedes encontrar surtidos muy interesantes de transistores para diferentes fines en Amazon:

BOJACK 10 valores, 250 piezas A1015 BC327 BC337 C1815 S8050 S8550 2N2222 2N2907 2N3904 2N3906 PNP NPN Power - Transistores de uso general : Amazon.es: Industria, empresas y ciencia
BOJACK 10 valores, 250 piezas A1015 BC327 BC337 C1815 S8050 S8550 2N2222 2N2907 2N3904 2N3906 PNP NPN Power - Transistores de uso general : Amazon.es: Industria, empresas y ciencia
Surtido de transistores

Código

En cuanto al código, tal y como podías sospechar, se trata de un control muy sencillo, para el Arduino, es como si controlásemos el motor directamente con la señal PWM:

void setup(){
  pinMode(5, OUTPUT);
}

void loop(){
  analogWrite(5, 0);
  delay(1000); 
  analogWrite(5, 100);
  delay(1000); 
  analogWrite(5, 255);
  delay(1000); 
}
Probamos tres velocidades diferentes.

En este caso, probamos 3 velocidades diferentes, 1 segundo cada una.

Conclusiones

Espero que este pequeño artículo te haya podido ayudar y que te haya servido de introducción a los transistores. ¡Piensa que toda la electrónica moderna digital está hecha a partir de miles de estos componentes miniaturizados!

Etiquetas