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.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor DC
Pinagem do Motor DC
Um Motor DC possui dois fios: Negativo(preto) e Positivo(vermelho)

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

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

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.

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
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
- Controlando a direção do motor A para o sentido anti-horário
※ 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
- Controlando os pinos IN1 e IN2 para o mesmo nível, LOW ou HIGH
Ou:
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.

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
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)