Arduino Nano ESP32 - Motor de Passo 28BYJ-48 e Driver ULN2003

Neste tutorial, vamos abordar os seguintes tópicos:

Arduino Nano ESP32 ULN2003 28BYJ-48 stepper motor

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

1×Arduino Nano ESP32
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
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 ESP32

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

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.

28BYJ-48 stepper motor

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

ULN2003 Stepper Motor Driver Pinout

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

The wiring diagram between Arduino Nano ESP32 and stepper motor ULN2003 driver

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

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(AccelStepper::FULL4WIRE, D11, D9, D10, D8); 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

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.
Arduino Nano ESP32 AccelStepper library
  • 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.

    Esse processo é repetido infinitamente.

    • Veja o resultado no Serial Monitor

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

The wiring diagram between Arduino Nano ESP32 and two stepper motor ULN2003 driver

This image is created using Fritzing. Click to enlarge image

Código Arduino Nano ESP32 para dois motores de passo 28BYJ-48

/* * Este código de Arduino Nano ESP32 foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-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 // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, D11, D9, D10, D8); AccelStepper stepper_2(FULLSTEP, D7, D5, D6, D4); 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()); }

※ 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!