Front & Back

Blog sobre el Desarrollo de aplicaciones web

Laboratorio Control de motores con Arduino

Las “shields” son placas preparadas para adaptarse a nuestro Arduino. Se instalan simplemente encajándola sobre el mismo, y extienden su funcionalidad sin quebraderos de cabeza. En este artículo voy a utilizar la placa “Motor Shield”, una extensión que nos permite el control de dos canales diferenciados para el uso de motores, pudiendo manipular su velocidad, dirección y activación. Antes de comenzar, convendría que echásemos un vistazo a la placa.

Un vistazo a “Shield 2-Channel DC Motor Control” de Arduino

En primer lugar nos encontramos con un dispositivo que necesita de un voltaje auxiliar para la activación de los motores; simplemente con la potencia suministrada por Arduino, apenas podríamos moverlos. Según las especificaciones, el voltaje operativo ha de estar comprendido entre los 5V hasta los 12V (como máximo). Obviamente a mayor tensión, más velocidad alcanzarán nuestros motores.


Montaje Motor Shield Arduino

Como ya hemos dicho, la shield cuenta con dos canales de control (A y B) cada uno de los cuales tiene tres pines digitales y uno analógico. Dos de las entradas digitales de cada canal son las encargadas de controlar por un lado la dirección (0 = hacia delante, 1 = hacia atrás) y por el otro la activación (0 = apagado, 1 = en funcionamiento). El pin analógico de cada canal, regula en función de una tensión variable, el voltaje que se servirá al canal, y por tanto la velocidad de giro de los motores. Ésta también puede ser regulada a través de otro pin digital (PWD), controlando el número de pulsos digitales y su relación en el tiempo, aunque esto lo dejamos para otro momento. Por lo pronto nos basaremos en la tabla siguiente:

FunciónPines canal APines canal B
DirecciónDigital 12Digital 13
ActivaciónDigital 9Digital 8
VelocidadAnalógico 0Analógico 1

Hemos de tener en cuenta que cada uno de los canales nos proporcionará una intensidad máxima de 2A.

Si necesitas más información puedes consultar las especificaciones en la web de Arduino

La mejor forma de empezar a trastear con la placa es buscarnos un pequeño proyecto, en este caso vamos a utilizar un chasis con cuatro motores para adaptar nuestro tándem Arduino+MotorShield y hacer que se mueva en función de unas órdenes programadas.


Chasis 4x4

La batería

Tal como vemos en la imagen, el chasis viene equipado con cuatro motores, y un portapilas para 5 pilas AA. Vamos por partes:

Por un lado, cada pila AA tiene una tensión de 1,5V y una carga que oscila entre los 1100 y 2000 mAh (Miliamperios hora) según la pila que utilicemos. El portapilas del chasis, conecta cada pila con la anterior en serie, y al hacerlo obtiene una tensión total de 7,5V manteniendo para todo el conjunto la carga equivalente a la de una sola batería. Si las colocásemos en paralelo, ocurriría lo contrario; la carga se sumaría y se mantendría el voltaje.

Por otro lado, cada uno de los motores tienen una potencia aproximada de 2,25W si tenemos en cuenta que:
I=WVObtendremos que la intensidad de cada motor es de 0,3A (2,25/7,5); un total de 1,2A. Si utilizásemos por ejemplo pilas de 1,1Ah (1100mAh) podríamos estimar que nuestro coche funcionaría durante algo menos de una hora antes de que la batería quedase sin carga.

Montaje del chasis 4x4

En este punto voy a dar una visión bastante somera; existen en internet multitud de artículos que te guiarán paso a paso si necesitas más ayuda. Te recomiendo por ejemplo el artículo Tutorial: Robot 4x4 con Arduino, que ilustra con imágenes cada uno de los pasos.

Como hemos dicho en la primera parte del artículo, el controlador que vamos a utilizar sólo tiene capacidad para manejar dos canales, por lo que tendremos que agrupar los motores para que funcionen en dos grupos conectados en paralelo. El esquema sería el siguiente:


Esquema de instalación Motor Shield de Arduino

Tendremos en cuenta que cada grupo de dos motores está situado en el chasis de forma opuesta, por lo que deberemos cruzar los cables para que ambos giren en el mismo sentido. Conectaremos cada grupo a las salidas A y B de nuestra placa y cerraremos el circuito con el interruptor de nuestro chasis.

El código de Arduino

La programación resulta bastante sencilla si de lo que se trata es de programar un recorrido. Comento a continuación el código:

/*Definimos los pines encargados del manejo de cada canal*/

//(A) Motor----------

int AMotorDirectionPin = 12;
int AMotorDeactivationPin = 9;
int AMotorSpeedPin = 3; //Pin analógico

//(B) Motor----------

int BMotorDirectionPin = 13;
int BMotorDeactivationPin = 8;
int BMotorSpeedPin = 11; //Pin analógico

void setup()
{

//Inicializamos los pines en modo “salida”

pinMode(AMotorDirectionPin, OUTPUT);
pinMode(AMotorDeactivationPin, OUTPUT);
pinMode(AMotorSpeedPin, OUTPUT);

pinMode(BMotorDirectionPin, OUTPUT);
pinMode(BMotorDeactivationPin, OUTPUT);
pinMode(BMotorSpeedPin, OUTPUT);

}

void loop()
{

digitalWrite(AMotorDirectionPin, HIGH); //Los motores del canal A girarán hacia delante
digitalWrite(AMotorDeactivationPin, LOW); //Estarán activados
analogWrite(AMotorSpeedPin, 255); //Girarán a máxima velocidad

//Los parámetros para el canal B serán similares
digitalWrite(BMotorDirectionPin, HIGH);
digitalWrite(BMotorDeactivationPin, LOW);
analogWrite(BMotorSpeedPin, 255);

//Con todo lo anterior, el vehículo avanzará
delay(3000); //Durante 3 segundos

digitalWrite(AMotorDirectionPin, LOW); //Los motores del canal A ahora girarán en sentido contrario
digitalWrite(AMotorDeactivationPin, LOW);
analogWrite(AMotorSpeedPin, 255);

//Con todo lo anterior el vehículo girará sobre sí mismo
delay(2000); //Durante 2 segundos. Transcurrido este tiempo volverá a avanzar

}