bclose

Un pequeño robot con tracción 4×4

Controlando varios motores simultaneamente

Objetivos

 

 
    • Seguimos jugando con los motores de corriente continua.
    • Presentar los Motor Shield V1 de Adafruit.
    • Vemos cómo manejarlos con la librería adecuada.
    • Montar un pequeño robot con tracción 4×4.

 

Material requerido.

 

  Tienda España Tienda Mexico
Imagen montado

Robot Rover 4×4

Robot Rover 4×4

Controlando varios motores de CC

 

En las sesiones previas hemos visto cómo manejar los motores de corriente continua típicos. Hemos visto cómo hacerlos girar y como modificar esta velocidad de giro, así como la forma de invertir el sentido de rotación mediante un H bridge integrado como el L293D.

¿Y qué hace un hombre normal, cuando consigue controlar un motor (y más uno que esté leyendo esto)? Pues naturalmente, probar a manejar varios motores a la vez, digamos 4, y empezar a pensar en hacer un pequeño cochecito con tracción a las 4 ruedas  y control remoto inalámbrico y…. ¡Quieto parado!

Vayamos por partes. De  momento solo hemos gobernado un motor, aunque sabemos que el L293D dispone de capacidad para manejar un segundo motor. Podríamos diseñar un circuito con dos L293D para mover 4 motores y quizás hacer un Shield para montar todo en la chepa de nuestro Arduino.

Pero como siempre os digo, si existe una necesidad en este mundo electrónico, siempre hay alguien presto a vendernos la solución de forma conveniente. Y como podréis imaginar, ni somos los primeros que hemos tenido esta idea (Ni seremos los últimos) ni es precisamente una novedad la solución, el mercado nos ofrece toda una variedad de Shields para controlar motores muy interesantes, dependiendo del tamaño de los motores, su consumo, la tensión y cualquier otra cosa que podáis imaginaros.

Como en esta humilde casa pensamos que para aprender hay que trastear y preferiblemente por poca pasta, vamos a presentar un sencillo Motor Shield que fue diseñado por nuestros amigos de Adafruit y luego abandonado en favor de un controlador de motores más avanzado (y caro) y cuyo relevo ha sido tomado por la nube de fabricantes chinos, proporcionándonos un Arduino motor shield V1.0, por muy poco dinero, que nos permite iniciarnos gastando lo justo.

Veamos sus características.

 

 

Adafruit Motor Shield V1.0

 

Aquí tenéis una foto del Motor Shield V1.0, que podéis encontrar fácilmente en cualquier proveedor:

Adafruit V1

Las características principales son:

 
  • 4 H Bridges incluidos con dos L293D chips.
  • Hasta 4 motores CC con control bidireccional y selección de velocidad de 8 bits.
  • Máxima corriente de 0,6 Amperios (Aunque acepta picos de hasta 1,2) con una protección de sobre temperatura.
  • Acepta motores cuya alimentación va desde 4,5 a 25V.
  • Podemos añadir otros dos motores Servos o paso a paso.
  • Dispone de alimentación de motores, separada de la del Shield para evitar ruido e interferencias.
  • Bajo precio (En serio).
  • Compatible con UNOs y Megas por lo menos.
  • Dispone de una librería cómoda para manejar los motores.
 

En resumen, es un Shield barato y práctico para manejar pequeños motores de 5V, pero que se quedará corto si necesitas una cierta potencia en los motores, ya que la intensidad que estos demandaran superará con facilidad los 0,6A que tiene como límite este Shield.

Es ideal para construir robots autónomos con pequeños motores y sin peso y sobre todo como elemento de aprendizaje antes de invertir una pasta gansa en otras opciones mas sofisticadas.

 

Conectando el Motor Shield

 

El shield conecta directamente los H Bridges L293D a los pines PWM de Arduino y además incorpora un viejo conocido nuestro el 74HC595, un Shift Register,  para ahorrar pines en la conexión.

El Shield se reserva los pines 3,4,5,6,7,8,9,10,11,12, los pines 9 y 10 se usan para los servos en caso de que los incluyamos y quedan libres los pines 2 y 13, así como el 0 y 1 que se usan para la comunicación USB con nuestro PC.

Los pines A0 a A5 están disponibles para nuestro uso y recordar que a una mala, podemos usarlos como pines digitales también.

Esquema de conexion

Hay conexiones para los bornes de 4 motores, marcados como M1, M2, M3 y M4 y conviene que al conectar sigas el mismo criterio en los bornes y en el Shield porque de lo contrario conseguirás que alguno de los motores gire al revés de lo que pretendes. Lo que no es muy grave porque se arregla con facilidad.

Una cosa interesante de este shield es que nos permite separar la alimentación de los motores de la alimentación de Arduino y es de agradecer porque los motores generan mucha interferencia electromagnética que puede hacer que nuestro Arduino Mega se comporte de forma errática.

Por eso siempre que sea posible conviene que separéis la alimentación de uno y otro (Aunque en un robot autónomo va  a ser difícil). Para ello basta con que quites el “power jumper” y la alimentación estará separada. Esto será imprescindible si tus motores son de digamos 9 0 12V porque tu Arduino solo funciona con 5V (So pena de hacer barbacoa de Arduino).

Vamos a conectar un primer motor al Shield para probar. Lo primero montad el Shield a vuestro Arduino. Yo os recomiendo un MEGA para que podamos seguir haciendo cosas en el futuro, pero también vale cualquier otro.

Conectad los bornes del motor a los tornillos A y B del Motor Shield, dejando libre el pin central marcado como GND.

 
  • No es importante que borne a que pin, porque lo único que ocurrirá si lo invertís es que el motor girará al revés. Lo que sí es recomendable es que mantengáis el mismo criterio para todos los motores, porque os ahorrará dolores de cabeza.
  • Como en este primer ejemplo vamos a alimentar el motor desde Arduino y el USB, no olvidéis conectar el power jumper, para que alimentemos los motores directamente desde Arduino.
 

Seria sencillo manejar el motor a través del Shield directamente, recurriendo a los pines de control, y os lo propongo como ejercicio si os parece, pero aquí vamos a descargar ahora una librería de Adafruit para manejar el Shield directamente, que nos permitirá abstraernos del detalle de pines.

La librería que necesitamos es esta adafruit-Adafruit-Motor-Shield-library-8119eec, y para instalarla seguimos el procedimiento habitual.

Para usarla, lo primero que tenemos que hacer es este par de instrucciones:

#include <AFMotor.h>
AF_DCMotor Motor1(1);

La primera línea, incluye la librería de AdaFruit en nuestro programa, y la segunda crea una instancia de un motor conectado a la puerta M1, y le iniciamos con el parámetro que le pasamos que puede ir del 1, M1 al 4, M4.

Para establecer la velocidad del motor hacemos:

Motor1.setSpeed(200);    // Definimos la velocidad de  Motor1
Motor1.run(RELEASE);

La primera línea pone el motor a 200 / 255 del tope de revoluciones, y la segunda línea indica que queremos dejar el motor en punto muerto.

Si queremos que el motor avance usamos:

Motor1.run(FORDWARD);

Y para que retroceda hacemos

Motor1.run(BACKWARD);

Y eso es todo lo necesario para controlar un motor. Si queremos hacer un primer programa sencillo que haga avanzar el motor unos segundos y después retroceda, podemos escribir un programa similar a este

Contenido solo disponible para suscriptores. ¡Accede al contenido!

                        

#include <AFMotor.h>
AF_DCMotor Motor1(1);

void setup()
   {        Motor1.run(RELEASE);     }

void loop()
   {   Motor1.run(FORWARD); 
       delay (2000);

       Motor1.setSpeed(180);
       Motor1.run(BACKWARD);
       delay (2000);
   }

Aquí os pongo un mini video con el resultado:

 

 

Moviendo varios motores simultáneamente

 

Vamos a conectar ahora, 4 motores a nuestro Motor Shield. Yo tengo por aquí rodando un bastidor con 4 ruedas y motores que voy a usar como base para hace un robot con tracción a las 4 ruedas.

Pero lo mismo da cualquier otro robot que tengáis, o hasta un bastidor con las ruedas, a condición de que podamos subirle nuestro Arduino mas el motor Shield. Una caja de cartón duro a la que sujetéis los motores y ruedas, sirve de maravilla.

En mi caso lo he puesto en un pedestal, para poder probar los diferentes motores sin que se me escape corriendo. Vamos con el programa de prueba. Lo primero es incluir la librería y definir las instancias de los motores que esta ocasión son 4 en vez de 1:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

                        

Como veis no es diferente de mover un solo motor, solo mas pesado. Aquí tenéis el programa Prog_92_2.

Es conveniente que comprobéis en vuestro montaje que todas las ruedas giran en la misma dirección y que no hay ninguna rotando al revés, porque cuando queramos avanzar seria un problema.

Aquí os dejo un pequeño video con el trest de giro

Con esto, confío en que con esto hayamos dejado listo el hardware de nuestro robot para empezar a programarlo en serio. Pero parece mas conveniente cortar aqui esta sesión y dejar algo para la próxima sesión, en la que veremos como mover el robot y hacerlo girar además de variar la velocidad de crucero.

 

Detalle del uso de pines 

Una consulta de un lector suscitó la cuestión de que pines se usaban para que en este Motor Shield V1 y como era una cuestión de lo mas razonable que no estaba cubierta previamente,hemos optado por añadir este pequeño anexo especificando los pines que usa cada motor y cuales están disponibles en caso contrario.

Arduino Función
Pin 1 Disponible
Pin 2 Disponible
Pin D3 DC Motor #2 / Stepper #1
Pin D4 Reservado para gobernar el Shift Register 74HC595
Pin D5 DC Motor #3 / Stepper #2
Pin D6 DC Motor #4 / Stepper #2
Pin D7 Reservado para gobernar el Shift Register 74HC595
Pin D8 Reservado para gobernar el Shift Register 74HC595
Pin D9 Servo #1, Disponible si no se usa el servo
Pin D10 Servo #2, Disponible si no se usa el servo
Pin D11 DC Motor #1 / Stepper #1
Pin D12 Reservado para gobernar el Shift Register 74HC595
Pin D13 Disponible
A0,A1,A2,A3,A4,A5 Disponibles. Recuerda que pueden usarse como digitales

Tened presente que no hay ningun pin de Arduino conectado a los motores directamente. La gestión de los motores se realiza a traves del shift register para ahorra pines y por eso tenéis necesariamente que usar la libreria para manejarlos.

 

Resumen de la sesión

 

 
    • Hemos presentado el Motor Shield V1 de Adafruit, que un Shield muy barato además de útil para mover pequeños motores y como nuestra primera controladora.
    • Vimos sus características y limitación pero siempre es mas comodo un Shield que hacerse un invento.
    • Instalamos la librería de control de motores y empezamos con las nociones básicas de programación de los motores.
    • Dejamos el Motor Shield conectado a un pequeño robot de 4 ruedas y prbamos que todo funcionaba como se esperaba, dejando listo el hardware para que podamos empezar a programar el movimiento del robot.

 
 
 

 

Siguiente

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(174) Comments

  • Avatar for Charly

    Admin, el pin 0 (rx), es un pin disponible ?

  • Avatar for Charly
    • Ivan Uriarte

    Hila Nahuel, estás usando estos mismos motores? con 8 pilas debería ser más que suficiente.

  • Avatar for Charly

    no me funciona el giro y estoy alimentando el motor shield con 8 pilas! se queda trabado cuando lo apoyo en el piso no gira sobre su mismo eje…y se desconecta del módulo bluetooth

  • Avatar for Charly
    • Ivan

    Hola Juan, tiene toda la pinta de ser un problema en la alimentación. Prueba a bajar un poco la velocidad de giro a ver si te giran así, y si puedes prueba a alimentarlo por el jack con una fuente más potente o a alimentar el shield y el arduino por separado. Un saludo.

  • Avatar for Charly

    Hola!

    Estoy intentando controlar dos motores con el Motor Shield V1 pero estoy teniendo problemas.

    En una primera prueba conseguí que funcionara un motor hacia delante y hacia atrás. Luego probé a controlar dos motores al mismo tiempo y no se mueven, solo se oye un pitido. Ahora aunque intente controlar solo un motor, ya no gira y se oye el pitido.
    Mi suposición es que será un problema de alimentación insuficiente. Sin embargo, alimento la placa y los motores con el USB del Arduino igual que haces tú, y no pareces tener ese problema. También he probado cambiando cables y conexiones y nada.

    Los motores son los amarillos pequeños típicos, que venían en el kit para hacer el coche, no se nada más sobre ellos.

    He pensado probar a alimentar el Arduino por el jack con pilas, que se supone que alimenta con más voltaje, a ver si es ese el problema. Pero me gustaría saber si tienes alguna idea de por qué los motores no giran y se oye un pitido, por si no es cosa de la alimentación.

    Agradezco cualquier ayuda o consejo. Un saludo.

  • Avatar for Charly
    • Admin

    Buenos dias Miguel Angel,

    Estamos preparando una sesion con el robot y un seguidor de lineas que esperamos publicar en breve

  • Avatar for Charly

    Disculpe mepuede ayudar con el codigo para carro seguidor de linea con el motor driver y dos Tcrt5000

  • Avatar for Charly
    • Jesús Sánchez

    El módulo L298 que se vende por ahí soporta 4A, o sea, 2A por canal. Ya tienen que ser muy grandes y potentes los motores para necesitar más corriente. Con este módulo emparejas los dos motores de cada lado y por lo tanto giran solidarios. Pero eso no impide hacer giros completos. Al contrario. Piensa en un vehículo oruga, que gira sobre sí mismo sin problemas. Pues igual.
    No he trabajado con otras shields de motores, pero deben soportar la demanda de los tuyos con carga.

    Saludos.

  • Avatar for Charly
    • Alfonso Fernandez

    Muchisimas gracias por tu ayuda Jesús.

    Una última duda al respecto. Estoy valorando comprar una shield con el L298 integrado (ya sea la motoshield o la propia de arduino), aunque al tener solamente dos salidas (y querer controlar cuatro motores), me pregunto si seria mejor comprar dos modulos separados sin shield para poder manejarlos, o si con una shield de dos canales y los motores conectados entre si de par en par bastaría. En este ultimo caso, la intensidad maxima para cada motor seria de 1A, por lo que no se si seria mejor decantarme por la motor shield v2 de adafruit (con cuatro canales y 1.2A de limite por canal).

    Muchas gracias de nuevo.

  • Avatar for Charly
    • Jesús Sánchez

    0.6 es lo que soporta cada integrado L293D, ya le conectes y motor o cuatro. Si cada motor tuyo consume 470mA, olvídate del L293D.
    El consumo de los motores es relativo. Un motor pequeño puede demandar sin carga 50mA, pero al forzarlo dispararse a 200mA. Yo tengo uno reciclado que en vacío demanda 600mA y con tan solo frenar su giro con la mano se dispara hasta los 2A.

    Si cada motor tuyo tiene esa demanda, la batería debe ser bastante potente. Puedes optar por usar una Li-Po de 11V y usar un módulo DC-DC Buck para reducir el voltaje hasta 6V. En la conversión ganas corriente. El Buck debe soportar la corriente de los motores con carga. Los hay de 2A para arriba.

    Saludos.

  • Avatar for Charly
    • Alfonso Fernandez

    Muchas gracias Jesus.

    Me surge una duda al respecto, el limite de la shield de este tutorial de 0,6A es por motor? O es por el total de los motores conectados?

    Mis motores, segun la documentacion, pueden tener un consumo de hasta 470mA. Crees que con la motorshield v1 deberia ser suficiente? O tiene sentido que no funcione correctamente?

  • Avatar for Charly
    • Jesús Sánchez

    Hola Alfonso.

    Con el L298 vas sobrado, pues maneja hasta 4A. Los módulos con este driver suelen traer además una salida de 5V, a la que puedes conectar a Arduino. Lo alimentas con 7V y listo.

    Saludos.

  • Avatar for Charly
    • Alfonso Fernandez

    Hola de nuevo admin,

    Sigo avanzando en el aprendizaje…mirando en las especificaciones de los motores veo que son motores de 6v con un consumo a plena carga de 300 mA cada uno, lo que supone un total de 1,2A para los cuatro motores…supongo que no sera suficiente con este shield verdad? Que otras opciones me recomiendas? El L298 seria una opcion?

    Muchas gracias

  • Avatar for Charly
    • Alfonso Fernandez

    Muchas gracias admin.

    He probado a alimentar la shield con 6 pilas nuevas mientras que la placa sigue conectada al usb y los motores se comportan erraticamente.

    Puede que necesite mas de 9v para alimentar los motores?
    Y siguiendo con tu observacion, el problema al alimentar directamente al jack (y la posible bajada a 5v), no afectaria tambien a tu montaje? O las 6 pilas que conectas a la placa lo haces de otra manera?

    Muchisimas gracias de nuevo, tu ayuda es muy importante para mi.

  • Avatar for Charly
    • Admin

    Hola Alfonso,

    No estoy seguro de que motres usas, pero el problema podria ser que stas enchufando al jack barrilete de arduino las pilas y entonces el rectificador de entrada te baja a 5V la alimentacion. Seria interesante de que hicieras la prueba de conectar la salida de las 6 pilas de 1.5 en total 9V directamente a la alimentacion de los otores mientras que alimentas el arduino con USB

    Si ahora los motores se mueven correctamente quedaria probado que ra un problema de alimentacion, pero no obstante, en los ejemplos que ves en la web yo alimento arduino y los motores amarillos con un paquete nueveo de 6 pilas en conjunto sin separacion. Las pilas no duran mucho pero suficiente para comprobar que todo se comporta como es debido

  • Avatar for Charly
    • Alfonso Fernandez

    Hola de nuevo admin,

    He tenido algun progreso. Cuando alimento la placa por usb y coloco el power jumper los cuatro motores se mueven en una direccion, paran, y se mueven en la otra. Eso si, a una velocidad muy muy lenta.

    He probado a quitar la alimentacion usb y conectar 6 pilas por el jack a la placa y vuelve a comportarse de manera inestable.

    Los motores supuestamente son de 6v, aunque visto lo visto, ¿puede que tanto la alimentacion de 9v al shield (sin el jumper) como al jack de la tarjeta (con el jack) sean insuficientes? En este caso, mis motores consumirian mas que los del tutorial verdad? Aunque visualmente sean iguales.

    En caso de ser asi, seria mas recomendable conectar mas de 9v al jack de la tarjeta o busco una bateria para conectar al shield sin el jumper?

    Muchas gracias de nuevo! Creo que con esta ultima ayuda tuya sere capaz de seguir!

  • Avatar for Charly
    • Admin

    No estoy seguro de que te puedo decir Alonso, porque el tema no tiene mucho misterio y parece mas un problema de alimentacion tipico, pero me dices que va correctamente hacia delante. Asegurate de tener quitado el jumper del motor shield paras eparar la alimentacion de placa y motores y de que reemplazas las pilas para estar seguro de que stan bien de carga

  • Avatar for Charly
    • Alfonso Fernandez

    Hola Admin,

    Muchas gracias por tu trabajo en esta web, es de mucha ayuda para todos nosotros.

    Estoy teniendo problemas con el montaje de este tutorial. Cuando intento mover un solo motor, si subo el siguiente codigo a la placa funciona perfectamente, moviendo de manera continua el motor hacia delante:

    #include
    AF_DCMotor Motor1(1);

    void setup()
    { Motor1.run(RELEASE); }

    void loop()
    {
    Motor1.setSpeed(180);
    Motor1.run(FORWARD); }

    El problema lo tengo cuando introduzco una linea con delay de algunos segundos para poder cambiar el sentido o el ritmo de giro (la coloco despues de la instruccion de forward, no incluyendo nada mas). El motor solamente hace un amago de arrancar, y en el momento de entrar en el delay se para. Adicionalmente, en ocasiones se comporta de manera inestable. La placa esta alimentada por usb y el shield con 6 pilas de 1.5v.

    Te agradecería muchísimo si me pudieras ayudar con esto. Supongo que sera algo sencillo que se me escapa, pero me encantaria hacerlo funcionar y poder seguir con tus tutoriales.

    Muchas gracias Admin

  • Avatar for Charly
    • Admin

    Lo tienes aqui Darius https://www.prometec.net/control-rover-4×4-bluetooth/

  • Avatar for Charly

    Admin me puede dar el sketch de su proyecto con bluetooth y sensor 1 ultrasonico porfavor ,es que lo necesitó para un proyecto del colegio

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login