Site icon AranaCorp

Controlar vários motores com o Motor Shield V1

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

Visão Geral do Motor Shield V1

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

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

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.

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:

/*----------------------------------------------------------------------
  * 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:

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

Referências

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

Exit mobile version