Arduino Nano ESP32 - Driver de Motor DC DRV8833
Neste guia, vamos acionar pequenos motores DC com o Arduino Nano ESP32 por meio de um módulo driver de motor DRV8833. O Nano ESP32 só fornece sinais de 3.3V, e o DRV8833 os aceita como estão, então nenhum conversor de nível é necessário. Em detalhes, vamos aprender:
- O que o módulo DRV8833 faz e o que significa cada um de seus pinos.
- Como ligar um motor DC e depois mudar sua velocidade e seu sentido pelo código.
- Como ligar dois motores DC e movê-los como as rodas de um carrinho robô.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
※ Nota:
Na Parte 1 você só precisa de um motor DC. O segundo motor é usado na Parte 2.
Sobre o Driver de Motor DRV8833
Um pino GPIO do Arduino Nano ESP32 consegue fornecer apenas alguns miliamperes, muito pouco para girar um motor. O DRV8833 da Texas Instruments fica no meio do caminho: ele tem duas pontes H, uma para cada motor, e chaveia a corrente do motor a partir de uma fonte externa com base nos sinais que recebe do Nano ESP32. Como usa saídas MOSFET, ele perde muito menos tensão e esquenta menos do que o antigo L298N, o que o torna uma boa combinação para robôs a bateria de 3V a 9V. Ele também pode acionar um pequeno motor de passo bipolar, mas este guia cobre apenas motores DC.

Principais características:
| DRV8833 | |
|---|---|
| Alimentação do motor (pino VCC) | 2.7V a 10.8V |
| Sinais lógicos | 3.3V ou 5V (não precisa de alimentação lógica separada) |
| Corrente de saída | cerca de 1.5A RMS por canal, 2A de pico com boa refrigeração |
| Canais | 2 (dois motores DC), podem ser ligados em paralelo para cerca de 3A em um motor |
| Frequência PWM | até 50kHz |
| Proteção | subtensão, sobrecorrente, sobretemperatura |
Pinagem
Os rótulos variam entre os fabricantes. Algumas placas imprimem IN1/IN2/OUT1, outras imprimem AIN1/AIN2/AOUT1, SLP ou FLT. A função de cada pino é a mesma:
- Pinos IN1, IN2: controlam o motor A. Conecte a dois pinos PWM do Arduino Nano ESP32.
- Pinos IN3, IN4: controlam o motor B. Conecte a mais dois pinos PWM.
- Pinos OUT1, OUT2: conecte aos dois fios do motor A.
- Pinos OUT3, OUT4: conecte aos dois fios do motor B.
- Pino VCC: conecte ao + da fonte de alimentação do motor (2.7V a 10.8V).
- Pino GND: conecte ao - da fonte de alimentação do motor E ao GND do Arduino Nano ESP32.
- Pino EEP (sleep): conecte a 3.3V para ligar o driver. Se este pino estiver em LOW, o chip dorme e os motores não se movem.
- Pino ULT (fault): vai para LOW quando o chip encontra um problema (sobrecorrente, superaquecimento, tensão baixa). É opcional, você pode deixá-lo desconectado.
Como o DRV8833 Controla um Motor
Diferente do L298N, o DRV8833 não tem pino de velocidade ENA/ENB. Cada motor é controlado apenas por suas duas entradas. A tabela mostra o que acontece no motor A (o motor B funciona igual com IN3 e IN4):
| IN1 | IN2 | Motor A |
|---|---|---|
| LOW | LOW | Roda livre (o motor fica solto e desacelera sozinho) |
| HIGH | LOW | Para frente |
| LOW | HIGH | Para trás |
| HIGH | HIGH | Freio (o motor para rápido) |
Para mudar a velocidade, envie um sinal PWM para uma entrada e mantenha a outra em LOW:
- Para frente com velocidade: PWM em IN1, IN2 = LOW.
- Para trás com velocidade: IN1 = LOW, PWM em IN2.
É por isso que os quatro pinos IN devem ir para pinos com capacidade PWM. No Arduino Nano ESP32, todo pino digital pode gerar PWM, então usamos D10, D9, D6 e D5.
※ Nota:
Nunca alimente um motor pelo pino 3.3V ou 5V do Arduino Nano ESP32. Use uma fonte externa para o pino VCC do DRV8833 e conecte todos os GNDs juntos. Sem um GND compartilhado, o driver não consegue ler os sinais de controle.
Se você quiser comparar, o tutorial Arduino Nano ESP32 - Motor DC faz o mesmo trabalho com o driver L298N, que é maior.
PARTE 1: Controlar um Motor DC com o DRV8833
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
| Módulo DRV8833 | Arduino Nano ESP32 / Outros |
|---|---|
| IN1 | → D10 |
| IN2 | → D9 |
| EEP | → 3V3 |
| GND | → GND (e - do adaptador de 5V) |
| VCC | → + do adaptador de 5V (via DC power jack) |
| OUT1, OUT2 | → os dois fios do motor DC |
Como Programar
- Defina os dois pinos de controle como saídas.
- Gire para frente em uma velocidade escolhida (0 a 255).
- Gire para trás em uma velocidade escolhida.
- Freie rapidamente colocando as duas entradas em HIGH, ou deixe em roda livre colocando as duas em LOW.
※ Nota:
No Arduino Nano ESP32, depois que um pino é usado com analogWrite(), ele permanece no modo PWM. Por isso o código escreve 0 para LOW e 255 para HIGH com analogWrite() em vez de misturar digitalWrite().
Código Arduino Nano ESP32 - Um Motor DC
O sketch abaixo acelera o motor devagar, mantém a velocidade máxima, deixa-o em roda livre, o faz girar para trás e depois o freia. Cada etapa é impressa no Serial Monitor.
Passos Rápidos
Para começar com o Arduino Nano ESP32, siga estes passos:
- Se você é novo no Arduino Nano ESP32, consulte o tutorial sobre como configurar o ambiente para o Arduino Nano ESP32 na Arduino IDE.
- Ligue o DRV8833, o motor e o adaptador de 5V como mostrado acima. Confira duas vezes se o EEP vai para o 3V3.
- Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
- Copie o código acima e cole-o na Arduino IDE. Nenhuma biblioteca extra é necessária.
- Clique no botão Upload para enviar o código ao Arduino Nano ESP32.
- Conecte o adaptador de 5V e depois abra o Serial Monitor.
- Observe o motor: ele acelera, gira rápido, desliza até parar, gira para o outro lado e depois para bruscamente.
※ Nota:
Se "Forward" faz o motor girar no sentido errado, basta trocar os dois fios do motor em OUT1 e OUT2. Se o motor não se move de jeito nenhum, verifique primeiro o pino EEP.
PARTE 2: Controlar Dois Motores DC com o DRV8833
Um DRV8833 tem espaço para dois motores, que é exatamente o que um carrinho robô de duas rodas precisa. O motor A é a roda esquerda e o motor B é a roda direita. Para virar, uma roda vai para frente enquanto a outra vai para trás.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
| Módulo DRV8833 | Arduino Nano ESP32 / Outros |
|---|---|
| IN1 | → D10 |
| IN2 | → D9 |
| IN3 | → D6 |
| IN4 | → D5 |
| EEP | → 3V3 |
| GND | → GND (e - do adaptador de 5V) |
| VCC | → + do adaptador de 5V (via DC power jack) |
| OUT1, OUT2 | → motor esquerdo (motor A) |
| OUT3, OUT4 | → motor direito (motor B) |
Código Arduino Nano ESP32 - Dois Motores DC
O código tem uma pequena função auxiliar para cada motor: motorA(speed) e motorB(speed). A velocidade vai de -255 a 255. Um número positivo significa para frente, um número negativo significa para trás, e 0 deixa o motor em roda livre. Com essas duas funções auxiliares, o carrinho anda para frente, anda para trás, vira à esquerda, vira à direita e para.
Passos Rápidos
- Adicione o segundo motor e os fios IN3/IN4 como mostrado no diagrama.
- Copie o código acima e cole-o na Arduino IDE.
- Clique no botão Upload para enviar o código ao Arduino Nano ESP32.
- Levante o carrinho (ou segure os motores) para que as rodas possam girar livremente e depois conecte o adaptador de 5V.
- Abra o Serial Monitor e compare a ação impressa com o que as rodas fazem.
※ Nota:
Se o carrinho vira quando deveria ir reto, um motor está ligado ao contrário. Troque os dois fios desse motor nos pinos OUT dele.