fbpixel
Etiquetas:, , , ,
0
(0)

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

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.

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?