Arduino Nano - Motor de Passo
Este tutorial ensina como usar o Arduino Nano para controlar um Motor de Passo usando o Driver L298N. Em detalhes, vamos aprender:
- Como usar o Arduino Nano e o driver L298N para controlar um motor de passo bipolar
- Como programar o Arduino Nano para controlar a posição do motor de passo
- Como programar o Arduino Nano para controlar a velocidade do motor de passo
- Como programar o Arduino Nano para controlar a direção do motor de passo
O tutorial se aplica a todos os tipos de motores de passo bipolares com quatro fios. Ele usará um motor de passo NEMA 17 como exemplo.

Se você quiser controlar outro tipo de motor de passo, veja o tutorial Arduino Nano - Motor de Passo 28BYJ-48.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor de Passo
Existem dois tipos comuns de motores de passo:
- bipolar: este motor tem 4 fios
- unipolar: este motor tem 5 ou 6 fios.
Em um motor de passo unipolar de 6 fios, podemos usar quatro dos seis fios e controlá-lo como se fosse um motor de passo bipolar.
Para um motor de passo unipolar de 5 fios, veja o tutorial Arduino Nano - controlar o motor de passo 28BYJ-48 usando o driver ULN2003 para mais informações.
O foco deste tutorial é somente o motor de passo bipolar.
Pinagem do Motor de Passo Bipolar
O Motor de Passo bipolar tem quatro pinos, e os nomes desses pinos variam conforme o fabricante. A tabela a seguir mostra alguns dos nomes mais usados:
| Nº DO PINO | Nome 1 | Nome 2 | Nome 3 |
|---|---|---|---|
| 1 | A+ | A | A |
| 2 | A- | A | C |
| 3 | B+ | B | B |
| 4 | B- | B | D |

A disposição dos pinos, os rótulos dados aos fios e as cores dos fios podem ser diferentes entre os fabricantes. Você deve consultar o datasheet ou o manual para descobrir como a cor do fio corresponde ao nome do pino. A imagem acima também mostra as especificações de dois motores diferentes, com rótulos e cores de fios distintos.
Passos por Revolução
A especificação do motor indica o valor DEG_PER_STEP. Dependendo da técnica de controle, STEP_PER_REVOLUTION pode ser determinado pela tabela a seguir:
| Método de controle | Passos por Revolução | Grau real por passo |
|---|---|---|
| Passo completo | STEP_PER_REVOLUTION = 360 / DEG_PER_STEP | DEG_PER_STEP |
| Meio passo | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 | DEG_PER_STEP / 2 |
| Micropasso (1/n) | STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n | DEG_PER_STEP / n |
Por exemplo, se o datasheet do motor informar uma medida de 1.8 grau/passo:
| Método de controle | Passos por Revolução | Grau real por passo |
|---|---|---|
| Passo completo | 200 passos/revolução | 1.8° |
| Meio passo | 400 passos/revolução | 0.9° |
| Micropasso (1/n) | (200 * n) passos/revolução | (1.8 / n)° |
Como controlar um motor de passo usando o Arduino Nano
O Arduino Nano pode gerar sinais para controlar o motor de passo, mas esses sinais não têm a tensão e/ou a corrente suficientes que o motor de passo exige. Por isso, é necessário um driver de hardware entre o Arduino Nano e o motor de passo. Esse driver tem duas funções:
- Amplificar os sinais de controle do Arduino Nano em corrente e tensão
- Proteger o Arduino Nano contra a alta corrente e a alta tensão usadas para alimentar o motor de passo.
Existem vários tipos de drivers de hardware que podem ser usados para gerenciar motores de passo. Um dos drivers de hardware mais populares para controlar motores de passo é o Driver L298N.
Sobre o Driver L298N
Um Driver L298N pode ser usado para controlar dois motores DC ou um motor de passo. Este tutorial ensina como usá-lo para controlar o motor de passo.
Pinagem do Driver L298N

O Driver L298N tem 11 pinos e três jumpers:
- Pino VCC: Fornece energia para o motor e pode ficar entre 5 e 35V.
- Pino GND: É um pino de terra comum e precisa ser conectado ao GND (0V).
- Pino 5V: Fornece energia para o módulo L298N e pode ser alimentado com 5V do Arduino Nano.
- Pinos IN1, IN2, IN3, IN4: São conectados aos pinos do Arduino para receber o sinal de controle do motor de passo.
- Pinos OUT1, OUT2, OUT3, OUT4: São conectados ao motor de passo.
- Jumpers ENA, ENB: São usados para habilitar o motor de passo, e os dois jumpers ENA e ENB precisam estar no lugar.
- Jumper 5V-EN: Se ele ficar no lugar, a energia do módulo L298N vem do VCC e nada precisa ser conectado ao pino 5V. Se ele for removido, a energia precisa ser fornecida ao módulo L298N por um pino 5V.
O driver L298N tem duas entradas de alimentação:
- Uma para o motor de passo (pinos VCC e GND): de 5 a 35V.
- Uma para a operação interna do módulo L298N (pinos 5V e GND): de 5 a 7V. Se o jumper 5V-EN ficar no lugar, não é necessária nenhuma conexão a este pino.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
※ Nota:
- Mantenha os três jumpers do módulo L298N nas posições atuais se a fonte de alimentação do motor for de 12V ou menos.
- A disposição dos pinos nos motores de passo pode variar entre os fabricantes. Consulte a tabela abaixo para a ligação correta.
Tabela de ligação entre o Arduino Nano e o Driver L298N
| Pinos do Arduino Nano | Pinos do L298N |
|---|---|
| 7 | IN1 |
| 6 | IN2 |
| 5 | IN3 |
| 4 | IN4 |
Tabela de ligação entre o Driver L298N e o Motor de passo
Importante!: Não dê atenção à ordem dos fios do motor de passo no diagrama acima. Ela é apenas uma ilustração. A disposição dos pinos nos motores de passo pode ser diferente entre os fabricantes. Certifique-se de que a sua ligação siga a tabela abaixo.
| Pinos do L298N | Pinos do motor de passo | Ou | Ou |
|---|---|---|---|
| OUT1 | A+ | A | A |
| OUT2 | A- | A | C |
| OUT3 | B+ | B | B |
| OUT4 | B- | B | D |
Antes de comprar um motor de passo, é recomendável revisar o datasheet, a especificação ou o manual do motor. Verifique se as informações trazem o mapeamento entre a cor e o nome do pino. Por exemplo, este motor de passo fornece o mapeamento mostrado na imagem a seguir:

Usando o mapeamento, a tabela de ligação é:
| Pinos do L298N | pinos do motor de passo | cor do fio |
|---|---|---|
| OUT1 | A | fio preto |
| OUT2 | C | fio verde |
| OUT3 | B | fio vermelho |
| OUT4 | D | fio azul |
※ Nota:
Em todas as tabelas de ligação apresentadas acima entre o motor de passo e o Driver L298N, é possível trocar OUT1 com OUT2, e OUT3 com OUT4. Assim, existem mais formas de fazer a ligação. No entanto, se a troca for feita, o sentido de rotação dos motores pode mudar (de horário para anti-horário, e vice-versa).
Como controlar um Motor de passo usando um driver L298N.
Controlar um motor de passo pode ser um desafio, principalmente quando precisamos fazer isso sem bloqueio. Felizmente, a biblioteca AccelStepper torna isso muito fácil.
O Arduino IDE contém uma biblioteca Stepper integrada. No entanto, não sugerimos que você use essa biblioteca pelos seguintes motivos:
- A biblioteca oferece um recurso bloqueante. Isso significa que o Arduino Nano fica impedido de executar outras tarefas enquanto controla o motor de passo.
- Ela não possui funções suficientes.
Em vez disso, sugerimos usar a biblioteca AccelStepper. Essa biblioteca oferece:
- Aceleração
- Desaceleração
- Acionamento em passo completo e meio passo
- A capacidade de controlar vários motores de passo ao mesmo tempo, com passos simultâneos individuais para cada um
- Desvantagem: NÃO oferece acionamento em micropasso.
Como Controlar a Posição do Motor de Passo pelo Driver L298N
Podemos mover o motor de passo para a posição desejada usando:
※ Nota:
A função stepper.moveTo() é não bloqueante, o que é uma grande vantagem da biblioteca. No entanto, ao usar essa função, há alguns pontos aos quais você deve prestar atenção:
- Chame 'stepper.run()' com a maior frequência possível, de preferência dentro da função void loop().
- Evite usar a função delay() enquanto o motor estiver em movimento.
- Não use as funções Serial.print() e Serial.println() enquanto o motor estiver funcionando, pois elas deixam o motor de passo mais lento.
Como Controlar a Velocidade do Motor de Passo pelo Driver L298N
Podemos regular não só a velocidade, mas também a aceleração e a desaceleração, usando algumas funções básicas.
Como Controlar a Direção do Motor de Passo pelo Driver L298N
Se você ligar o motor como indicado, ele vai girar no:
- Sentido horário: ao controlar o motor de uma posição menor para uma maior (aumento da posição)
- Sentido anti-horário: ao controlar o motor de uma posição maior para uma menor (diminuição da posição)
Por exemplo:
- Quando a posição atual é 100 e o motor é direcionado para 200, ele gira no sentido horário
- Se a posição atual é -200 e o motor é controlado para -100, ele gira no sentido horário
- Se a posição atual é 200 e o motor é regulado para 100, ele gira no sentido anti-horário
- Se a posição atual é -100 e o motor é conduzido para -200, ele gira no sentido anti-horário
※ Nota:
Como dito antes, se você trocar OUT1 com OUT2, ou OUT3 com OUT4, o aumento da posição pode ser anti-horário e a diminuição da posição pode ser horária.
Como Parar o Motor de Passo
- O motor de passo vai parar quando chegar à posição desejada.
- Também é possível fazê-lo parar imediatamente usando a função stepper.stop().
Código Arduino Nano - Código do Motor de Passo
O código a seguir:
- Faz o motor girar uma revolução no sentido horário
- Pausa o motor por 5 segundos
- Faz o motor girar uma revolução no sentido anti-horário
- Para o motor por 5 segundos
- Repete o processo indefinidamente
Passos Rápidos
- Clique no ícone Libraries na barra esquerda do Arduino IDE.
- Pesquise “AccelStepper” e localize a biblioteca AccelStepper criada por Mike McCauley.
- Pressione o botão Install para concluir a instalação da biblioteca AccelStepper.

- Copie o código e abra no Arduino IDE.
- Clique no botão Upload para fazer upload do código para o Arduino Nano.
- O motor de passo vai girar uma revolução no sentido horário, pausar por 5 segundos, girar de volta uma revolução no sentido anti-horário, pausar por 5 segundos e repetir esse processo.
- Veja o resultado no Serial Monitor.
Explicação do Código
Veja a explicação linha por linha contida nos comentários do código-fonte!