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

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

     

    Imagen montado

    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

    #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:

    AF_DCMotor Motor1(1);
    AF_DCMotor Motor2(2);
    AF_DCMotor Motor3(3);
    AF_DCMotor Motor4(4);
    Definimos la velociodad de los 4 motores en el setup:

    void setup()
       {     Serial.begin(9600);           // set up Serial library at 9600 bps
             Motor1.setSpeed(255);
             Motor2.setSpeed(255);
             Motor3.setSpeed(255);
             Motor4.setSpeed(255);
       }

    Y por ultimo vamos a mandar moverse adelante y atrás y para los 4 motores simultáneamente:

    Motor1.run(RELEASE);
    Motor2.run(RELEASE);
    Motor3.run(RELEASE);
    Motor4.run(RELEASE);
    delay (1000) ;
    
    Motor1.run(FORWARD) ;
    Motor2.run(FORWARD);
    Motor3.run(FORWARD);
    Motor4.run(FORWARD);
    delay (2000);
    
    Motor1.run(BACKWARD);
    Motor2.run(BACKWARD);
    Motor3.run(BACKWARD);
    Motor4.run(BACKWARD);
    delay (2000);

    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.
  •   

    Deja una respuesta