Seleccionar página

En los montajes que hacemos de robótica es muy habitual que tengamos que usar motores. Como sabemos, arduino es un microcontrolador electrónicamente muy potente por su flexibilidad.

No obstante, la corriente (o lo que es equivalente, la potencia) que puede suministrar a sensores y actuadores está limitada. En concreto, cada pin de salida de la placa puede entregar un máximo de 40mA, que no es suficiente para mover motores eléctricos.

Por otra parte, la salida de 5V de la placa puede entregar teóricamente hasta 500 mA, cuando se alimenta con un USB y más (hasta 1 A). No obstante, no es recomendable ya que puede destruirse la placa.

Vamos a utilizar la salida de 5V de la placa para alimentar al motor y una salida para controlarlo. Es decir, vamos a aprender a controlar un motor DC con un transistor. DC quiere decir direct current, corriente directa en inglés.

Necesitaremos los siguientes materiales:

  • Transistor BC548B (patas C (colector, izda) B(base, medio) E(emisor, derecha), observando la cara plana)
  • resistencia de 330 ohm
  • placa compatible arduino UNO
  • diversos cables de conexión (jumper wire)
  • cables de cocodrilo
  • multímetro (interesante para las medidas)
  • portapilas (de 4xAA, 1x 6LR61 9V, o cualquier otro conjunto de entre 6 y 9V)
  • motor DC 5V
  • diodo de protección del motor (1N4001 por ejemplo)

Controlar un motor DC con un transistor y sin alimentación externa

Vamos a controlar un motor de corriente continua no demasiado potente, con la placa de arduino y alimentando al motor desde la placa. Esto simplifica nuestro montaje. Ahora bien, ¿cómo puedo controlarlo si las salidas de arduino están limitadas a 40 mA?

No hay más que alimentarlo desde la salida de 5V y controlarlo con un pin de salida. Para hacer esto necesitamos un transistor, en concreto utilizaremos el transistor BC548B.

Cuando la intensidad que requiere un motor excede a la que la placa puede entregar, debe recurrirse a una fuente de alimentación externa. Esta es la situación más habitual en robótica y en la realidad: controlar con pequeñas intensidades el uso de grandes intensidades (o grandes cargas).

Circuito de conexión de los componentes

Un motor de corriente continua (DC en inglés) se cablea al polo + y al polo – (o GND o referencia de tensión) de una pila, batería o placa de arduino.

De acuerdo con la ley de Lenz, cuando el motor para induce una tensión entre las dos bornas que puede ser perjudicial para el circuito. Por ello se pone un diodo entre las bornas del motor.

Si ponemos en serie un amperímetro podemos medir el consumo nominal del motor a 5V. Lo hemos hecho con el motor seleccionado y hemos obtenido 110-120 mA, una intensidad que la placa de arduino puede suministrar (aunque no desde sus pines de salida, como ya hemos dicho).

COmo dato adicional, pudimos comprobar que a 5V, si paramos el eje del motor, la intensidad sube a 220 mA, prácticamente el doble. Si el eje de un motor se agarrota, se va a calentar.

Aquí podemos ver el montaje necesario para controlar el motor:

controlar un motor DC con un transistor

Una vez dispuestas las conexiones del esquemático, el control del transistor, que funciona como si fuera un interruptor, se puede hacer a través de la salida o pin 6. En la foto que sigue, un detalle de la conexión del transistor con la definición de sus terminales (CBE).

Cuando ponemos 5 V en el pin que está conectado a la base del transistor, este conduce, es decir, circula intensidad entre colector y emisor, y el motor arranca.

Para probarlo, basta cargar este programa en la placa:

/* Este programa arranca y para un motor DC 
 *  en intervalos de 2 segundos. Se conecta el 
 *  pin 6 a la base de un transistor NPN
 */

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

void loop() {
  digitalWrite(6,HIGH);
  delay(2000);
  digitalWrite(6,LOW);
  delay(2000);
}

Medición de intensidades con un multímetro

Vamos a medir la intensidad que circula por el motor cambiando la tensión del pin 6 donde hemos conectado la base del transistor.

Hay que recordar que para cambiar la tensión de un pin de salida debemos simular una salida analógica, mediante la característica PWM de los pines de la placa que tienen la marca ~ (virgulilla).

No hay que modificar las conexiones porque el pin 6 permite la modulación por ancho de pulso (PWM), solo cambiamos el programa. Utilizaremos este código (serán 5 niveles de tensión):

/* Mediante este programa, convertimos el pin
 *  número 6 en una salida analógica y modificamos
 *  5 veces la tensión de salida a la base del 
 *  transistor
 */

void setup() {
  //no es preciso declarar el pin 6 como salida
}

void loop() {
  analogWrite(6,100);
  delay(5000);
  analogWrite(6,120);
  delay(5000);
  analogWrite(6,150);
  delay(5000);
  analogWrite(6,175);
  delay(5000);
  analogWrite(6,255);
  delay(5000);
}

Ahora es el momento de comprobar qué intensidad circula por el motor con las distintas tensiones de control. Para ello, incorporamos un amperímetro como se ve en el siguiente esquema (el conexionado puede variar en función del polímetro que utilices, no olvidar colocar la función amperímetro en serie con la carga, por simplificar, no añadimos el diodo -ver primer esquema- ):

controlar un motor DC con un transistor
Esquema de conexionado del amperímetro (la imagen del multímetro no es de fritzing)

Con el programa indicado y con esta conexión obtuvimos las siguientes medidas de intensidad:

PWMVoltaje (PWM/255x5V)Intensidad (mA)Efecto
1002,060Solo se mueve si está arrancado
1202,470-80Solo se mueve si está arrancado
1502,990Baja velocidad
1753,490-100Aumenta velocidad
2555,0110Velocidad nominal

Es decir, podemos controlar un motor DC con un transistor para que funcione a distintas velocidades, si bien en el caso en que la corriente sea muy baja, el motor no va a funcionar.