fbpixel
Etiquetas: , , ,

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.

arduino-motor-shield-v2 Controla múltiples motores con Motor Shield V2 y Arduino

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.

motor-shield-v2-dc-motor_bb Controla múltiples motores con Motor Shield V2 y Arduino
motor-shield-v2-stepper-unipolar-bipolar_bb Controla múltiples motores con Motor Shield V2 y Arduino
arduino-motor-shield-v2-pinout Controla múltiples motores con Motor Shield V2 y Arduino

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

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