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