fbpixel
Etiquetas: , , , ,

O Motor Shield V1 é uma placa de extensão para os microcontroladores Arduino UNO e Mega, para a controlar motores de corrente contínua e motores de passo. Já vimos como conduzir um motor CC utilizando uma ponte H, o que pode exigir muitos cabos quando se utiliza o circuito integrado, simplesmente. Para uma aplicação na forma embarcada, como num robô Rovy, será necessário controlar vários motores em paralelo. Para este fim, existem shields que simplificam a montagem.

O shield utilizado neste tutorial é o Motor Shield V1 da Adafruit. Existe uma versão mais recente, o Motor Shield V2.

Pré-requisito: Programar com o Arduino

Material

  • Computador
  • Arduino UNO
  • Cabo USB para ligar o Arduino ao computador
  • Motor CC
  • Motor de passo
  • Motor Shield V1

Visão Geral do Motor Shield V1

arduino-motor-shield-v1 Controlar vários motores com o Motor Shield V1

O Motor Shield utiliza a ponte H L293D e o IC 74HC595N. Ele usa os seguintes pinos:

  • Pino digital 11: Motor DC #1 / Stepper #1 (ativação/velocidade)
  • Pino digital 3: Motor DC #2 / Stepper #1 (ativação/velocidade)
  • Pino digital 5: Motor DC #3 / Stepper #2 (ativação/velocidade)
  • Pino digital 6: Motor DC #4 / Stepper #2 (ativação/velocidade)
  • Pinos digitais 4, 7, 8 e 12 para comunicação com o 74HC595
  • Pinos digitais 9 e 10 para os servomotores 1 e 2

No caso de um shield, as ligações são pré-definidas. Verifique a documentação técnica do seu componente para saber como utilizá-lo (Motor Shield V1 datasheet).

Esquema de ligação

Compatível com as placas UNO e Mega, o shield é colocado diretamente sobre a placa Arduino. A fonte de alimentação é ligada ao bloco terminal de alimentação. Os motores são ligados aos blocos terminais M1 a M4. Pode ser que precise ligar três tipos de motores (sem contar os servomotores):

  • Motor CC
  • motor de passo unipolar
  • motor de passo bipolar

As ligações destes motores estão detalhadas nos diagramas a seguir. Atenção: o shield representado nos diagramas é o Motor Shield V2, mas as ligações com os bloco terminais permanecem as mesmas.

motor-shield-v2-dc-motor_bb-1280x400 Controlar vários motores com o Motor Shield V1
motor-shield-v2-stepper-unipolar-bipolar_bb-1280x329 Controlar vários motores com o Motor Shield V1
arduino-motor-shield-v1-pinout Controlar vários motores com o Motor Shield V1

Código para controlar motores CC

Para interagir com o Motor Shield V1, utilizamos a biblioteca AFMotor.h. Para controlar um motor CC, usamos a classe AF_DCMotor. Às funções a conhecer são:

  • motor.run() para ativar o motor em um sentido ou outro (RELEASE,BACKWARD,FORWARD).
  • motor.setSpeed() para definir a velocidade.
/*----------------------------------------------------------------------
  * Summary : Permet de tester un moteur CC
  * Hardware :
   - Arduino UNO x1
   - Motor Shield V1 x1
   - Moteur CC x1
* www.aranacorp.com
----------------------------------------------------------------------*/
//Librairies
#include <AFMotor.h>
//Constants
const int motorspeed=200;
//Parameters
AF_DCMotor motorG(1);

void setup() {
  // Code d'initialisation :s'exécute une seule fois
  Serial.begin(9600);
  Serial.println("Test moteur");

  motorG.setSpeed(motorspeed);
  motorG.run(RELEASE);

}

void loop() {
  // Code principal: s'exécute de manière répétitive
  Serial.println("-------------------------------------");
  Serial.println("Avant ");
  motorG.run(FORWARD);
  delay(500);
  Serial.println("Arrière ");
  motorG.run(BACKWARD);
  delay(500);
  Serial.println("Arrêt ");
  motorG.run(RELEASE);
  delay(1000);
}

Código para controlar motores de passo

Para controlar motores de passo, utilizamos a classe AF_Stepper, cujas funções a se conhecer são:

  • motor.setSpeed(velocidade) para definir a velocidade.
  • motor.step(número de passos, direção, algoritmo) para girar um certo número de passos num sentido ou outro.

Este é o exemplo da biblioteca:

#include <AFMotor.h>
#define NB_OF_STEPS 100
// Connect a stepper motor with 48 steps per revolution (7.5 degree)
// to motor port #1 (M1 and M2)
AF_Stepper motor(48, 1);

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Stepper test!");

  motor.setSpeed(10);  // 10 rpm   
}

void loop() {
  Serial.println("Single coil steps");
  motor.step(NB_OF_STEPS, FORWARD, SINGLE); 
  motor.step(NB_OF_STEPS, BACKWARD, SINGLE); 

  Serial.println("Double coil steps");
  motor.step(NB_OF_STEPS, FORWARD, DOUBLE); 
  motor.step(NB_OF_STEPS, BACKWARD, DOUBLE);

  Serial.println("Interleave coil steps");
  motor.step(NB_OF_STEPS, FORWARD, INTERLEAVE); 
  motor.step(NB_OF_STEPS, BACKWARD, INTERLEAVE); 

  Serial.println("Micrsostep steps");
  motor.step(NB_OF_STEPS, FORWARD, MICROSTEP); 
  motor.step(NB_OF_STEPS, BACKWARD, MICROSTEP); 
}

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

Aplicação

  • Controlar um robô de 2 ou 4 rodas

Referências

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