Icono del sitio AranaCorp

Controla múltiples motores con Motor Shield V2 y Arduino

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

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:

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

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:

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

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

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

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

Salir de la versión móvil