ESP32 - Motor DC

Este tutorial ensina como usar o 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 possui dois fios: Negativo(preto) e Positivo(vermelho)

Pinagem do Motor DC

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 alimentação e a velocidade/direção

Como controlar o motor DC

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:

Como controlar a velocidade do motor DC usando PWM

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

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

  • Proteger o ESP32 contra a tensão alta
  • Receber o sinal do ESP32 para inverter a polaridade da fonte de alimentação e controlar a direção do motor.
  • Amplificar o sinal PWM do ESP32 (corrente e tensão) para controlar a velocidade do motor
ESP32 controla motor DC

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.

Pinagem do Driver L298N

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

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

  • O primeiro motor (chamado de motor A) é controlado pelos pinos IN1, IN2, ENA, OUT1, OUT2.
  • O segundo motor (chamado de 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 no 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 no pino ENA/ENB usando a função analogWrite(). Este sinal PWM passa pelo Driver L298N, que amplifica a corrente e a tensão antes de chegar ao 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 gira 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 a programar para controlá-lo. Vamos usar o motor A como exemplo. O motor B é semelhante.

  • 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 em ordem inversa. Nesse caso, troque os pinos OUT1 e OUT2.

Como Parar o Motor DC

Existem duas formas 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

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

Diagrama de Ligação do Motor DC com ESP32 e Driver L298N

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Código ESP32

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

  • O ESP32 aumenta gradualmente a velocidade do motor DC.
  • O ESP32 inverte a direção do motor DC
  • O ESP32 diminui gradualmente a velocidade do motor DC.
  • O ESP32 para o motor DC
/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-dc-motor */ #define PIN_IN1 19 // ESP32 pin GPIO19 connected to the IN1 pin L298N #define PIN_IN2 18 // ESP32 pin GPIO18 connected to the IN2 pin L298N #define PIN_ENA 17 // ESP32 pin GPIO17 connected to the EN1 pin L298N // the setup function runs once when you press reset or power the board void setup() { // initialize digital pins as outputs. pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_ENA, OUTPUT); } // the loop function runs over and over again forever 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 ESP32, veja como configurar o ambiente para o ESP32 na Arduino IDE.
  • Remova os três jumpers do módulo L298N.
  • Copie o código acima e cole-o na Arduino IDE.
  • Compile e carregue o código na placa ESP32 clicando no botão Upload na 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 na direção inversa na velocidade máxima durante 2 segundos
    • O motor DC desacelera
    • O motor DC fica parado por 2 segundos
  • O processo acima se repete infinitamente.

※ Nota:

Este tutorial ensina como controlar a velocidade do motor DC de forma relativa. Para controlar a velocidade absoluta (rotações por segundo), é necessário usar um controlador PID e o retorno (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!