Arduino UNO R4 - DC Motor Sield

O Arduino Uno R4 - disponível nas versões Minima e WiFi - traz mais poder de processamento, mais memória e um ADC de 14 bits, mantendo o layout clássico de conectores do Uno. Isso significa que o Motor Shield Rev3 encaixa direto no Uno R4 sem nenhuma ligação extra.

Neste guia você vai:

Arduino Uno R4 DC Motor Shield

Visão Geral do Motor Shield Rev3

No coração do Motor Shield Rev3 está o driver de dupla ponte completa L298P. Esse chip dá a você controle independente de dois motores DC - cada um com sua própria linha de sentido, linha de velocidade PWM, linha de freio e entrada analógica de medição de corrente.

Veja o que cada linha de controle faz:

  • Sentido - uma saída digital que define o sentido de giro. Escrever HIGH gira para um lado; LOW gira para o outro.
  • PWM - uma saída analógica (PWM) que define o ciclo de trabalho. Os valores vão de 0 (parado) a 255 (velocidade máxima).
  • Freio - uma saída digital. Colocá-la em HIGH trava o eixo do motor; colocá-la em LOW deixa o motor girar livremente.
  • Medição de Corrente - uma entrada analógica que informa quanta corrente o motor está consumindo.

Como o Uno R4 usa exatamente as mesmas posições de conectores do Uno R3 original, todos os pinos se alinham automaticamente:

Função Canal A Canal B
Sentido D12 D13
PWM (Velocidade) D3 D11
Freio D9 D8
Medição de Corrente A0 A1

Alimentando os Motores

Os motores precisam de mais corrente do que o USB pode fornecer. Conecte uma fonte externa de 6-12 V (como duas células de lítio 18650 em série) aos bornes de parafuso de alimentação do shield. O próprio Arduino pode continuar funcionando pelo USB.

Diagrama de Ligação

Encaixe o Motor Shield Rev3 nos conectores do Uno R4, garantindo que todos os pinos estejam bem encaixados.

Conecte os fios do motor DC aos bornes de parafuso do Canal A - os nomes dos canais estão impressos na placa.

Ligue o pack de baterias externo aos bornes de parafuso de alimentação.

The wiring diagram between Arduino Uno R4 DC Motor Shield

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Como Instalar a Biblioteca

  1. Conecte o Arduino Uno R4 ao seu computador usando um cabo USB Type-C.
  2. Na Arduino IDE, verifique se a placa correta (Arduino Uno R4 Minima ou WiFi) e a porta serial estão selecionadas.
  3. Clique no ícone Libraries na barra lateral esquerda.
  4. Digite "DIYables_DC_Motor" na caixa de busca e localize a biblioteca publicada pela DIYables.
  5. Clique em Install para adicionar a biblioteca à sua IDE.
Arduino DC Motor Shield library

Nenhuma dependência adicional é necessária - a biblioteca é totalmente independente.

Estrutura Mínima do Sketch

Todos os sketches de controle de motor compartilham este esqueleto:

#include <DIYables_DC_Motor.h> DIYables_DC_Motor motor(MOTOR_CH_A); void setup() { motor.begin(); } void loop() { motor.run(MOTOR_FORWARD, 100); delay(2000); motor.brake(); delay(1000); }

motor.begin() configura os pinos de sentido, PWM e freio. Chamar motor.run() define o sentido, solta o freio e aplica a velocidade solicitada. motor.brake() aciona o freio e corta o PWM para zero.

Um Motor no Canal A

Faça um motor funcionar no Canal A, alternando entre frente e trás a cada dois segundos, com uma parada completa entre eles.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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); }

Como Executar

  • Encaixe o shield no Uno R4 e conecte o motor ao Canal A.
  • Conecte o pack de baterias aos bornes de alimentação.
  • Conecte o cabo USB Type-C.
  • Cole o código na Arduino IDE, escolha a placa e a porta corretas e clique em Upload.
  • Abra o Serial Monitor para acompanhar as mudanças de sentido.

O motor alterna entre frente e trás na velocidade 30, fazendo uma pausa de 2 segundos a cada mudança de sentido.

Referência Rápida dos Métodos

Método O Que Faz Uso
run(dir, speed) Gira o motor no sentido dado, na velocidade dada motor.run(MOTOR_FORWARD, 100)
setSpeed(speed) Muda a velocidade sem mexer no sentido nem no freio motor.setSpeed(200)
setDirection(dir) Muda o sentido sem mexer na velocidade nem no freio motor.setDirection(MOTOR_BACKWARD)
brake() Aciona o freio e leva a velocidade a zero motor.brake()
release() Solta o freio motor.release()
readCurrent() Retorna o valor bruto do ADC do pino de medição de corrente motor.readCurrent()

Um Motor no Canal B

Comportamento idêntico, mas no Canal B - basta trocar a constante do canal.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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); }

Como Executar

  • Ligue o motor aos bornes de parafuso do Canal B.
  • Faça o upload do sketch e abra o Serial Monitor.

Tudo funciona da mesma forma; só os pinos usados por baixo mudam.

Dois Motores - Ambos os Canais

Acione dois motores de forma independente: mesmo sentido, sentidos opostos e frenagem sincronizada.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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); }

Como Executar

  • Conecte um motor ao Canal A e outro ao Canal B.
  • Faça o upload e abra o Serial Monitor.

O sketch percorre três padrões: os dois para frente, os dois para trás e os motores girando em sentidos opostos.

Lendo a Corrente do Motor

Monitore o consumo de corrente de um motor em tempo real.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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); }

Como Executar

  • Ligue um motor ao Canal A.
  • Faça o upload do sketch e abra o Serial Monitor.
  • O valor bruto do ADC é atualizado a cada 500 ms.

Sobre a Medição de Corrente

Os pinos analógicos A0 e A1 carregam uma tensão proporcional à corrente do motor no Canal A e no Canal B, respectivamente. readCurrent() retorna a leitura bruta do ADC - no Uno R4 esse é um valor de 14 bits (0-16383), graças ao ADC do Renesas RA4M1. Converta para miliamperes usando o fator de sensibilidade documentado do shield.

Atribuição Personalizada de Pinos

Se você precisa substituir o mapeamento de pinos padrão - por exemplo, ao usar uma placa de driver de motor de terceiros - passe os pinos diretamente ao construtor.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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); }

Como Executar

  • Atualize os números dos pinos no construtor para corresponder ao seu hardware.
  • Faça o upload e verifique o funcionamento do motor.

Solução de Problemas

  • O motor fica parado - Confirme que os fios do motor estão firmes nos bornes de parafuso e que o canal corresponde ao do código (MOTOR_CH_A vs. MOTOR_CH_B).
  • Sem torque - Aumente o valor da velocidade. Valores de PWM muito baixos podem não vencer a inércia do motor.
  • Fonte externa sem energia - Recarregue ou troque as baterias. Verifique se a polaridade está correta nos bornes de alimentação.
  • O sentido parece errado - Troque os dois fios do motor no borne de parafuso, ou inverta a constante de sentido no software.
  • A leitura de corrente é sempre zero - Certifique-se de que você usou o construtor com canal ou o construtor de 4 pinos que inclui o pino de medição de corrente.

Arduino Uno R4 DC Motor Shield - Demonstração Completa

O vídeo abaixo é um tutorial passo a passo que demonstra todos os exemplos do DC Motor Shield:

Suporte de Plataformas

A biblioteca depende exclusivamente das APIs padrão do Arduino (pinMode, digitalWrite, analogWrite, analogRead) e funciona em todas as plataformas compatíveis com Arduino.

※ 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!