ESP32 - Motor de Passo 28BYJ-48 com Driver ULN2003

Neste tutorial, vamos abordar os seguintes tópicos:

ESP32 ULN2003 motor de passo 28BYJ-48

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 grande variedade de dispositivos, incluindo impressoras, impressoras 3D, máquinas CNC e sistemas de automação industrial.

Uma forma barata de entender os motores de passo é experimentar os motores de passo 28BYJ-48. Normalmente, esses motores vêm junto com placas driver baseadas no ULN2003, o que simplifica bastante o uso deles.

Sobre o Motor de Passo 28BYJ-48

Segundo 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 (calculado assim: 360°/11,25° = 32).

Além disso, o motor incorpora um conjunto de engrenagens de redução de 1/64, o que aumenta 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 tem 5 pinos. Não precisamos nos preocupar com os detalhes desses pinos. Só precisamos encaixá-lo no conector do driver de motor ULN2003.

Motor de passo 28BYJ-48

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. As principais características do módulo incluem:

  • Quatro LEDs que acendem para indicar a atividade das quatro linhas de entrada de controle, refletindo o estado atual de passo do motor. Esses LEDs não só têm uma função prática como também dão um toque visual ao processo de passo.
  • Um jumper ON/OFF integrado ao módulo, que permite isolar a alimentação do motor de passo conectado. Esse recurso oferece uma forma prática de controlar a alimentação do motor, permitindo um gerenciamento eficiente de energia.

Pinagem do ULN2003

Pinagem do Driver de Motor de Passo ULN2003

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 ESP32.
  • Pino IN2: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
  • Pino IN3: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
  • Pino IN4: é usado para acionar o motor. Conecte-o a um pino de saída do ESP32.
  • Pino GND: é um pino de terra comum. DEVE ser conectado aos dois GNDs: o do ESP32 e o da fonte de alimentação externa.
  • Pino VDD: fornece energia para o motor. Conecte-o à fonte de alimentação externa.
  • Conector do Motor: é onde o motor se encaixa.

※ Nota:

Ao alimentar motores de passo, é importante seguir estas orientações:

  • Garanta 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 12V. No caso do motor de passo 28BYJ-48, que funciona com 5V DC, é indispensável usar uma fonte de 5V.
  • É importante notar que, mesmo que um motor de passo seja projetado para funcionar com uma fonte de 5V, NÃO conecte o pino VDD ao pino 5V do ESP32. Em vez disso, ligue o pino VDD a uma fonte de 5V externa. Essa precaução é essencial porque motores de passo podem consumir bastante energia, o que pode exceder a capacidade da alimentação do ESP32, causando possíveis problemas ou danos.

Diagrama de Ligação

Diagrama de Ligação do motor de passo ESP32 com driver ULN2003

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Observe que não precisamos nos preocupar com a cor dos fios do motor de passo. Só precisamos 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

Para controlar um motor de passo, há três métodos principais:

  • Passo Completo (Full-Step)
  • Meio Passo (Half-Step)
  • Micropasso (Micro-Step)

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 apresentadas na parte final deste tutorial. Vale notar que programar esses métodos pode ser complexo. A boa notícia é que existem muitas bibliotecas disponíveis que cuidam dessa complexidade para nós. Só precisamos usar a biblioteca apropriada, o que simplifica o controle de motores de passo nos nossos projetos.

O Arduino IDE inclui uma biblioteca Stepper integrada, mas aconselhamos não usá-la pelos seguintes motivos:

  • Natureza Bloqueante: Esta 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 integrada pode não oferecer todas as funções e recursos de que o seu projeto precisa.

Em vez disso, recomendamos usar a biblioteca AccelStepper. Esta biblioteca oferece várias vantagens, incluindo:

  • Aceleração e Desaceleração: Ela suporta aceleração e desaceleração suaves, permitindo um controle mais preciso.
  • Acionamento em Passo Completo e Meio Passo: Você pode escolher entre os modos de acionamento em passo completo e meio passo para o seu motor de passo.
  • Vários Motores de Passo Simultâneos: O AccelStepper permite controlar vários motores de passo ao mesmo tempo, com cada um se movendo de forma independente e concorrente.

No entanto, é importante notar que a biblioteca tem uma desvantagem: ela não suporta acionamento em micropasso.

Código ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/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 // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 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

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente do ESP32 no Arduino IDE.
  • Faça a ligação como na imagem acima.
  • Conecte a placa ESP32 ao seu PC por um cabo micro USB
  • Abra o Arduino IDE no seu PC.
  • Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
  • Clique no í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.
Biblioteca AccelStepper para ESP32
  • Copie o código acima e abra no Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no ESP32
  • 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.

    Esse processo se repete 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

Diagrama de Ligação de dois motores de passo ESP32 com driver ULN2003

This image is created using Fritzing. Click to enlarge image

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

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/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 // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 23, 22, 21, 19); AccelStepper stepper_2(FULLSTEP, 18, 5, 17, 16); 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!