Arduino - Controlar Motor de Passo 28BYJ-48 usando o Driver ULN2003
Neste tutorial, vamos aprender:
- Como controlar um único motor de passo 28BYJ-48 usando o Arduino e o driver ULN2003
- Como controlar vários motores de passo 28BYJ-48 usando o Arduino e o driver ULN2003

Motores de passo são ótimos motores para controle de posição. Os motores de passo dividem uma revolução completa em um número de “passos” iguais. Eles são usados em muitos dispositivos, como impressoras, impressoras 3D, máquinas CNC, e também na automação industrial.
Uma das formas mais baratas de aprender sobre motores de passo é usar motores de passo 28BYJ-48. Eles geralmente vêm com uma placa driver baseada no ULN2003, o que os torna super fáceis de usar.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor de Passo 28BYJ-48
De acordo com o datasheet, quando o motor 28BYJ-48 funciona no modo de passo completo, cada passo corresponde a uma rotação de 11.25°. Isso significa que há 32 passos por revolução (360°/11.25° = 32).
Além disso, o motor tem um conjunto de engrenagens de redução de 1/64. Isso significa que ele, na verdade, tem 32 x 64 = 2048 passos. Cada passo equivale a 360°/2048 = 0.1758°.
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. Basta encaixá-lo no conector do driver de motor ULN2003.

Sobre o Módulo Driver de Motor de Passo ULN2003
O ULN2003 é um dos Módulos driver de motor mais comuns para motores de passo.
- O módulo tem quatro LEDs que mostram a atividade das quatro linhas de entrada de controle (para indicar o estado do passo). Eles criam um efeito muito bonito durante os passos.
- O módulo também vem com um jumper ON/OFF para isolar a alimentação do motor de passo.
Pinagem do ULN2003

O módulo ULN2003 tem 6 pinos e um conector fêmea:
- Pino IN1: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
- Pino IN2: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
- Pino IN3: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
- Pino IN4: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
- Pino GND: é um pino de terra comum. Ele DEVE ser conectado tanto ao GND do Arduino quanto ao GND 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:
- A tensão da fonte de alimentação externa deve ser igual à tensão do motor de passo. Por exemplo, se um motor de passo funciona com 12V DC, precisamos usar uma fonte de alimentação de 12V. No caso do motor de passo 28BYJ-48, ele funciona com 5V DC, então usaremos uma fonte de alimentação de 5V.
- Mesmo que um motor de passo precise de uma fonte de alimentação de 5V, por favor, NÃO conecte o pino VDD ao pino 5V do Arduino. Em vez disso, conecte-o a uma fonte de alimentação externa de 5V. Isso porque o motor de passo consome energia demais.
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 (no motor de passo 28BYJ-48) no conector fêmea (no driver ULN2003)
Como Programar para controlar um motor de passo
Existem três métodos para controlar um motor de passo:
- Passo completo (full-step)
- Meio passo (half-step)
- Micropasso (micro-step)
Para aplicações simples, podemos usar o método de passo completo. Os detalhes dos três métodos serão apresentados na última parte deste tutorial. Programar esses métodos é complicado. Felizmente, existem muitas bibliotecas que já fazem isso por nós. Só precisamos usar a biblioteca.
O Arduino IDE tem uma biblioteca Stepper embutida. No entanto, não recomendamos que você use essa biblioteca porque:
- A biblioteca é bloqueante. Isso significa que ela impede o Arduino de fazer outras tarefas enquanto controla o motor de passo.
- Ela não tem funções suficientes.
Em vez disso, recomendamos que você use a biblioteca AccelStepper. Esta biblioteca suporta:
- Aceleração
- Desaceleração.
- Acionamento em passo completo e meio passo.
- Vários motores de passo simultâneos, com passos independentes e concorrentes em cada motor.
- Desvantagem: NÃO suporta acionamento em micropasso
Código Arduino
Passos Rápidos
- Vá até o í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-o no Arduino IDE
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino
- 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 a 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
Código Arduino para dois motores de passo 28BYJ-48
Conhecimento Adicional
1. O motor de passo vibra enquanto se move
NÃO se preocupe se o motor de passo vibrar enquanto se move. Essa é uma característica do motor de passo. Podemos reduzir a vibração usando o método de controle em micropasso.
Além disso, por causa dessa característica, se controlarmos corretamente, o motor de passo pode produzir sons musicais como se fosse um instrumento musical. Você pode ver este projeto no Arduino Project Hub.
2. Métodos de controle de motores de passo
- Passo completo: a unidade de movimento é um passo, que equivale a um valor em graus especificado no datasheet ou no manual do motor de passo.
- Meio passo: divide cada passo completo em dois passos menores. A unidade de movimento é metade do passo completo. Este método permite que o motor se mova com o dobro da resolução.
- Micropasso: divide cada passo completo em vários passos menores. A unidade de movimento é uma fração do passo completo. A fração pode ser 1/4, 1/8, 1/16, 1/32 ou até mais. Este método permite que o motor se mova com uma resolução maior. Ele também faz o motor se mover de forma mais suave em baixas velocidades. Quanto maior o divisor, maior a resolução e mais suave o movimento.
Por exemplo, se o datasheet do motor especificar 1.8 grau/passo:
- Passo completo: o motor pode se mover com 1.8 grau/passo <⇒ 200 passos/revolução
- Meio passo: o motor pode se mover com 0.9 grau/passo <⇒ 400 passos/revolução
- Micropasso: o motor pode se mover com 0.45, 0.225, 0.1125, 0.05625 grau/passo <⇒ 800, 1600, 3200, 6400... passos/revolução
O código acima usou o método de controle em passo completo.
3. Problema de Ressonância
Este é um uso avançado. Os iniciantes NÃO precisam se preocupar com isso. Isso acontece em uma faixa de velocidade na qual a taxa de passos é igual à frequência natural do motor. Pode haver uma mudança audível no ruído produzido pelo motor, além de um aumento na vibração. Em aplicações reais, o desenvolvedor DEVE prestar atenção a esse problema.
Vídeo
WARNING
Observe que este tutorial está incompleto. Vamos avisar na nossa página do Facebook quando o tutorial estiver completo. Curta a página para ficar atualizado.