Arduino Nano - Motor de Passo 28BYJ-48 com Driver ULN2003
Este tutorial ensina como usar o Arduino Nano para controlar o Motor de Passo 28BYJ-48 usando o Driver ULN2003. Em detalhes, vamos aprender:
- Como conectar o Arduino Nano ao motor de passo 28BYJ-48 por meio do driver ULN2003
- Como programar o Arduino Nano para controlar um único motor de passo 28BYJ-48 por meio do driver ULN2003
- Como programar o Arduino Nano para controlar vários motores de passo 28BYJ-48 por meio de drivers ULN2003

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor de Passo 28BYJ-48
Os motores de passo são excelentes para controle de posição. Eles dividem uma revolução completa em vários "passos" iguais. Esses motores são usados em muitos dispositivos, como impressoras, impressoras 3D, máquinas CNC e automação industrial.
Um dos métodos mais econômicos para aprender sobre motores de passo é usar motores de passo 28BYJ-48. Eles costumam vir com uma placa driver baseada no ULN2003, o que os torna muito fáceis de usar.
Conforme indicado no datasheet, o motor 28BYJ-48 opera em modo de passo completo, com cada passo correspondendo a uma rotação de 11.25°. Portanto, 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 resulta em 32 x 64 = 2048 passos. Cada passo equivale a 360°/2048 = 0.1758°.
Conclusão: Se o motor estiver em modo de passo completo, serão necessários 2048 passos para ele completar uma revolução.
Pinagem do Motor de Passo 28BYJ-48 com Driver ULN2003
O motor de passo 28BYJ-48 tem 5 pinos. Não é necessário se preocupar com os detalhes desses pinos; basta conectá-los ao conector do driver de motor ULN2003.

Sobre o Driver de Motor de Passo ULN2003
O ULN2003 é um módulo driver de motor muito usado para motores de passo.
- Ele tem quatro LEDs que mostram a atividade das quatro linhas de entrada de controle, o que dá um ótimo efeito visual quando o motor está dando passos.
- Além disso, inclui um jumper ON/OFF para separar 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. Deve ser conectado a um pino de saída da placa Arduino Nano.
- Pino IN2: usado para acionar o motor. Deve ser conectado a um pino de saída da placa Arduino Nano.
- Pino IN3: usado para acionar o motor. Deve ser conectado a um pino de saída da placa Arduino Nano.
- Pino IN4: usado para acionar o motor. Deve ser conectado a um pino de saída da placa Arduino Nano.
- Pino GND: é o pino de terra comum. Deve ser conectado tanto ao GND da placa Arduino Nano quanto ao GND da fonte de alimentação externa.
- Pino VDD: fornece energia para o motor. Deve ser conectado à 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 12V. No caso do motor de passo 28BYJ-48, ele opera com 5V DC, então usaremos uma fonte de 5V.
- No entanto, mesmo que o motor de passo precise de uma fonte de 5V, NÃO conecte o pino VDD ao pino 5V do Arduino Nano. Em vez disso, conecte-o a uma fonte de 5V externa, pois o motor de passo consome muita energia.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Não é necessário prestar atenção à cor dos fios do motor de passo. Basta conectar o conector macho do motor de passo 28BYJ-48 ao conector fêmea do driver ULN2003.
Como Programar para controlar um motor de passo
Existem três maneiras de regular um motor de passo:
- Passo completo
- Meio passo
- Micropasso
Para aplicações básicas, podemos usar a abordagem de passo completo. Os detalhes dos três métodos serão apresentados na seção final deste tutorial. Programar essas técnicas pode ser complexo. Felizmente, existem muitas bibliotecas que já fazem o trabalho por nós, então só precisamos usá-las.
O Arduino IDE tem uma biblioteca Stepper integrada. No entanto, não sugerimos que você use essa biblioteca porque:
- Ela é uma biblioteca bloqueante, ou seja, impede o Arduino Nano de executar outras tarefas enquanto controla o motor de passo.
- Ela não oferece funções suficientes.
Em vez disso, sugerimos que você use a biblioteca AccelStepper. Essa biblioteca oferece:
- Aceleração
- Desaceleração
- Acionamento em passo completo e meio passo
- Vários motores de passo simultâneos, com passos concorrentes independentes em cada um
- Desvantagem: Sem suporte a acionamento em micropasso
Código Arduino Nano
Passos Rápidos
- Clique no ícone Libraries na barra esquerda do Arduino IDE.
- Pesquise “AccelStepper” e localize a biblioteca AccelStepper criada por Mike McCauley.
- Clique no botão Install para adicionar a biblioteca AccelStepper.

- Copie o código acima e abra-o no Arduino IDE.
- Clique no botão Upload no Arduino IDE para fazer upload do código para o Arduino Nano.
- Você deverá ver o motor girando. Ele deve dar uma revolução no sentido horário, seguida de duas revoluções no sentido anti-horário e, depois, duas revoluções no sentido horário.
O procedimento é executado continuamente.
- Veja a saída no Serial Monitor.
Como controlar vários motores de passo 28BYJ-48
Vamos descobrir como gerenciar dois motores de passo separadamente, mas ao mesmo tempo.
Diagrama de Ligação para dois motores de passo 28BYJ-48

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Código Arduino Nano 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 tremer enquanto estiver em movimento. Essa é uma característica do motor de passo. Podemos reduzir a vibração usando a técnica de controle por micropasso.
Além disso, devido a essa característica, se for controlado corretamente, o motor de passo pode criar música como se fosse um instrumento musical. Um exemplo disso pode ser encontrado aqui no Hackster.io.
2. Método de controle de motores de passo
- Passo completo: A unidade de movimento é um passo, que é igual ao 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. Esse método permite que o motor se mova com o dobro da resolução.
- Micropasso: Divide cada passo completo em muitos 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. Esse método permite que o motor se mova com resolução maior. Ele também faz o motor se mover com mais suavidade em baixas velocidades. Quanto maior o divisor, maior a resolução e mais suave o movimento.
Se o datasheet do motor especificar 1.8 grau/passo:
- Passo completo: O motor vai se mover em incrementos de 1.8 grau por passo, resultando em 200 passos por revolução.
- Meio passo: O motor vai se mover em incrementos de 0.9 grau por passo, resultando em 400 passos por revolução.
- Micropasso: O motor vai se mover em incrementos de 0.45, 0.225, 1125, 0.05625 grau por passo, resultando em 800, 1600, 3200, 6400... passos por revolução.
O método de controle usado no código acima foi a abordagem de passo completo.
3. Problema de Ressonância
Isto é para usuários avançados. Iniciantes não precisam se preocupar com isso. Ocorre em uma faixa de velocidades em que a taxa de passos é igual à frequência natural do motor. Pode haver uma mudança perceptível no som emitido pelo motor, além de um aumento da vibração. Em aplicações práticas, os desenvolvedores devem levar isso em consideração.