Site icon AranaCorp

Controlar vários motores com o Motor Shield V2

O Motor Shield V2 é uma placa de extensão para os microcontroladores Arduino UNO e Mega, para controlar motores de corrente contínua e motores de passo. Para controlar motores, é possível utilizar circuitos integrados diretamente, mas isso requer uma cablagem extensa que pode se tornar muito difícil de administrar. Para realizar montagens mais limpas, pode criar os seus próprios circuitos impressos ou utilizar shields.

Vamos usar o Motor Shield V2 e ver as suas melhorias em relação à versão anterior.

Pré-requisito: Programar com o Arduino

Material

Visão geral do Motor Shield V2

O Motor Shield V2 utiliza o TB6612 MOSFET, com capacidade de 1,2A por canal, e a comunicação I2C. Ele usa menos pinos do que a versão anterior:

O Motor Shield V2 tem um jumper para selecionar o endereço I2C e pode ser empilhado. Isso permite conduzir até 32 shields (ou 64 motores de passo ou 128 motores CC) com uma única placa Arduino.

Esquema

Compatível com as placas UNO e Mega, o shield é colocado diretamente sobre a placa Arduino. A fonte de alimentação liga-se ao bloco terminal Power. Os motores são ligados aos blocos terminais M1 a M4. Pode ser necessário ligar três tipos de motores (fora os servomotores):


As ligações desses motores estão detalhadas nos diagramas a seguir..

Código para controle de motores CC

Para interagir com o Motor Shield V2, utilizamos a biblioteca Adafruit_MotorShield.h. Para conduzir o motor CC, usamos a classe Adafruit_DCMotor, cujas funções a se conhecer são:

#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 controle de motores de passo

Para controlar um motor de passo, utilizamos a classe Adafruit_StepperMotor, cujas funções a se conhecer são:

Este é o exemplo da biblioteca.

#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);
}

Converter o código do V1 para o V2

Para converter o seu código Arduino do Motor Shield V1 para o V2, modifique os seguintes itens:

Teste e combine estes exemplos para obter as funcionalidades que deseja. Se tiver algum problema ao usar o seu Motor Shield, fique à vontade para nos deixar um comentário ou enviar uma mensagem.

Aplicação

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Exit mobile version