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:

Arduino Nano Motor de passo ULN2003 28BYJ-48

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×Fonte de Alimentação 5V
1×Conector de Alimentação DC
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

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.

Motor de passo 28BYJ-48

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

Pinagem do Driver de Motor de Passo 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

Diagrama de ligação do Arduino Nano com motor de passo e driver ULN2003

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

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

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.
Biblioteca AccelStepper do Arduino Nano
  • 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.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano on COM15
2

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

Diagrama de ligação do Arduino Nano com dois motores de passo e drivers ULN2003

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

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

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.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!