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:

Shield de Motor DC com Arduino

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.

Diagrama de ligação do Shield de Motor DC com Arduino

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.
Biblioteca do Shield de Motor DC para Arduino

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:

#include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); // Use Channel A void setup() { motor.begin(); // Initialize motor pins } void loop() { motor.run(MOTOR_FORWARD, 100); // Run forward at speed 100 delay(2000); motor.brake(); // Stop the motor delay(1000); }

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.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelA Example * * This example demonstrates how to control a DC motor connected to * Channel A of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel A"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

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.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - ChannelB Example * * This example demonstrates how to control a DC motor connected to * Channel B of the Arduino Motor Shield Rev3. The motor alternates * direction every 2 seconds with braking in between. * * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_B); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Channel B"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor with speed 30 (out of 255) motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

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.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - BothChannels Example * * This example demonstrates how to control two DC motors simultaneously, * one on Channel A and one on Channel B of the Arduino Motor Shield Rev3. * * Channel A pins: D12 (Direction), D3 (PWM), D9 (Brake), A0 (Current) * Channel B pins: D13 (Direction), D11 (PWM), D8 (Brake), A1 (Current) * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motorA(MOTOR_CH_A); DIYables_DC_Motor motorB(MOTOR_CH_B); void setup() { Serial.begin(9600); motorA.begin(); motorB.begin(); Serial.println("Motor Shield - Both Channels"); } void loop() { // Both motors forward motorA.run(MOTOR_FORWARD, 100); motorB.run(MOTOR_FORWARD, 100); Serial.println("Both FORWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Both motors backward motorA.run(MOTOR_BACKWARD, 100); motorB.run(MOTOR_BACKWARD, 100); Serial.println("Both BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); // Motors in opposite directions motorA.run(MOTOR_FORWARD, 150); motorB.run(MOTOR_BACKWARD, 150); Serial.println("A FORWARD, B BACKWARD"); delay(2000); // Brake both motors motorA.brake(); motorB.brake(); Serial.println("Both BRAKING"); delay(1000); }

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.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - CurrentSensing Example * * This example demonstrates how to read the current drawn by a DC motor * connected to Channel A of the Arduino Motor Shield Rev3. * * The Motor Shield Rev3 provides current sensing via analog pins: * Channel A: A0 * Channel B: A1 * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Current Sensing"); } void loop() { // Run motor forward motor.run(MOTOR_FORWARD, 100); // Read and print current sensing value int current = motor.readCurrent(); Serial.print("Current sensing (raw ADC): "); Serial.println(current); delay(500); }

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.

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-dc-motor-shield */ /* * DIYables_DC_Motor - CustomPins Example * * This example demonstrates how to create a motor object with * custom pin assignments instead of using the predefined channels. * * Tutorial: https://diyables.io/motor-shield * * TESTED HARDWARE: * - Arduino Uno R3 * - Arduino Uno R4 WiFi * - Arduino Uno R4 Minima * - Arduino Mega * - Arduino Due * - Arduino Giga * - DIYables STEM V3: https://diyables.io/stem-v3 * - DIYables STEM V4 IoT: https://diyables.io/stem-v4-iot * - DIYables STEM V4B IoT: https://diyables.io/stem-v4b-iot * - DIYables STEM V4B Edu: https://diyables.io/stem-v4-edu * - DIYables MEGA2560 R3: https://diyables.io/atmega2560-board * - It is expected to work with other boards */ #include <DIYables_DC_Motor.h> // Custom pin assignment: direction=12, pwm=3, brake=9, currentSensing=A0 DIYables_DC_Motor motor(12, 3, 9, A0); bool directionState = false; void setup() { Serial.begin(9600); motor.begin(); Serial.println("Motor Shield - Custom Pins"); } void loop() { // Toggle direction each cycle directionState = !directionState; int direction = directionState ? MOTOR_FORWARD : MOTOR_BACKWARD; // Run motor motor.run(direction, 30); Serial.print("Running "); Serial.println(directionState ? "FORWARD" : "BACKWARD"); delay(2000); // Brake the motor motor.brake(); Serial.println("Braking"); delay(2000); }

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=*).

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!