Autor: Agustin Gonzalez Redondo. M Rocío García de la Fuente.
Tal y como hemos visto, en el anterior artículo sobre Arduino, es muy sencillo trabajar con dispositivos de entrada como sensores de ultrasonidos; de la misma forma, esta plataforma también es capaz de trabajar con dispositivos de salida como motores eléctricos fácilmente.
Los motores eléctricos son actuadores continuos que convierten la energía eléctrica en energía mecánica. El motor de corriente continua logra esto mediante la producción de una rotación angular continua que se puede utilizar para rotar bombas, ventiladores, compresores, ruedas, etc.
Existen varios tipos de motores eléctricos susceptibles de ser controlados utilizando para ello una tarjeta Arduino, sin embargo, nos centraremos en los más sencillos, los motores de corriente continua (figura 1 Motores DC).
Este tipo de motor produce un campo magnético en un rotor cuando pasa una corriente eléctrica a través de un conjunto de conmutador y escobilla de carbono. Generalmente los motores de corriente continua son el tipo de motor más común a la hora de trabajar con Arduino puesto que son baratos, pequeños y fáciles de controlar. Algunas consideraciones que se deben tener en cuenta son:
- Los motores de corriente continua normalmente tienen sólo dos polos, uno positivo y otro negativo. Si se conectan estos dos cables directamente a una batería el motor girará. Si se cambian los cables, el motor girará en la dirección opuesta.
- La velocidad de giro del motor depende directamente de la tensión aplicada entre los dos polos.
A la hora de controlar estos dispositivos con Arduino existen dos posibilidades
- En el caso de motores muy pequeños, con una reducción muy alta como, los motores de corriente continua N20 de 30rpm o similar, cuyo consumo es muy bajo, no superior a 40mA, no es necesario un elemento intermedio para realizar el control del motor y la conexión se realiza conectando ambos terminales directamente a la placa de Arduino, seleccionando salidas de tipo PWM, pines 6 y 5 por ejemplo, si lo que se desea es también controlar la velocidad de giro del motor, como en el caso que nos ocupa (figuras 5 y 6).
A continuación, mediante un sencillo código se puede hacer girar el motor alternativamente hacia un lado y otro, modificando el valor de la velocidad de entrada. Tal y como se presenta en el siguiente código para la IDE Arduino.
//CONTROL DE UN MOTOR DE CORRIENTE CONTINUA DIRECTAMENTE CON ARDUINO
int motorPin1 = 5; // cable 1 conectado al pin 5 (con salida PWM)
int motorPin2 = 6; // cable 2 conectado al pin 6 (con salida PWM)
int velocidad=150; //velocidad predefinida de giro entre 0 y 255
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
}
void loop()
{
//GIRA EL MOTOR HACIA LA DERECHA A UNA VELOCIDAD DEFINIDA PREVIAMENTE durante 1 seg
analogWrite(motorPin1, velocidad);
digitalWrite(motorPin2, LOW);
delay(1000);
digitalWrite(motorPin1, LOW);
delay(1000);
//GIRA EL MOTOR HACIA LA IZQUIERDA A UNA VELOCIDAD DEFINIDA PREVIAMENTE durante 1 seg
analogWrite(motorPin1, LOW);
digitalWrite(motorPin2, velocidad);
delay(1000);
digitalWrite(motorPin1, LOW);
delay(1000);
}
- Sin embargo, para la mayoría de las aplicaciones la placa de Arduino no es capaz de suministrar la corriente necesaria, limitada a 40 mA, y se debe insertar un elemento intermedio entre el motor y la controladora, en este caso un puente H. Se trata de dispositivos ampliamente usados en robótica como convertidores de potencia y que además permiten realizar cambios en el sentido de giro de los motores (figura 5).
Los puentes H están disponibles de forma comercial como circuitos integrados, hay diversos tipos:
- L293d (figura 6): circuito integrado, propiamente dicho, para trabajar con pequeños motores, tiene las siguientes características:
- Se pueden controlar hasta 2 motores.
- Proporciona una corriente máxima de 1A a los dos los motores.
- L298n (figura 7): formado por 2 puentes H, este dispositivo tiene las siguientes características:
- Permite controlar hasta 2 motores.
- La corriente máxima teórica de 2 Amperios a cada motor, aunque en la práctica es difícil superar 1 Amperio en cada fase sin sufrir calentamiento.
- TB6612FNG (figura 8): formado, como el anterior, por dos puentes H, sus características son:
- Permite controlar dos motores.
- La corriente máxima por fase es de 1,2 Amperios a cada motor.
Para ilustrar el funcionamiento de un motor con su controlador se ha elegido el modelo TB6612FNG, si bien el sistema de conexiones y el código para cualquiera de los otros dos tipos de puentes H es similar.
Su montaje no es demasiado complicado y se detalla a continuación en el siguiente esquema realizado con Fritzing.
Finalmente, para el accionamiento de los motores, se deben tener en cuenta las siguientes consideraciones:
- El rango de alimentación está entre 2,7V y 5,5 V.
- Standby: debe estar alimentado (5V), para que los motores funcionen. Si se conecta a un pin de Arduino se puede controlar así su funcionamiento.
- AIN2 y AIN1 definen el sentido de giro del motor conectado a la fase A, su puesta en marcha y parada. Análogamente ocurriría con BIN2 y BIN1 para los motores conectados a la fase B.
- PWMA, PWMB: permiten controlar la velocidad de giro, entre 0 y 255, de cada una de las fases.
Teniendo todo esto en cuenta, el siguiente código permite controlar un motor de corriente continua, para que se encienda, se detenga y se ponga en marcha en sentido contrario de forma alterna.
//CONTROL DE UN MOTOR CONETADO A UNA CONTROLADORA TB6612FNG
//motor A conectado a A01, A02 y PWMA
int STBY = 10; // pin de standby
//para el motor A
int PWMA = 3; // control de velocidad
int AIN1 = 9; // control de dirección
int AIN2 = 8; // control de dirección
int velocidad=150; //velocidad de giro del motor, entre 0 y 255
void setup(){
pinMode(STBY, OUTPUT); // definimos esos pines como salidas
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
}
void loop(){
digitalWrite(STBY, HIGH); //alimenta STBY para hacer funcionar los motores
digitalWrite(AIN1, LOW); //mueve el motor hacia la derecha durante un segundo
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, velocidad);
delay(1000);
digitalWrite(AIN1, HIGH); //mueve el motor hacia la izquierda durante un segundo
digitalWrite(AIN2, LOW);
analogWrite(PWMA, velocidad);
delay(1000);
digitalWrite(STBY, LOW); //detiene los motores, deja sin alimentación a STBY
delay(1000);
}
Una vez visto este programa sencillo, para finalizar, se propone realizar el control de un dispositivo con dos motores, que, por ejemplo, pudiera mover un vehículo de forma automática, e incluso que pudiera interaccionar con su entorno empleando dispositivos de entrada como un sensor de ultrasonido.
AUTORES: M. ROCÍO GARCÍA DE LA FUENTE Y AGUSTÍN GONZÁLEZ REDONDO