bclose

Adafruit Motor Shield V2 II

Controlando servos y apilando shields

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.

Imagen de Arduino UNO  Arduino UNO o equivalente.
Vista lateralAdafruit Motor Shield V2
Pequeño servoUn par de servos para las pruebas

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.

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. 

 

 

(7) Comments

  • He comenzado por el esquema eléctrico de la botonera y la conexión con al ATX . No he podido encontrar el ADAFRUIT entre los componentes , pero imaginar que el ADAFRUIT esta acomplado encima. Sería correcta esta configuración electrica?

    Al adafruit tendría que conectarle por ejemplo en +12 v el pin 11 del ATX y en GND el pin 24 con los bornes de alimentación del Adafruit . Creo que hasta ahora estoy en lo cierto , pero agradezco cualquier ayuda o correción. Gracias.

    Esquema:
    https://drive.google.com/file/d/0B7E0rOkFsC59RGpOekxFcERwWEE/view?usp=sharing

  • Hola !

    Gracias por la fantástica web que tenéis , estoy encontrando un montón de información .

    Tengo algunas dudas.
    Gracías a esta entrada
    http://www.prometec.net/adafruit-motor-shield-v2/

    descubrí los como usar los motores paso a paso y los diferentes tipos de movimientos que pueden hacer.

    Single coil steps, Double coil steps, Interleave coil steps, Microstep steps

    Y gracias a esta entrada aprendí como usar las fuentes ATX ( la verdad es que muy muy interesante) y ademas de como encenderla con un pulsador y con un led a modo de ” test” de que todo esta correcto .

    http://www.prometec.net/fuentes-atx/

    Ahora pregunto yo …

    Sería posible unir las dos cosas? Es decir :

    Utilizar la ATX para darle alimentación al Adafruit Motor Shield V2 y ademas que la acción del motor fuera cordinada con una botonera? Un botón para ” Adelante” y un botón para ” Atras ”

    Alguna ayuda?

    gracias.
    EG

    • Naturalmente que si Eric. No vas a tener problemas porque ya has visto como manejar los motores y con el mismo arduino puedes gobernar la fuente ATX.

      De hecho te recomiendo que uses la fuente ATX para alimentar tanto el arduino a 5V directamente como los motores a 12V,

      • Muchas gracias admin ,

        ahora no lo que no veo tan claro es como hacerlo… alguna sugerencia por donde empezar? estoy mas perdido que un pulpo en un garaje. !

        gracias.

        • No le tengas miedo. Sigue la sesion de como usar la fuente ATX para alimentar tu arduino y despues conecta los motores a 12 de la salida d ela fuente

  • Una pregunta cuando te compras el SHIELD V2 de Adafruit y te llega a casa ya lo unes con el arduino o hay que soldar? gracias

    • Hla Juanma, No. El modelo que traemos viene soldado y montado, no tienes mas que enchufar tus motores y listo

Give a Reply

WordPress Anti-Spam by WP-SpamShield