ESP32 - Motor de Passo 28BYJ-48 com Driver ULN2003
Neste tutorial, vamos abordar os seguintes tópicos:
- Controlar um único motor de passo 28BYJ-48 com um ESP32 e o driver ULN2003.
- Gerenciar vários motores de passo 28BYJ-48 usando um ESP32 e o driver ULN2003.

Os motores de passo se destacam no controle preciso de posição, pois dividem uma revolução completa em "passos" discretos. Esses motores são usados em uma grande variedade de dispositivos, incluindo impressoras, impressoras 3D, máquinas CNC e sistemas de automação industrial.
Uma forma barata de entender os motores de passo é experimentar os motores de passo 28BYJ-48. Normalmente, esses motores vêm junto com placas driver baseadas no ULN2003, o que simplifica bastante o uso deles.
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 de Passo 28BYJ-48
Segundo o datasheet, o motor 28BYJ-48, quando opera no modo de passo completo, se move em incrementos de 11,25 graus, resultando em 32 passos por revolução completa (calculado assim: 360°/11,25° = 32).
Além disso, o motor incorpora um conjunto de engrenagens de redução de 1/64, o que aumenta efetivamente sua contagem de passos para 32 x 64, resultando em 2048 passos por revolução. Cada um desses 2048 passos corresponde a uma rotação de 360°/2048, que é aproximadamente 0,1758 grau por passo.
Conclusão: se o motor der 2048 passos (no modo de passo completo), o motor gira uma revolução
Pinagem
O motor de passo 28BYJ-48 tem 5 pinos. Não precisamos nos preocupar com os detalhes desses pinos. Só precisamos encaixá-lo no conector do driver de motor ULN2003.

Sobre o Módulo Driver de Motor de Passo ULN2003
O ULN2003 se destaca como um módulo driver de motor muito usado para motores de passo. As principais características do módulo incluem:
- Quatro LEDs que acendem para indicar a atividade das quatro linhas de entrada de controle, refletindo o estado atual de passo do motor. Esses LEDs não só têm uma função prática como também dão um toque visual ao processo de passo.
- Um jumper ON/OFF integrado ao módulo, que permite isolar a alimentação do motor de passo conectado. Esse recurso oferece uma forma prática de controlar a alimentação do motor, permitindo um gerenciamento eficiente de energia.
Pinagem do ULN2003

O módulo ULN2003 inclui 6 pinos e um conector fêmea:
- Pino IN1: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
- Pino IN2: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
- Pino IN3: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
- Pino IN4: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
- Pino GND: é um pino de terra comum. DEVE ser conectado aos dois GNDs: o do ESP32 e o da fonte de alimentação externa.
- Pino VDD: fornece energia para o motor. Conecte-o à fonte de alimentação externa.
- Conector do Motor: é onde o motor se encaixa.
※ Nota:
Ao alimentar motores de passo, é importante seguir estas orientações:
- Garanta que a tensão da fonte de alimentação externa corresponda aos requisitos de tensão do motor de passo. Por exemplo, se o seu motor de passo funciona com 12V DC, é fundamental usar uma fonte de 12V. No caso do motor de passo 28BYJ-48, que funciona com 5V DC, é indispensável usar uma fonte de 5V.
- É importante notar que, mesmo que um motor de passo seja projetado para funcionar com uma fonte de 5V, NÃO conecte o pino VDD ao pino 5V do ESP32. Em vez disso, ligue o pino VDD a uma fonte de 5V externa. Essa precaução é essencial porque motores de passo podem consumir bastante energia, o que pode exceder a capacidade da alimentação do ESP32, causando possíveis problemas ou danos.
Diagrama de 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.
Observe que não precisamos nos preocupar com a cor dos fios do motor de passo. Só precisamos encaixar o conector macho (do motor de passo 28BYJ-48) no conector fêmea (do driver ULN2003)
Como Programar para controlar um motor de passo
Para controlar um motor de passo, há três métodos principais:
- Passo Completo (Full-Step)
- Meio Passo (Half-Step)
- Micropasso (Micro-Step)
Para aplicações básicas, o método de passo completo costuma ser suficiente. No entanto, explicações detalhadas dos três métodos serão apresentadas na parte final deste tutorial. Vale notar que programar esses métodos pode ser complexo. A boa notícia é que existem muitas bibliotecas disponíveis que cuidam dessa complexidade para nós. Só precisamos usar a biblioteca apropriada, o que simplifica o controle de motores de passo nos nossos projetos.
O Arduino IDE inclui uma biblioteca Stepper integrada, mas aconselhamos não usá-la pelos seguintes motivos:
- Natureza Bloqueante: Esta biblioteca opera de forma bloqueante, o que significa que ela monopoliza os recursos do ESP32, impedindo-o de executar outras tarefas enquanto controla o motor de passo.
- Funcionalidade Limitada: A biblioteca Stepper integrada pode não oferecer todas as funções e recursos de que o seu projeto precisa.
Em vez disso, recomendamos usar a biblioteca AccelStepper. Esta biblioteca oferece várias vantagens, incluindo:
- Aceleração e Desaceleração: Ela suporta aceleração e desaceleração suaves, permitindo um controle mais preciso.
- Acionamento em Passo Completo e Meio Passo: Você pode escolher entre os modos de acionamento em passo completo e meio passo para o seu motor de passo.
- Vários Motores de Passo Simultâneos: O AccelStepper permite controlar vários motores de passo ao mesmo tempo, com cada um se movendo de forma independente e concorrente.
No entanto, é importante notar que a biblioteca tem uma desvantagem: ela não suporta acionamento em micropasso.
Código ESP32
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente do ESP32 no Arduino IDE.
- Faça a ligação como na imagem acima.
- Conecte a placa ESP32 ao seu PC por um cabo micro USB
- Abra o Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Clique no ícone Libraries na barra à esquerda do Arduino IDE.
- Pesquise “AccelStepper” e encontre a biblioteca AccelStepper de Mike McCauley
- Clique no botão Install para instalar a biblioteca AccelStepper.

- Copie o código acima e abra no Arduino IDE
- Clique no botão Upload no Arduino IDE para carregar o código no ESP32
- Veja o motor girando. Ele deve:
- Girar uma revolução no sentido horário e, em seguida,
- Girar duas revoluções no sentido anti-horário e, em seguida,
- Girar duas revoluções no sentido horário.
- Veja o resultado no Serial Monitor
Esse processo se repete infinitamente.
Como controlar vários motores de passo 28BYJ-48
Vamos aprender como controlar dois motores de passo de forma independente ao mesmo tempo.
Diagrama de Ligação para dois motores de passo 28BYJ-48

This image is created using Fritzing. Click to enlarge image