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.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor DC
Pinagem do Motor DC
Um Motor DC tem 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 energia 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 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

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