Como Controlar a Velocidade de um Motor DC com um Módulo ESP32 e L298N
Controlar motores DC pode ser uma tarefa simples com os componentes e o entendimento certos. Neste tutorial, vamos explorar como controlar dois motores DC usando o microcontrolador ESP32 e o módulo driver de motor L298N. Ao final deste guia, você será capaz de ajustar a velocidade e a direção dos seus motores com base em sinais PWM do ESP32, permitindo aplicações versáteis em robótica e automação.
O vídeo que acompanha este tutorial fornece uma demonstração visual de todo o processo, incluindo a fiação e a programação (no vídeo em :00).
Hardware Explicado
Para alcançar o controle do motor, usaremos o ESP32 e o módulo driver de motor L298N. O ESP32 é um microcontrolador poderoso com capacidades de Wi-Fi e Bluetooth, tornando-o ideal para projetos de IoT. O L298N é um driver de motor em ponte H que nos permite controlar a direção e a velocidade dos motores usando sinais PWM. O módulo L298N possui dois circuitos em ponte H, o que significa que podemos controlar dois motores de forma independente. Cada ponte H permite o controle da direção do motor (horário ou anti-horário) e da velocidade variando o sinal PWM. Conectando os pinos de habilitação e entrada do L298N ao ESP32, podemos manipular os motores de forma eficaz.
Detalhes da Ficha Técnica
| Fabricante | STMicroelectronics |
|---|---|
| Número da peça | L298N |
| Tensão de Lógica/IO | 5 V |
| Tensão de alimentação | 5-46 V (VS) |
| Corrente de saída (por canal) | 2 A max/canal (máx. abs.) |
| Corrente de pico (por canal) | 2,5 A |
| Orientação sobre a frequência de PWM | 1 kHz - 15 kHz |
| Limiares de lógica de entrada | 2,5 V (alto), 1,5 V (baixo) |
| Queda de tensão / RDS(on)/ saturação | 1,8 V a 2 A |
| Limites térmicos | 150 °C |
| Pacote | Multiwatt de 15 pinos |
| Notas / variantes | Driver de motor com ponte H dupla |
- Certifique-se de que a classificação de tensão do motor corresponda à tensão de alimentação do L298N.
- Use dissipadores de calor adequados para operação contínua em altas correntes.
- Conecte os componentes de terra para evitar referências flutuantes.
- Use uma frequência PWM adequada para a aplicação (1-15 kHz).
- Tenha cuidado com as classificações de corrente máxima para prevenir o superaquecimento.
- Teste a direção do motor antes de finalizar a fiação para evitar danos.
- Considere capacitores de desacoplamento na fonte de alimentação para estabilidade.
Instruções de fiação

Para conectar o L298N ao ESP32, comece ligando os dois motores DC aos terminais de saída do L298N. Conecte o Motor 1 aos terminais etiquetados comoOUT1eOUT2, e Motor 2 paraOUT3eOUT4. A polaridade dos motores não importa, pois o L298N cuidará da direção. Em seguida, conecte sua fonte de alimentação externa aoVMSeGNDterminais no L298N. Certifique-se de que a voltagem é apropriada para seus motores, tipicamente entre 5V e 46V. O5Vo terminal no L298N pode ser usado para alimentar o ESP32, se necessário, mas certifique-se de que os requisitos de corrente sejam atendidos. Para os pinos de controle, conecteENApara GPIO 19,IN1para GPIO 18, eIN2para o GPIO 5 para o Motor 1. Para o Motor 2, conecteIN3para GPIO 17,IN4para GPIO 16, eENBpara o GPIO 4. Finalmente, conecte os aterramentos do ESP32 e do L298N juntos para garantir uma referência comum.
Exemplos de Código e Passo a Passo
Os seguintes trechos de código ilustram como controlar os motores usando a biblioteca L298N projetada para o ESP32. A biblioteca simplifica o processo de envio de comandos para os motores. Primeiro, a biblioteca necessária é incluída e os parâmetros do motor são definidos:
#include
#define ENA 19
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENB 4
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);
Neste trecho, definimos os pinos de controle para ambos os motores. A instância da bibliotecaroboté criado, que será usado para controlar os motores durante todo o programa. Em seguida, configuramos a comunicação serial e inicializamos a instância do robô nasetup()função:
void setup() {
Serial.begin(115200);
robot.begin();
}
Isso inicializa a comunicação serial para depuração e prepara a biblioteca de controle do motor para operação. Por fim, a lógica de controle principal é colocada noloop()função, onde podemos girar os motores e ajustar sua velocidade:
void loop() {
robot.rotate(motor1, 80, CW); // run motor1 at 80% speed in CW direction
delay(3000); // wait for 3 seconds
robot.brake(1); // brake motor1
delay(2000); // wait for 2 seconds
}
Este trecho demonstra como girar o Motor 1 a 80% da velocidade em uma direção horária por três segundos antes de frear. O código completo inclui lógica adicional para o Motor 2 e variação de velocidades, que pode ser vista no programa completo carregado abaixo do artigo.
Demonstração / O Que Esperar
Ao ser executados, os motores devem responder aos sinais PWM enviados do ESP32. Você verá o Motor 1 girando no sentido horário a 80% da velocidade, seguido por uma ação de frenagem. O programa também inclui lógica para gerenciar variações de velocidade de forma gradual, que pode ser testada observando a aceleração do motor de 0% a 100% (no vídeo às 05:00). Armadilhas comuns incluem não conectar os aterramentos adequadamente, o que pode levar a um comportamento errático, e exceder as classificações de corrente do L298N, causando superaquecimento. Certifique-se de monitorar o comportamento do motor e ajustar os parâmetros conforme necessário.
Marcação de Vídeo
- 00:46 Introdução
- 04:07 Ligando ESP32 com L298N
- 06:10 Preparando o Arduino IDE para trabalhar com placas ESP32
- 08:15 Código Arduino explicado
- 15:00 Demonstração de controle de motor único
- 16:00 Demonstração de controle de 2 motores DC
- 17:00 Demonstração de Alimentação do ESP32 a partir do L298N e fonte de energia externa
Coisas que você pode precisar
-
Amazonas
-
eBay
Recursos e referências
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
robojax_ESP32_L298N_library
robojax_ESP32_L298N_library.zip0.18 MB
Arquivo Fritzing
-
ESP32-38Pin_Wide
ESP32-38Pin_Wide.fzpz0.03 MB -
L298N DC motor driver
L298N DC motor driver.fzpz0.11 MB