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.
Tienda España | Tienda Mexico | |
---|---|---|
![]() |
Arduino Uno o compatible y con el firmware para S4A cargado. |
Arduino Uno o compatible y con el firmware para S4A cargado.
|
![]() ![]() |
Una Protoboard más cables. | Una Protoboard más cables. |
![]() |
Motor shield V2 | Motor shield V2 |
![]() |
Un servo MG945 | 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:

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:

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:

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:
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:
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.
Estupendo!
Muchas gracias por la ayuda, lo probe y va perfecto.
Al principio del programa es donde le dirías que dirección tienen los shield con estas instrucciones:
Adafruit_MotorShield AFMS1(0x61); // Rightmost jumper closed
Adafruit_MotorShield AFMS2(0x60); // Default address, no jumpers
En el setup los inicializas:
AFMS1.begin(); // Start the bottom shield
AFMS2.begin(); // Start the top shield
Luego sólo tienes que llamar cada vez al shield que necesites, por ejemplo:
// On the top shield, connect two steppers, each with 200 steps
Adafruit_StepperMotor *myStepper1 = AFMS1.getStepper(200, 1);
Adafruit_StepperMotor *myStepper2 = AFMS1.getStepper(200, 2);
// On the bottom shield connect a stepper to port M3/M4 with 200 steps
Adafruit_StepperMotor *myStepper3 = AFMS2.getStepper(200, 2);
// And a DC Motor to port M1
Adafruit_DCMotor *myMotor1 = AFMS2.getMotor(1);
Hola Antonio, como los shields son I2C, tienes que soldar los pines que valen para cambiarle la dirección para poder diferenciarlos. Y una vez hecho eso llamas a cada shield por su dirección. Te dejo un enlace que te puede ayudar y si no entiendes algo nos comentas. Un saludo.
https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/stacking-shields
Buenas, enhorabuena por estos magníficos tutoriales.
Me gustaria apilar dos shields, no se como distingir entres los motores de un y otro shield, entendi lo de las direcciones pero mi nivel del uso de Arduino no atina donde meter esta direccion para distiguir un o otro shield, es posible una ayuda?
Gracias.
Gracias por estos magníficos tutoriales.
Una pregunta, si apilo dos o mas shield, como ago para llamar a un o otro motor conectado a cada shield?
Supomiendo tener dos shields con dos motores paso a paso cada uno.
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
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
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.
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,
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
https://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 .
https://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
Hla Juanma, No. El modelo que traemos viene soldado y montado, no tienes mas que enchufar tus motores y listo
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