Arduino Nano ESP32 - Motor DC

Este tutorial mostra como usar o Arduino Nano ESP32 para controlar um motor DC usando o Driver de Motor L298N. Em detalhes, vamos aprender a controlar a velocidade e a direção do motor DC. Vamos aprender a controlar um único motor DC e, depois, dois motores DC usando um único driver de motor L298N.

Sobre o Motor DC

Pinagem do Motor DC

Um Motor DC tem dois fios: Negativo (preto) e Positivo (vermelho)

DC Motor Pinout

Como o Motor DC Funciona

A direção e a velocidade do motor DC são determinadas pela forma como fornecemos energia a ele. As imagens abaixo mostram a relação detalhada entre a energia e a velocidade/direção

How to control DC motor

No caso de usar PWM, quanto maior o ciclo de trabalho (duty cycle) do PWM, maior a velocidade com que o motor gira.

A animação a seguir mostra como um sinal PWM é usado para controlar a velocidade de um motor DC:

How to control speed of DC motor by using PWM

Como controlar a velocidade e a direção do motor DC usando o Arduino Nano ESP32

Primeiro, o motor DC trabalha com uma tensão alta que pode queimar o Arduino Nano ESP32 ⇒ Não podemos conectar o motor DC diretamente ao Arduino Nano ESP32. Precisamos de um driver de hardware entre o motor DC e o Arduino Nano ESP32. O driver tem três responsabilidades:

  • Proteger o Arduino Nano ESP32 da tensão alta
  • Receber o sinal do Arduino Nano ESP32 para trocar o pólo da fonte de alimentação e controlar a direção do motor.
  • Amplificar o sinal PWM do Arduino Nano ESP32 (corrente e tensão) para controlar a velocidade do motor
Arduino Nano ESP32 control DC motor

Existem muitos drivers de motor DC. Este tutorial vai usar o driver L298N.

Sobre o Driver L298N

Um único driver L298N pode controlar dois motores DC ou um motor de passo. Este tutorial usa este driver para controlar o motor DC.

Pinagem do Driver L298N

A imagem abaixo mostra a pinagem do driver L298N.

L298N Driver Pinout

A explicação detalhada de cada pino está disponível neste tutorial Arduino - DC motor

Um único driver L298N pode controlar dois motores DC de forma independente:

  • O primeiro motor (chamado motor A) é controlado pelos pinos IN1, IN2, ENA, OUT1, OUT2.
  • O segundo motor (chamado motor B) é controlado pelos pinos IN3, IN4, ENB, OUT3, OUT4.

Como Controlar a Velocidade do Motor DC pelo Driver L298N

É simples controlar a velocidade do motor DC gerando um sinal PWM para o pino ENA/ENB do L298N. Podemos fazer isso:

  • Conectando um pino de saída digital do ESP32 ao pino ENA/ENB do L298N
  • Criando um sinal PWM para o pino ENA/ENB usando a função analogWrite(). Este sinal PWM passa pelo Driver L298N e tem a corrente e a tensão amplificadas antes de ir para o motor DC
analogWrite(PIN_ENA, speed); // control motor A analogWrite(PIN_ENB, speed); // control motor B

O speed é um valor entre 0 e 255. Se for 255, o motor roda na velocidade máxima. Se for 0, o motor para.

Como Controlar a Direção do Motor DC pelo Driver L298N

A direção do motor DC A pode ser controlada pelos pinos IN1 e IN2. A tabela a seguir mostra a relação entre a direção do motor e o sinal nos pinos IN1 e IN2.

Pino IN1 Pino IN2 Direção
HIGH LOW O Motor DC A gira no sentido horário
LOW HIGH O Motor DC A gira no sentido anti-horário
HIGH HIGH O Motor DC A para
LOW LOW O Motor DC A para

Da mesma forma, a tabela abaixo é para o motor DC B

Pino IN3 Pino IN4 Direção
HIGH LOW O Motor DC B gira no sentido horário
LOW HIGH O Motor DC B gira no sentido anti-horário
HIGH HIGH O Motor DC B para
LOW LOW O Motor DC B para

Vamos aprender como programar para controlá-lo. Vamos usar o motor A como exemplo. O motor B é parecido.

  • Controlando a direção do motor A para o sentido horário
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW);
  • Controlando a direção do motor A para o sentido anti-horário
digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH);

※ Nota:

A direção do motor DC fica invertida se a ligação entre o motor DC e o driver L298N estiver na ordem inversa. Nesse caso, troque os pinos OUT1 e OUT2.

Como Parar o Motor DC

Existem duas maneiras de parar um motor DC

  • Controlando a velocidade para 0
analogWrite(PIN_ENA, 0);
  • Controlando os pinos IN1 e IN2 para o mesmo nível, LOW ou HIGH
digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, HIGH);

Ou:

digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW);

Como controlar um motor DC usando o driver L298N.

Diagrama de Ligação

Há três jumpers no módulo L298N. Remova todos eles antes de fazer a ligação.

The wiring diagram between Arduino Nano ESP32 and DC Motor L298N Driver

This image is created using Fritzing. Click to enlarge image

Código Arduino Nano ESP32

Veja o código abaixo, que faz as seguintes coisas, uma por uma:

  • O Arduino Nano ESP32 controla a velocidade do motor DC de forma crescente.
  • O Arduino Nano ESP32 inverte a direção do motor DC
  • O Arduino Nano ESP32 controla a velocidade do motor DC de forma decrescente.
  • O Arduino Nano ESP32 para o motor DC
/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-dc-motor */ #define PIN_ENA D5 // The Arduino Nano ESP32 pin connected to the EN1 pin L298N #define PIN_IN1 D4 // The Arduino Nano ESP32 pin connected to the IN1 pin L298N #define PIN_IN2 D3 // The Arduino Nano ESP32 pin connected to the IN2 pin L298N // The setup function runs once on reset or power-up void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // The loop function repeats indefinitely void loop() { digitalWrite(PIN_IN1, HIGH); // control the motor's direction in clockwise digitalWrite(PIN_IN2, LOW); // control the motor's direction in clockwise for (int speed = 0; speed <= 255; speed++) { analogWrite(PIN_ENA, speed); // speed up delay(10); } delay(2000); // rotate at maximum speed 2 seconds in clockwise direction // change direction digitalWrite(PIN_IN1, LOW); // control the motor's direction in anti-clockwise digitalWrite(PIN_IN2, HIGH); // control the motor's direction in anti-clockwise delay(2000); // rotate at maximum speed for 2 seconds in anti-clockwise direction for (int speed = 255; speed >= 0; speed--) { analogWrite(PIN_ENA, speed); // speed down delay(10); } delay(2000); // stop motor 2 second }

Passos Rápidos

  • Se esta é a primeira vez que você usa o Arduino Nano ESP32, veja como configurar o ambiente para o Arduino Nano ESP32 no Arduino IDE.
  • Remova os três jumpers do módulo L298N.
  • Copie o código acima e cole no Arduino IDE.
  • Compile e faça upload do código para a placa Arduino Nano ESP32 clicando no botão Upload no Arduino IDE
  • Observe o motor DC, você verá:
    • O motor DC acelera e gira na velocidade máxima durante 2 segundos
    • A direção do motor DC é invertida
    • O motor DC gira no sentido inverso na velocidade máxima durante 2 segundos
    • O motor DC desacelera
    • O motor DC para por 2 segundos
  • O processo acima se repete infinitamente.

※ Nota:

Este tutorial mostra como controlar a velocidade do motor DC de forma relativa. Para controlar a velocidade absoluta (rotações por segundo), é preciso usar um controlador PID e o feedback de um encoder.

Como Controlar dois Motores DC usando o Driver L298N

(em breve)

Vídeo

Referências da Linguagem

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