El Motor Escudo V2 es una tarjeta de expansión para Arduino UNO y microcontroladores Mega para el control de motor y DC motor paso a paso. Para el control del motor, es posible utilizar circuitos integrados directamente, pero su uso requiere cableado significativa rápidamente puede llegar a ser inmanejable.
Para hacer arreglos propios, puede crear su propio bien o por el uso de PCB Shields.
Vamos a utilizar el motor V2 Escudo y ver las mejoras con respecto a la versión anterior.
Prerequisito: La programación con Arduino
Hardware
- Computer
- ArduinoUNO
- USB A macho/B macho
- MotorShieldV2
- Motor CC o stepper x1
Principio de funcionamiento
El Motor Escudo V2 utiliza el MOSFET TB6612 con capacidad 1.2A por canal y la comunicación I2C. Utiliza menos pines que la versión anterior:
- Digital pin SCL/A5: Comunicación I2C Serial Clock Line
- Digital pin SDA/A4: Comunicación I2C línea serie de datos
El motor Escudo V2 tiene jumper para seleccionar la dirección I2C y son apilables. Que puede operar hasta 32 shieds (64 steppers o motores DC 128) con una sola Arduino.
En el caso de un escudo, las conexiones están predefinidos. Asegúrese de que la documentación técnica de la componente de usarlo.
Eschema
Compatible con los microcontroladores UNO y Mega, el escudo se coloca directamente sobre la placa Arduino. La alimentación se conecta al bloque de terminales de potencia. Los motores están conectados a los terminales M1 a M4. Se pueden conectar tres tipos de motor(con exclusión de los servomotores):
- Motor CC
- Unipolar stepper
- Bipolar stepper
Las conexiones de estos motores se describen en los siguientes esquemas.
Código para manejar motores de corriente continua
Para interactuar con el Motor Shield V2, utilizamos la biblioteca Adafruit_MotorShield.h .
Para conducir un motor de corriente continua, utilizaremos la clase Adafruit_DCMotor cuyas funciones son:
- motor.getMotor(entero) para seleccionar el motor utilizado
- motor.run () para activar el motor en un sentido o en el otro (RELEASE, FORWARD, BACKWARD).
- motor.setSpeed() para ajustar la velocidad
#include <Wire.h> #include <Adafruit_MotorShield.h> // Create the motor shield object with the default I2C address Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // Or, create it with a different I2C address (say for stacking) // Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); // Select which 'port' M1, M2, M3 or M4. In this case, M1 Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // You can also make another motor on port M2 //Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2); void setup() { Serial.begin(9600); // set up Serial library at 9600 bps Serial.println("Adafruit Motorshield v2 - DC Motor test!"); AFMS.begin(); // create with the default frequency 1.6KHz //AFMS.begin(1000); // OR with a different frequency, say 1KHz // Set the speed to start, from 0 (off) to 255 (max speed) myMotor->setSpeed(150); myMotor->run(FORWARD); // turn on motor myMotor->run(RELEASE); } void loop() { uint8_t i; Serial.print("tick"); myMotor->run(FORWARD); for (i=0; i<255; i++) { myMotor->setSpeed(i); delay(10); } for (i=255; i!=0; i--) { myMotor->setSpeed(i); delay(10); } Serial.print("tock"); myMotor->run(BACKWARD); for (i=0; i<255; i++) { myMotor->setSpeed(i); delay(10); } for (i=255; i!=0; i--) { myMotor->setSpeed(i); delay(10); } Serial.print("tech"); myMotor->run(RELEASE); delay(1000); }
Código para manejar motores paso a paso
Para controlar los motores paso a paso vamos a utilizar la clase Adafruit_StepperMotor cuyas funciones son:
- motor.getStepper (número de pasos, terminal usado) para seleccionar el motor utilizado
- motor.setSpeed(velocidad) para ajustar la velocidad
- motor.step (número de pasos, la dirección, algortihme) para girar un número de pasos en una dirección o la otra
#include <Wire.h> #include <Adafruit_MotorShield.h> // Create the motor shield object with the default I2C address Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // Or, create it with a different I2C address (say for stacking) // Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); // Connect a stepper motor with 4080 steps per revolution (1.8 degree) // to motor port #2 (M3 and M4) Adafruit_StepperMotor *myMotor = AFMS.getStepper(48, 2); void setup() { Serial.begin(9600); // set up Serial library at 9600 bps Serial.println("Stepper test!"); AFMS.begin(); // create with the default frequency 1.6KHz //AFMS.begin(1000); // OR with a different frequency, say 1KHz myMotor->setSpeed(10); // 10 rpm } void loop() { int nbSteps=4080; Serial.println("Single coil steps forward"); myMotor->step(nbSteps, FORWARD, SINGLE); delay(1000); Serial.println("Single coil steps backward"); myMotor->step(nbSteps, BACKWARD, SINGLE); delay(1000); Serial.println("Double coil steps forward"); myMotor->step(nbSteps, FORWARD, DOUBLE); Serial.println("Double coil steps backward"); myMotor->step(nbSteps, BACKWARD, DOUBLE); delay(1000); Serial.println("Interleave coil steps forward"); myMotor->step(nbSteps, FORWARD, INTERLEAVE); Serial.println("Interleave coil steps backward"); myMotor->step(nbSteps, BACKWARD, INTERLEAVE); delay(1000); Serial.println("Microstep steps forward"); myMotor->step(50, FORWARD, MICROSTEP); Serial.println("Microstep steps backward"); myMotor->step(50, BACKWARD, MICROSTEP); delay(1000); }
Convertir el código de V1 a V2
Para convertir su código Arduino para Motor Shield V1 a V2, debe modificar lo siguiente:
- Reemplazar la biblioteca
#include <Adafruit_MotorShield.h>
- Crear un objeto MotorShield:
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
- Crear un objeto Moteur en utilisant un pointeur:
Adafruit_DCMotor *motorG = AFMS.getMotor(1);
Adafruit_StepperMotor *myMotor = AFMS.getStepper(48, 2); - Agregar inicialización del shield:
AFMS.begin();
- Reemplazar los puntos «.» con flechas «->» al llamar a funciones:
motorG->setSpeed(motorSpeed);
motorG->run(RELEASE);
Pruebe y mezcle estos ejemplos para obtener la funcionalidad que desea. Si tiene problemas para usar su Motor Shield, no dude en dejarnos un comentario o enviarnos un mensaje.
Aplicaciones
- Controla motores (Stepper, CC, servo) de un robot
Fuentes
- https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino
- https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library/blob/master/Adafruit_MotorShield.h
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código
Es posible control este motor shield sin utilizar el i2c?
No, no puede. ¿Por qué no quieres usar el i2c?
Si eso es un problema, puedes usar el Motor Shield V1.