Informação do site: https://store.arduino.cc/arduino-motor-shield-rev3
Descrição

O Arduino Motor Shield é baseado no L298, que é um driver de ponte dupla projetado para acionar cargas indutivas, como relés, solenóides, motores de corrente contínua e motores de passo. Ele permite acionar dois motores CC com uma placa de Arduino, controlando a velocidade e a direção de cada motor de forma independente. Também é possível medir a corrente absorvida por cada motor, entre outras características.
Características Técnicas

Alimentação
O Arduino Motor Shield deve ser alimentado apenas por uma fonte de alimentação externa. Porque o L298 IC montado na blindagem tem duas conexões de energia separadas, uma para a lógica e outra para o driver de alimentação do motor. A corrente necessária do motor geralmente excede o valor máxima de corrente USB. A energia externa (não USB) pode ser proveniente de um adaptador AC / DC ou de uma bateria. Para evitar possíveis danos na placa Arduino na qual o shield está montado, recomenda-se uma fonte de alimentação externa que forneça uma tensão entre 7 e 12V. Se o motor exigir mais de 9V, recomendamos que separe os circuitos de alimentação do shield e da placa Arduino. na qual o shield está montado. Isso é possível cortando o jumper “Vin Connect” colocado no lado de trás da blindagem. O limite máximo para o Vin, nos terminais de parafuso, é de 18V. Os pinos de energia são os seguintes:
Vin no bloco de terminais de parafuso, é a tensão de entrada para o motor conectado ao shield. Uma fonte de alimentação externa ligada a este pino também fornece energia para a placa Arduino na qual está montado. Ao cortar o jumper “Vin Connect”, torna a linha de alimentação dedicada aos motores.
GND permite ligar no bloco de terminais de parafuso o potencial negativo.
O shield pode fornecer 2 amperes por canal, num total de 4 amperes. A Entrada e Saída deste shield possui dois canais separados, chamados A e B, que usam 4 dos pinos do Arduino para acionar ou detectar o motor. No total, existem 8 pinos em uso neste shield. Pode usar-se cada canal separadamente para acionar dois motores CC ou combiná-los para acionar um motor bipolar de passo. Os pinos do shield, para cada canal, devem ser considerados de acordo com a tabela seguinte (estes pins embora pareçam livres não podem ser utilizados para mais nenhuma função):

Ligação e controlo de motores DC
Pode acionar-se dois motores DC ligando os dois condutores de cada um aos terminais de parafuso (+) e (-) em cada canal A e B. Desta forma, pode controlar-se a direção ajustando HIGH ou LOW dos pinos de DIR A e DIR B pinos, para controlar a velocidade, apenas é preciso controlar os valores do ciclo de serviço PWM A e PWM B (entre 0 e 255). Os pinos de travagem, Brake A e Brake B, se forem colocados em HIGH, param os motores de CC. Para medir a corrente que passa pelos motores de CC em cada canal há uma tensão proporcional à corrente a medir, que pode ser lida nas entradas analógicas A0 e A1l, através da função analogRead (). Estas são calibradas para 3,3V quando cada canal estiver a fornecer uma corrente máxima de 2A.
Esquema de ligação

Programa de teste
/* Teste com o Arduino motor shield
* Programa realizado pelo Professor Ramiro Martins
* Clube de Robotica da ESGC
* Visite o nosso site em: https://cluberobotica.wordpress.com/
* Tambem estamos no Facebook: https://www.facebook.com/clubederoboticaesgc/
*/
//Declaracao de variaveis
const int
PWM_A = 3, // A partir do pin 3 pode-se controlar a velocidade do motor A
PWM_B = 11, // A partir do pin 11 pode-se controlar a velocidade do motor B
DIR_A = 12, // A partir do pin 12 pode-se controlar o motor A roda para afrente ou para tras
DIR_B = 13, // A partir do pin 13 pode-se controlar o motor B roda para afrente ou para tras
BRAKE_A = 9, // A partir do pin 9 pode-se parar o motor A
BRAKE_B = 8; // A partir do pin 8 pode-se parar o motor B
void setup() {
// Configuracao do circuito de saida A, que liga o motor A
pinMode(BRAKE_A, OUTPUT); // pin de paragem do circuito A
pinMode(DIR_A, OUTPUT); // pin de direcao do circuito A
// Configuracao do circuito de saida A, que liga o motor B
pinMode(BRAKE_B, OUTPUT); // pin de paragem do circuito B
pinMode(DIR_B, OUTPUT); // pin de direcao do circuito B
// Open Serial communication
Serial.begin(9600);
}
void loop() {
// Rotinas do programa para teste dos motores:
// Robot roda para a frente
digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada
digitalWrite(DIR_A, HIGH); // funcao para andar a um, o motor A roda para a frente
analogWrite(PWM_A, 150); // velocidade do motor A esta definida a 150, 255 valor max.
digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada
digitalWrite(DIR_B, HIGH); // funcao para andar a um, o motor B roda para a frente
analogWrite(PWM_B, 150); // velocidade do motor B esta definida a 150, 255 valor max.
Serial.println("Estou a andar para a frente");
delay(10000); // tempo de funcionamento 10 segundos
analogWrite(PWM_A, 0); // velocidade do motor A a zero, nao se fornece energia
analogWrite(PWM_B, 0); // velocidade do motor B a zero, nao se fornece energia
delay(500); // tempo de funcionamento 0.5 segundos
// O Robot roda para tras
digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada
digitalWrite(DIR_A, LOW); // funcao para andar a zero, o motor A roda para tras
analogWrite(PWM_A, 150); // velocidade do motor A esta definida a 150, 255 valor max.
digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada
digitalWrite(DIR_B, LOW); // funcao para andar a zero, o motor B roda para tras
analogWrite(PWM_B, 150); // velocidade do motor A esta definida a 150, 255 valor max.
Serial.println("Estou a andar para tras");
delay(10000); // tempo de funcionamento 10 segundos
// O Robot para 5 segundos porque a energia fornecida ao motor A e B e zero
analogWrite(PWM_A, 0); // velocidade do motor A a zero, nao se fornece energia
analogWrite(PWM_B, 0); // velocidade do motor B a zero, nao se fornece energia
Serial.println("Estou parado");
delay(5000); // tempo de funcionamento 5 segundos
//Robot roda para a direita durante 10 segundos, parando o motor da direita e rodando o da esquerda
digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada
digitalWrite(DIR_A, HIGH); // funcao para andar a um, o motor A roda para a frente
analogWrite(PWM_A, 100); // velocidade do motor A a 100, 255 valor max.
analogWrite(PWM_B, 0); // velocidade do motor B a zero, fica parado
Serial.println("Estou a andar para a direita");
delay(10000); // tempo de funcionamento 10 segundos
//Rodar para a esquerda durante 10 segundos, parando um motor da esquerda e rodando o da direita
digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada
digitalWrite(DIR_B, HIGH); // funcao para andar a um, o motor B roda para a frente
analogWrite(PWM_B, 100); // velocidade do motor B a 100, 255 valor max.
analogWrite(PWM_A, 0); // velocidade do motor A a zero, fica parado
Serial.println("Estou a andar para a esquerda");
delay(10000); // tempo de funcionamento 10 segundos
//Rodar para a esquerda e direita aos ss 5 segundos
for (int i=0; i<10; i++){
digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada
digitalWrite(DIR_B, HIGH); // funcao para andar a um, o motor B roda para a frente
analogWrite(PWM_B, 150); // velocidade do motor B a 150, 255 valor max.
analogWrite(PWM_A, 50); // velocidade do motor A a 50, fica parado
Serial.println("Estou a andar para a direita");
delay(5000); // tempo de funcionamento 5 segundos
digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada
digitalWrite(DIR_A, HIGH); // funcao para andar a um, o motor A roda para a frente
analogWrite(PWM_A, 150); // velocidade do motor A a 150, 255 valor max.
analogWrite(PWM_B, 50); // velocidade do motor B a 50, fica parado
Serial.println("Estou a andar para a esquerda");
delay(5000); // tempo de funcionamento 5 segundos
}
} // Fim do programa de testes dos movimentos dos motores

