Adafruit Motor Shield V2 II

Objetivos

 

  • Seguimos con el Adafruit Motor Shield V2.
  • Ver como conectar un par de servos a él.
  • Mostrar un programa sencillo para mover un par de servos.
  • Mostrar como apilar Shields y como cambiar sus direcciones I2C.
  •  

    Material requerido.

     

     

    ArduinoUNO Arduino Uno o compatible y con el firmware para S4A cargado.
    Img_3_4Img_3_6 Una Protoboard más cables.
    Vista lateral  Motor shield V2
    Vista superior  Un servo MG945

     

    Esta sesión es poco más que una traducción libre del magnífico documento de Adafruit sobre este Shield y que podéis encontrar aquí, y en el que encontrareis una información mucho más extensa sobre este Shield, de lo que pretendemos en este sencillo tutorial.

     

    Motor Shield V2

     

    En la sesión previa como hablamos de cómo usar este Motor Shield V2 para controlar motores CC y Steppers o paso a paso y también comentamos porque este Shield era de lo más interesante porque aceptaba intensidades del doble de lo que aceptaba el V1.

    Esto está muy bien,  pero su gran ventaja no era tanto esto como el hecho de que permite apilar estos Shields para el caso de que necesitemos manejar más de 4 motores CC o más de 2 Steppers.

    Si. Eso significa que puedes poner un Shield V2 encima de otro y así hasta un número ridículamente grande e Shields (Como 32), lo que  permite manejar hasta 128 motores CC o 64 Steppers.

    No es fácil imaginar que proyecto puede requerir semejante número de motores, pero Adafruit ha aplicado el conocido principio de “Mas madera…” y que por nosotros no quede.

    Como cada Shield incorpora un controlador I2C basta con cambiar la dirección de cada Shield y asegurarnos de que no hay conflicto de direcciones, para tener el asunto resuelto y a otro tema.

    En esta sesión trataremos este tema de como fijar esta dirección I2C del Shield, no solo para poderlos apilar, sino también por si en algún momento queréis usar este Shield en combinación con algún otro dispositivo, con la mala fortuna de que tengáis un conflicto de direcciones.

    Veremos cómo cambiar esta configuración, y veremos también, en la próxima sesión, que hay otros Shield de Adafruit que utilizan el mismo sistema para cambiar el direccionamiento I2C.

    Pero antes y para descansar un poco, veremos cómo usar Servos con este Shield, porque lo dejamos en la última sesión para no ponerme demasiado pesado, y estaba pendiente.

     

    Motor Shield V2 y Servos

     

    Los servos son unos motores de lo más simpáticos que básicamente se diseñan, no para que giren a una determinada velocidad, sino más bien, para giren un cierto ángulo y se mantengan allí quietos.

    Imaginad un timón de un barco o los alerones de un avión. Quieres darle una señal de control y que el motor tome una posición angular sostenida que ayude a dirigir la nave.

    • También hay servos de 360º que giran de continuo y de los que hablaremos en algún momento en el futuro. .

    Ya hemos hablado en más de una ocasión de los servos y por eso no quisiera repetirme, y el objetivo de este rollo. simplemente era hacer las presentaciones y mostraros como los podemos usarlos cómodamente desde el Motor Shield V2.

    Para empezar este Shield no está pensado para muchos servos, no señor, solamente permite 2. En el futuro hablaremos de un Shield pensado para manejar un gran número de servos (Que asombrosamente recibe el creativo nombre de Adafruit Servo Shield), pero en este caso permite un par de ellos además de los motores CC y pasó a paso que ya vimos.

    El Shield V2 dispone de 2 conectores tipo servo junto a la entrada de USB:

    Motor Shield V2

    Están rotulados como Servo 1 y 2 y un poco más a la derecha podéis ver que los pines de control son el 10 y 9 respectivamente. El único problema que podéis tener con los servos es que cada fabricante pinta los cables de color que se le pone y no es fácil a veces saber cuál es cual.

    Los servos tienen siempre tres hilos: GND, Vcc y señal. Si la cosa fuera tan fácil que los fabricantes se pusieran de acuerdo y pusieran el Vcc en rojo (Esto prácticamente se cumple siempre) y el GND en negro (Normalmente es así) el otro seria la señal y no habría confusión posible.

    Pero como sois gente despierta, ya sospecháis que esto sería demasiado fácil y no van a desaprovechar una ocasión de ser unos capullos. ¡¡Faltaría más!!

    Por eso parece un buen momento para pintar aquí una tablita con el código de colores que suelen emplear, dependiendo del fabricante:

    Codigo colores servos

    Por ejemplo los servos que yo voy a usar en este tuto son tan simpáticos que son Marrón, Rojo y Amarillo (Es por subir el nivel). Por lo demás es bastante fácil conectar los servos:

    Ejemplo de muestra

    Y para manejarlos podéis usar el programa de siempre porque los servos no tienen problemas.

     

    Controlando los servos

     

    Los servos se controlan muy fácil con un programa como este:

    #include <Servo.h>        // Incluir la librería Servo
    
    Servo servo1;             // Crear un objeto tipo Servo llamado servo1
    Servo servo2;
    
    void setup()
    
       { servo1.attach(9) ;  // Conectar servo1 al pin 9
         servo2.attach(10);
       }
    
    void loop()
       { servo1.write(0);
         servo2.write(120);
         delay(400);
    
         servo1.write(30);
         servo2.write(90);
         delay(400);
    
         servo1.write(60);
         servo2.write(600);
         delay(400);
    
         servo1.write(90);
         servo2.write(30);
         delay(400);
    
         servo1.write(120);
         servo2.write(0);
         delay(400);
      }

    Incluimos la Liberia Servo y creamos dos objetos del tipo servo1 y servo2, y después simplemente escribimos el ángulo que queremos que gire.

    Para darle algo de gracia vamos a mover dos servos diferentes al revés y que el video quede un poco más vistoso (Y porque si no, me aburro). Aquí tenéis un mini video con el resultado:

     

    Alimentando los servos

     

    Según viene de fábrica el Motor Shield V2,  alimenta directamente los servos mediante el regulador de Arduino lo que supone una limitación importante de potencia. Si usáis un par de servos sin carga, como en el ejemplo que os he puesto en el vídeo, no habrá problemas, pero en cuanto metáis un servo de una cierta potencia o le pidáis un cierto esfuerzo, el alimentador de Arduino se demostrará insuficiente.

    Además si la intensidad se agacha, son muy probables daños irreparables en tu Arduino o en los servos y no es cosa de broma porque al final pueden valer pasta.

    Por eso, si prevéis que vamos a necesitar un poco más de potencia de la que Arduino puede suministrar es buena idea usar los conectores que el Shield V2 trae para alimentación externa de los servos:

    Motor Shield V2

    El recuadro rojo destaca los conectores verdes que disponéis al efecto, pero (No iba a ser tan fácil) estos conectores vienen unidos por una pista del circuito impreso a Vcc y GND por lo que si queremos  usar una tensión diferente es necesario cortar una pista del circuito impreso o PCB

    Aquí tenéis localizada la pista a cortar:

    Detalle pista a cortar

     

    Apilando Shields V2 de Adafruit

     

    Ya hemos comentado que este Shield tiene la agradable propiedad de permitir apilar múltiples unidades una encima de otra, hasta 32 unidades. De este modo el número de motores que podemos controlar crece con facilidad hasta un número descabellado.

    La ventaja de incluir controladores I2C en el propio chip permite que cambiemos la dirección I2C de cada Shield y por eso pueden trabajar en paralelo.

    Como además el propio Shield incorpora un chip de gestión del PWM, no hay que preocuparse por la precisión de estos aun cuando el número de motores sea alto.

    La única condición es que la dirección I2C de cada Shield sea distinta (Recordad que el bus I2C está pensado para conectar múltiples dispositivos a los mismos hilos de comunicaciones)

    • Cuidado: Por muchos Shields que apiles, el número de servos posibles siguen siendo solo 2, porque estos están unidos a los pines 9 y de 10 de Arduino
    • Pronto veremos un Shield dedicado a manejar múltiples servos, pero no es este. 

    Fíjate en esta zona:

    Motor Shield V2

    Hay 5 pares de conexiones en vertical aisladas por defecto. Cada uno de esos pares representa un digito binario para la dirección. El par de la derecha representa el bit menos significante y a medida que nos movemos hacia la izquierda son bits de más peso.

    Si eso ha sonado raro, tranquilos que parece difícil pero es una tontería. De la misma manera que el numero binario 00010 representa los bits desde el menos significante a la derecha hacia el más significante a la izquierda, lo hacemos en este caso.

    La idea es que montas el número binario soldando el par que te interesa y como hay 5 pares puedes hacer 25 combinaciones, o sea 32 y por eso el límite del máximo número de Shields que puedes apilar ¿Qué te parece?

    La dirección base del Shield V2 viene de fábrica a 0x60 hex y la dirección final se calcula sumándole el numero binario que soldéis con estos pares.

    Por ejemplo, si sueldas los 2 pares de la derecha, habrás configurado el número 3, 00011 en binario y asignarás la dirección 60+3 = 0x63 hex. Eso es todo.

    ¡Accede al contenido!

    Cuando envías una orden al motor Shield V2, puedes omitir la dirección hexadecimal del mismo pero entonces Arduino asumirá que es la dirección 0x60. Para ordenar algo a un Shield con dirección diferente, tienes que especificar la dirección concreta para quien es la orden y por eso puedes manejar más motores sin más que especificar a que Shield está conectado. ¿Elegante. a que si?

    Quedaros con la copla porque volveremos a ver más Shields que usan este mismo sistema para asignar direcciones.

     

    Resumen de la sesión

     

  • Hemos visto mas posibilidades del Adafruit Motor Shield V2.
  • Vimos como conectar servos a él
  • Presentamos unos programas sencillos para mover un par de servos.
  • Vimos como asignar y cambiar la dirección I2C de cada Shield.
  • Vimos que podíamos apilar estos Shields para aumentar el número de motores a controlar. [/three-fourth][margin value=»5″ /]
  •    

    Deja una respuesta