Etiquetas: , , ,
0
(0)

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

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

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?