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
