Controle de motor CC com o L298N: velocidade e sentido com Arduino
Como funciona o driver de motor L298N? A ideia da ponte H, os pinos ENA, IN1 e IN2, o jumper de 5V e a ligação da alimentação, velocidade com PWM, troca de sentido, código de carrinho robô com dois motores e uso no ESP32 e no Pico.
Os motores CC são os motores mais comuns: giram ventiladores, rodas de robôs, bombas d'água e carrinhos de brinquedo. Mas você não pode ligar um motor direto em um pino do Arduino: ele puxa muito mais corrente do que o pino consegue fornecer, e mudar o sentido de giro exige inverter a polaridade. O driver de motor L298N resolve os dois problemas de uma vez: ele gira dois motores CC para a frente e para trás de forma independente e define a velocidade deles com PWM. Você o encontra em quase todo projeto de carrinho robô.

Como funciona um motor CC e por que ele precisa de um driver?
Aplique uma tensão nos dois terminais de um motor CC e ele gira; inverta a polaridade e ele gira para o outro lado; diminua a tensão e ele desacelera. Até um pequeno motor de brinquedo puxa centenas de miliampères enquanto gira, e mais de 1 ampère na partida ou travado. E, como o motor é uma bobina, ele gera picos de tensão reversa quando desliga. Um pino do Arduino fornece no máximo 20–40 mA e não é protegido contra esses picos; ligar o motor direto queima o pino e pode até danificar a placa.
O que é uma ponte H?
O jeito de girar um motor nos dois sentidos é uma ponte H: quatro chaves eletrônicas dispostas em volta do motor no formato da letra "H". Quando duas chaves em diagonal fecham, a corrente passa pelo motor em um sentido; quando o outro par em diagonal fecha, ela passa no sentido contrário. O chip L298N tem duas pontes H dessas, então ele controla dois motores de forma independente. Cada motor usa dois pinos de sentido (IN1 e IN2) e um pino de velocidade (ENA):
| IN1 | IN2 | ENA | O que o motor faz |
|---|---|---|---|
| HIGH | LOW | HIGH ou PWM | Gira para a frente |
| LOW | HIGH | HIGH ou PWM | Gira para trás |
| HIGH | HIGH | HIGH | Freia e para rápido |
| Qualquer | Qualquer | LOW | Gira livre e desacelera sozinho |
Especificações do L298N
| Característica | Valor |
|---|---|
| Tensão de alimentação dos motores | 5–35 V (máx. 12 V com o jumper de 5V colocado) |
| Corrente por canal | 2 A contínuos, 3 A de pico |
| Tensão lógica | 5 V (as entradas também reconhecem um sinal de 3,3 V) |
| Queda de tensão | Cerca de 1,5–3 V (o motor recebe isso a menos) |
| Motores que aciona | 2 motores CC ou 1 motor de passo bipolar |
| Proteção | Diodos de roda livre na placa |

Pinos do L298N e ligação da alimentação
| Pino ou terminal | Função |
|---|---|
| OUT1, OUT2 | Os dois fios do motor A |
| OUT3, OUT4 | Os dois fios do motor B |
| 12V (VS) | Alimentação dos motores: positivo da bateria ou do adaptador |
| GND | Terra comum: o negativo da bateria e o GND do Arduino vão aqui |
| 5V | Saída de 5 V com o jumper de 5V colocado, entrada da alimentação lógica com ele retirado |
| ENA, ENB | Entradas de velocidade (PWM); com os jumpers colocados, o motor sempre gira na velocidade máxima |
| IN1, IN2, IN3, IN4 | Entradas de sentido |
Girando um motor para a frente, para trás e em velocidades diferentes
Primeiro retire o jumper do ENA e ligue o ENA no pino D9 do Arduino, o IN1 no D8 e o IN2 no D7. Ligue o motor no OUT1 e no OUT2, e um pacote de 2 × células 18650 (7,4 V) ou 4–6 pilhas AA nos terminais 12V e GND; leve o GND também até o GND do Arduino. A função motor() abaixo recebe um valor de -255 a 255: positivo significa para a frente, negativo para trás e zero freio. A ideia por trás do controle de velocidade está em O que é PWM?
1const int ENA = 9; // hız (PWM) / speed (PWM)
2const int IN1 = 8;
3const int IN2 = 7;
4
5void motor(int speed) { // -255 … 255
6 if (speed == 0) { // fren / brake
7 digitalWrite(IN1, HIGH);
8 digitalWrite(IN2, HIGH);
9 analogWrite(ENA, 255);
10 return;
11 }
12 digitalWrite(IN1, speed > 0); // ileri ya da geri / forward or backward
13 digitalWrite(IN2, speed < 0);
14 analogWrite(ENA, abs(speed));
15}
16
17void setup() {
18 pinMode(ENA, OUTPUT);
19 pinMode(IN1, OUTPUT);
20 pinMode(IN2, OUTPUT);
21}
22
23void loop() {
24 motor(200); delay(2000); // ileri / forward
25 motor(0); delay(500); // dur / stop
26 motor(-120); delay(2000); // yavaşça geri / slowly backward
27 motor(0); delay(500);
28}Um carrinho robô com dois motores: frente, trás, esquerda e direita
Os carrinhos robô não têm direção; eles fazem curvas girando as duas rodas com velocidades e sentidos diferentes. Se os dois motores giram para a frente, o carrinho anda reto; se o motor esquerdo gira para trás e o direito para a frente, o carrinho gira para a esquerda no próprio lugar. A função drive() abaixo recebe a velocidade de cada motor separadamente, de -255 a 255:
1// Sol motor / left motor: ENA=9, IN1=8, IN2=7 — Sağ motor / right motor: ENB=10, IN3=5, IN4=4
2const int ENA = 9, IN1 = 8, IN2 = 7;
3const int ENB = 10, IN3 = 5, IN4 = 4;
4
5void drive(int left, int right) { // her biri -255 … 255 / each -255 … 255
6 digitalWrite(IN1, left >= 0); digitalWrite(IN2, left < 0);
7 digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
8 analogWrite(ENA, abs(left));
9 analogWrite(ENB, abs(right));
10}
11
12void setup() {
13 int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
14 for (int p : pins) pinMode(p, OUTPUT);
15}
16
17void loop() {
18 drive(200, 200); delay(1500); // ileri / forward
19 drive(-200, 200); delay(600); // sola dön / turn left
20 drive(200, -200); delay(600); // sağa dön / turn right
21 drive(-180, -180); delay(1000); // geri / backward
22 drive(0, 0); delay(1000); // dur / stop
23}Coloque um sensor de distância na frente do carrinho e você tem um robô que para e vira quando vê um obstáculo; para a parte do sensor, veja Sensor de distância HC-SR04. Se você for usar a biblioteca Servo em um Uno, cuidado: ela desativa o PWM nos pinos 9 e 10, então passe o ENA e o ENB para os pinos 5 e 6.
L298N com o ESP32 e o Raspberry Pi Pico
As entradas do L298N tratam qualquer coisa acima de cerca de 2,3 V como HIGH, então elas funcionam direto com os sinais de 3,3 V do ESP32 e do Pico; a alimentação lógica da placa ainda deve ser de 5 V. No ESP32, você pode usar o mesmo código do Arduino com pinos que tenham PWM para o ENA e o ENB (por exemplo, GPIO 25 e 26); os pinos 34–39 não têm saída. No Pico com MicroPython, controlar um motor fica assim:
1from machine import Pin, PWM
2import time
3
4ena = PWM(Pin(15), freq=1000)
5in1 = Pin(14, Pin.OUT)
6in2 = Pin(13, Pin.OUT)
7
8def motor(speed): # -100 … 100
9 in1.value(speed > 0)
10 in2.value(speed < 0)
11 ena.duty_u16(int(abs(speed) * 655.35))
12
13while True:
14 motor(80); time.sleep(2) # ileri / forward
15 motor(0); time.sleep(0.5) # dur / stop
16 motor(-50); time.sleep(2) # geri / backwardL298N, TB6612FNG ou MOSFET?
| Driver | Vantagens | Desvantagens | Ideal para |
|---|---|---|---|
| L298N | Barato, robusto, 2 A por canal | Perde cerca de 2 V, esquenta, é grande | Robôs de hobby, motores de 6–12 V |
| TB6612FNG | Pequeno, eficiente (MOSFET), compatível com 3,3 V | 1,2 A contínuos, máx. 13,5 V | Robôs pequenos com bateria |
| L9110S | Muito pequeno e barato | Cerca de 800 mA por canal | Minimotores |
| Um único MOSFET (como o IRLZ44N) | Muito eficiente, corrente alta | Um só sentido | Ventiladores, bombas, fitas de LED |
Se você só precisa ligar e desligar um motor, um relé resolve, mas ele não ajusta a velocidade; comparamos os dois em O que é módulo relé? Para escolher um transistor ou MOSFET adequado, dê uma olhada na ferramenta Transistores.
Ideias de projetos com L298N
- Robô que desvia de obstáculos: um carrinho que vê obstáculos com um HC-SR04 e muda de direção.
- Carrinho controlado por Bluetooth: um robô pilotado por um HC-05 com um app no celular.
- Carrinho controlado por joystick: transforme os dois eixos de um joystick nas velocidades de dois motores; detalhes em Como usar um módulo joystick.
- Robô seguidor de linha: um carrinho que segue uma linha preta no chão com sensores infravermelhos.
- Cortina automática: um sistema motorizado que abre a cortina quando a luz chega de manhã e fecha à noite.
- Esteira transportadora: uma pequena esteira com a velocidade ajustada por um potenciômetro.
Erros comuns e como resolvê-los
- O LED da placa acende, mas o motor não gira: os terras não estão ligados entre si, o jumper do ENA foi retirado mas o pino não está ligado, ou o valor de PWM está baixo demais.
- O Arduino reinicia quando o motor gira: o motor e o Arduino dividem uma fonte fraca; alimente-os separadamente e solde um capacitor de 100 nF nos terminais do motor.
- O motor fica muito lento e fraco: o L298N engole cerca de 2 V; aumente a tensão da bateria (por exemplo, 2 × 18650) ou use um driver mais eficiente.
- O motor só gira para um lado: um dos pinos IN não está ligado, ou o código escreve os mesmos valores para os dois sentidos.
- O L298N esquenta muito: o motor puxa corrente demais; deixe o dissipador livre e, se precisar, escolha um driver mais robusto.
- Usar uma bateria de 9 V (PP3): ela não fornece corrente alta e descarrega rápido; use um pacote recarregável de 18650 ou de pilhas AA.
Depois que você aprende a controlar motores com o L298N, a porta para os projetos de robôs se abre. No app BlueGrays você encontra projetos de carrinho com L298N controlado por Bluetooth e de robô que desvia de obstáculos passo a passo, com esquemas do circuito e código.
Perguntas frequentes
Quantos motores o L298N consegue acionar?
Como o L298N tem duas pontes H, ele aciona dois motores CC de forma independente, para a frente e para trás e em velocidades diferentes. Usando os dois canais juntos, ele também aciona um motor de passo bipolar.
Para que serve o jumper de 5V do L298N?
Com o jumper colocado, o regulador da placa gera 5 V a partir da alimentação dos motores para alimentar o chip; você também pode usar esses 5 V para alimentar o Arduino. Se a alimentação dos motores passar de 12 V, o regulador pode superaquecer, então retire o jumper e forneça 5 V separados no pino 5V.
Que bateria devo ligar no L298N?
Para motores pequenos de 6–9 V, 2 células de lítio 18650 (7,4 V) ou 6 pilhas AA (9 V) são uma boa escolha. Como o L298N perde cerca de 2 V, escolha uma fonte um pouco acima da tensão nominal do motor. Baterias de 9 V (PP3) não fornecem corrente suficiente para acionar motores.
Por que retirar o jumper do ENA?
Com o jumper do ENA colocado, o motor sempre gira na velocidade máxima. Para ajustar a velocidade, retire o jumper e ligue o pino ENA em um dos pinos PWM do Arduino; aí você define a velocidade de 0 a 255 com analogWrite.
Por que meu motor não gira em velocidades baixas?
Um motor precisa de uma tensão mínima para vencer o atrito e começar a se mover, e a queda de tensão do L298N dificulta isso. Normalmente, quando o valor de PWM cai abaixo de 80–120, o motor só zumbe. Defina uma velocidade mínima no código ou use uma fonte de tensão mais alta.
O L298N funciona com o ESP32 e o Raspberry Pi Pico?
Sim. Os pinos de entrada do L298N reconhecem um sinal de 3,3 V como HIGH, então ele pode ser ligado direto no ESP32 e no Pico. O lado lógico da placa ainda deve ser alimentado com 5 V, e todos os terras precisam estar ligados entre si.
Projetos para montar depois desta leitura
Ver todos os projetos
Carrinho controlado por Bluetooth com L298N
Transforme seu celular em um controle remoto e dirija seu próprio carrinho robô. O Arduino recebe os comandos de um aplicativo de controle remoto no celular por meio de um módulo Bluetooth e aciona as

Robô que desvia de obstáculos
Que tal construir um veículo inteligente que encontra seu próprio caminho? O robô que desvia de obstáculos monitora o ambiente constantemente com o sensor ultrassônico na parte da frente. Ao encontrar

Controle de servos com joystick
Controle dois motores com um joystick, como ao girar uma câmera de segurança. Empurre a alavanca para os lados e o servo motor inferior gira lentamente; mova para cima ou para baixo e o servo superior

Servo motor com ESP32 (controle por potenciômetro)
Neste projeto, controlamos um servo motor SG90 com um potenciômetro. Ajustamos o ângulo do servo mapeando o valor analógico lido do potenciômetro para a faixa de 0 a 180 graus. A biblioteca ESP32Servo gera sinais para o servo nos GPIOs do ESP32 adequados e capazes de operar como saída; este projeto usa o GPIO 18. Esse é um método básico de controle para braços robóticos, estabilizadores de câmera e mecanismos de portas automáticas.

Controle de LEDs com joystick
Empurre a alavanca do joystick até o fim em qualquer direção e o LED correspondente acende: são quatro cores diferentes para direita, esquerda, cima e baixo. Ao soltar a alavanca, ela volta ao centro

Medidor ultrassônico de distância HC-SR04 com ESP32
O sensor ultrassônico HC-SR04 calcula a distância medindo o tempo que a onda sonora emitida leva para atingir um objeto e retornar (tempo de voo). Neste projeto, enviaremos um pulso de 10 microssegundos do ESP32 ao pino TRIG do sensor e leremos a duração do eco no pino ECHO com pulseIn(). Exibiremos a distância calculada em centímetros em um LCD I2C 16x2. Como o HC-SR04 opera a 5V, é preciso usar um divisor de tensão no pino ECHO; caso contrário, o GPIO de 3,3V do ESP32 será danificado.

Sensor de estacionamento com ESP32 (HC-SR04 + barra de 5 LEDs + buzzer + OLED)
A versão com ESP32 do sensor de estacionamento de carro! Usamos o sensor ultrassônico HC-SR04 para medir a distância até o objeto à sua frente. Conforme a distância diminui, a barra de 5 LEDs vai se preenchendo (verde → amarelo → vermelho) e o intervalo entre os bipes do buzzer diminui. Quando o objeto chega muito perto (menos de 10 cm), o alarme soa continuamente e todos os LEDs acendem.

Medição de distância com HC-SR04 (Monitor Serial)
O sensor HC-SR04 funciona como um morcego que se orienta no escuro: emite um som que você não consegue ouvir, escuta o eco e mede a distância até o objeto à sua frente. O Arduino escreve essa distânci
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

