Arduino Nano ESP32 - Motor de Passo 28BYJ-48 e Driver ULN2003
Neste tutorial, vamos abordar os seguintes tópicos:
- Controlar um único motor de passo 28BYJ-48 com um Arduino Nano ESP32 e um driver ULN2003.
- Gerenciar vários motores de passo 28BYJ-48 usando um Arduino Nano ESP32 e um 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 ampla variedade de dispositivos, incluindo impressoras, impressoras 3D, máquinas CNC e sistemas de automação industrial.
Uma maneira econômica de entender os motores de passo é experimentar os motores de passo 28BYJ-48. Normalmente, esses motores vêm acompanhados de placas de driver baseadas no ULN2003, o que simplifica muito a sua utilização.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor de Passo 28BYJ-48
De acordo com 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 (conforme calculado: 360°/11.25° = 32).
Além disso, o motor incorpora um conjunto de engrenagens de redução de 1/64, aumentando 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 inclui 5 pinos. Não precisamos nos preocupar com os detalhes desses pinos. Basta conectá-lo ao 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. Os principais recursos do módulo incluem:
- Quatro LEDs que acendem para indicar a atividade das quatro linhas de entrada de controle, refletindo efetivamente o estado atual do passo do motor. Esses LEDs não têm apenas uma finalidade prática, mas também acrescentam um elemento visual ao processo de passos.
- Um jumper ON/OFF é integrado ao módulo, permitindo isolar a alimentação do motor de passo conectado. Esse recurso oferece um meio conveniente de controlar a fonte de 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 Arduino Nano ESP32.
- Pino IN2: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino Nano ESP32.
- Pino IN3: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino Nano ESP32.
- Pino IN4: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino Nano ESP32.
- Pino GND: é um pino de terra comum. Ele DEVE ser conectado aos dois GNDs: o do Arduino Nano ESP32 e o da fonte de alimentação externa.
- Pino VDD: fornece alimentação para o motor. Conecte-o à fonte de alimentação externa.
- Conector do Motor: é onde o motor é encaixado.
※ Nota:
Ao alimentar motores de passo, é importante seguir estas orientações:
- Certifique-se de 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 alimentação de 12V. No caso do motor de passo 28BYJ-48, que funciona com 5V DC, é indispensável empregar uma fonte de alimentação de 5V.
- É importante observar que, mesmo que um motor de passo seja projetado para funcionar com uma fonte de alimentação de 5V, NÃO conecte o pino VDD ao pino 5V do Arduino Nano ESP32. Em vez disso, ligue o pino VDD a uma fonte de 5V externa. Essa precaução é essencial porque os motores de passo podem consumir uma quantidade significativa de energia, que pode exceder a capacidade da fonte de alimentação do ESP32, causando possíveis problemas ou danos.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Observe que não precisamos nos preocupar com a cor dos fios do motor de passo. Basta 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
Quando se trata de controlar um motor de passo, existem três métodos principais:
- Passo Completo
- Meio Passo
- Micropasso
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 fornecidas na parte final deste tutorial. Vale destacar que a programação desses métodos pode ser complexa. A boa notícia é que existem muitas bibliotecas disponíveis que lidam com essa complexidade para nós. Tudo o que precisamos fazer é usar a biblioteca apropriada, simplificando o controle de motores de passo em nossos projetos.
O Arduino IDE inclui uma biblioteca Stepper embutida, mas aconselhamos não usá-la pelos seguintes motivos:
- Natureza Bloqueante: Essa 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 embutida pode não fornecer todas as funções e recursos de que você precisa para o seu projeto.
Em vez disso, recomendamos utilizar a biblioteca AccelStepper. Essa biblioteca oferece várias vantagens, incluindo:
- Aceleração e Desaceleração: Ela oferece suporte a aceleração e desaceleração suaves, permitindo um controle mais preciso.
- Acionamento em Passo Completo e em Meio Passo: Você pode escolher entre os modos de acionamento em passo completo e em meio passo para o seu motor de passo.
- Vários Motores de Passo Simultâneos: O AccelStepper permite controlar vários motores de passo simultaneamente, com cada motor se movendo de forma independente e concorrente.
No entanto, é importante observar que a biblioteca tem uma desvantagem: ela não oferece suporte ao acionamento em micropasso.
Código Arduino Nano ESP32
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 no Arduino IDE.
- Ligue os componentes de acordo com o diagrama fornecido.
- Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
- Abra o Arduino IDE no seu computador.
- Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
- Abra o Gerenciador de Bibliotecas clicando no ícone Library Manager na barra de navegação à esquerda do Arduino IDE
- Pesquise por “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 com o Arduino IDE
- Clique no botão Upload no Arduino IDE para fazer upload do código para o Arduino Nano ESP32
- Veja o motor girando. Ele deve:
- Girar uma revolução no sentido horário e, depois,
- Girar duas revoluções no sentido anti-horário e, depois,
- Girar duas revoluções no sentido horário.
- Veja o resultado no Serial Monitor
Esse processo é repetido 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