Arduino - Shield de Motor DC
Este tutorial ensina como controlar um motor DC usando o Arduino com o Motor Shield Rev3. Em detalhes, vamos aprender:
- Como encaixar o Motor Shield Rev3 no Arduino.
- Como conectar um motor DC e uma fonte de alimentação externa.
- Como programar o Arduino para controlar o sentido do motor (para frente/para trás).
- Como programar o Arduino para controlar a velocidade do motor usando PWM.
- Como programar o Arduino para acionar e liberar o freio.
- Como programar o Arduino para ler a corrente do motor.
- Como controlar dois motores DC ao mesmo tempo usando os dois canais.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor Shield Rev3
O Arduino Motor Shield Rev3 é baseado no CI driver duplo de ponte completa L298P, que permite acionar dois motores DC (ou um motor de passo) com controle total de sentido, velocidade e frenagem.
O shield oferece os seguintes recursos:
- Dois canais de motor (A e B): cada canal pode acionar um motor DC de forma independente.
- Controle de sentido: faça o motor girar para frente ou para trás usando um pino digital.
- Controle de velocidade por PWM: ajuste a velocidade do motor de 0 a 255 usando um pino PWM.
- Controle de freio: acione ou libere o freio de cada canal usando um pino digital.
- Medição de corrente: leia a corrente consumida por cada motor através dos pinos analógicos.
O Motor Shield Rev3 foi projetado para o formato do Arduino Uno e se encaixa diretamente sobre a placa Arduino - sem necessidade de protoboard ou ligações complexas.
Mapeamento de Pinos
| Função | Canal A | Canal B |
|---|---|---|
| Sentido | D12 | D13 |
| PWM (Velocidade) | D3 | D11 |
| Freio | D9 | D8 |
| Medição de Corrente | A0 | A1 |
Alimentação Externa
O Motor Shield Rev3 precisa de uma fonte de alimentação externa para os motores. Conecte sua fonte de alimentação (6-12V) aos bornes de parafuso de alimentação do shield. A energia da fonte externa aciona os motores, enquanto o Arduino pode ser alimentado separadamente via USB ou pela sua própria fonte de alimentação.
Diagrama de Ligação
Primeiro, encaixe o Arduino Motor Shield Rev3 sobre o Arduino Uno, alinhando os pinos com cuidado.
Em seguida, conecte o motor DC ao Canal A usando os bornes de parafuso do shield. Os canais estão marcados ao lado dos bornes de parafuso.
Por fim, conecte a fonte de alimentação externa (por exemplo, 2 baterias Li-Ion de 3,7V) aos bornes de parafuso de alimentação do shield.

This image is created using Fritzing. Click to enlarge image
Instalação da Biblioteca
- Conecte a placa Arduino ao seu computador com um cabo USB.
- Abra o Arduino IDE, selecione a placa e a porta corretas.
- Vá até o ícone Libraries na barra lateral esquerda do Arduino IDE.
- Pesquise "DIYables_DC_Motor" e encontre a biblioteca DIYables_DC_Motor da DIYables.
- Clique no botão Install para instalar a versão mais recente da biblioteca.

Observação: esta biblioteca é independente e não tem dependências externas.
Estrutura Básica
Todo sketch que usa a biblioteca DC Motor segue esta estrutura básica:
motor.begin() inicializa os pinos de sentido, PWM e freio. Depois disso, use motor.run() para definir o sentido e a velocidade, e motor.brake() para parar o motor. Não é necessário chamar loop() no objeto do motor - o motor gira continuamente até você mudar o seu estado.
Código Arduino - Controle do Motor no Canal A
O código a seguir mostra como controlar um motor DC no Canal A: alternando o sentido a cada 2 segundos, com frenagem entre as mudanças.
Passos Rápidos
- Encaixe o Motor Shield Rev3 na placa Arduino.
- Conecte o motor DC aos bornes de parafuso do Canal A.
- Conecte a fonte de alimentação externa.
- Conecte a placa Arduino ao seu computador com um cabo USB.
- Abra o Arduino IDE, selecione a placa e a porta corretas.
- Copie o código acima e cole-o no editor do Arduino IDE.
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
- Abra o Serial Monitor para ver as mensagens de estado do motor.
O motor gira para frente por 2 segundos na velocidade 30, freia por 2 segundos, depois gira para trás por 2 segundos, e repete.
Resumo da API do Motor
| Método | Descrição | Exemplo |
|---|---|---|
| run(direction, speed) | Define o sentido e a velocidade, libera o freio | motor.run(MOTOR_FORWARD, 100) |
| setSpeed(speed) | Define a velocidade PWM (0-255) | motor.setSpeed(150) |
| setDirection(direction) | Define apenas o sentido | motor.setDirection(MOTOR_BACKWARD) |
| brake() | Aciona o freio e define a velocidade como 0 | motor.brake() |
| release() | Libera o freio | motor.release() |
| readCurrent() | Lê o valor ADC bruto do pino de medição de corrente | motor.readCurrent() |
Código Arduino - Controle do Motor no Canal B
O código a seguir mostra como controlar um motor DC no Canal B.
Passos Rápidos
- Conecte o motor DC aos bornes de parafuso do Canal B (em vez do Canal A).
- Copie o código acima e cole-o no editor do Arduino IDE.
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
- Abra o Serial Monitor.
O comportamento é idêntico ao do Canal A - a única diferença é o canal usado.
Código Arduino - Os Dois Canais
O código a seguir mostra como controlar dois motores DC ao mesmo tempo, um em cada canal.
Passos Rápidos
- Conecte um motor DC ao Canal A e outro ao Canal B.
- Copie o código acima e cole-o no editor do Arduino IDE.
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
- Abra o Serial Monitor.
Os dois motores giram juntos para frente, depois juntos para trás, depois em sentidos opostos - com pausas de frenagem entre as etapas.
Código Arduino - Medição de Corrente
O código a seguir mostra como ler a corrente consumida por um motor DC usando o pino de medição de corrente embutido.
Passos Rápidos
- Conecte um motor DC ao Canal A.
- Copie o código acima e cole-o no editor do Arduino IDE.
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
- Abra o Serial Monitor.
- Observe o valor ADC bruto da medição de corrente sendo atualizado a cada 500 ms.
Observações sobre a Medição de Corrente
O Motor Shield Rev3 oferece medição de corrente pelos pinos analógicos A0 (Canal A) e A1 (Canal B). O método readCurrent() retorna um valor ADC bruto. Para converter em corrente real (em ampères), você precisa aplicar o fator de conversão adequado, com base no circuito de medição de corrente do shield.
Código Arduino - Pinos Personalizados
O código a seguir mostra como criar um objeto de motor com uma atribuição de pinos personalizada, em vez de usar as constantes de canal predefinidas.
Passos Rápidos
- Ajuste os números dos pinos no construtor para corresponder à sua ligação.
- Copie o código acima e cole-o no editor do Arduino IDE.
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino.
Essa abordagem é útil quando você usa um driver de motor não padrão ou uma configuração de pinos modificada.
Solução de Problemas
Se o código não estiver funcionando, veja alguns problemas comuns que você pode verificar:
- Motor não gira: verifique se o motor está conectado corretamente aos bornes de parafuso do canal certo.
- Canal errado: certifique-se de que as definições de pinos no seu código correspondem ao canal em que você conectou o motor (Canal A ou Canal B).
- Sem alimentação: verifique se a fonte de alimentação externa está conectada e funcionando. O motor precisa de alimentação externa - só o USB não é suficiente para o funcionamento do motor.
- Rotação fraca ou nenhuma rotação: aumente o valor da velocidade em setSpeed() ou run(). Uma velocidade muito baixa (por exemplo, abaixo de 20) pode não ser suficiente para vencer o torque de partida do motor.
- Sentido invertido: basta trocar os dois fios do motor no borne de parafuso, ou mudar MOTOR_FORWARD para MOTOR_BACKWARD no seu código.
Shield de Motor DC com Arduino - Demonstração Completa
Abaixo está um tutorial em vídeo passo a passo que demonstra todos os exemplos do Shield de Motor DC:
Suporte a Plataformas
A biblioteca usa apenas APIs padrão do Arduino (pinMode, digitalWrite, analogWrite, analogRead) e suporta todas as plataformas Arduino (architectures=*).