Arduino Nano ESP32 - Motor paso a paso 28BYJ-48, controlador ULN2003

En este tutorial, cubriremos los siguientes temas:

Arduino Nano ESP32 ULN2003 motor paso a paso 28BYJ-48

Los motores paso a paso destacan en el control de posición de alta precisión, ya que dividen una revolución completa en pasos discretos. Estos motores encuentran aplicaciones en una amplia gama de dispositivos, que incluyen impresoras, impresoras 3D, máquinas CNC y sistemas de automatización industrial.

Un método asequible para obtener una comprensión de los motores paso a paso es experimentar con los motores paso a paso 28BYJ-48. Normalmente, estos motores vienen con placas de driver basadas en ULN2003, lo que simplifica enormemente su utilización.

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×Adaptador de Corriente 5V
1×Conector de Alimentación DC
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del motor paso a paso 28BYJ-48

Según la hoja de datos, el motor 28BYJ-48, al operar en modo de paso completo, se desplaza en incrementos de 11,25 grados, resultando en 32 pasos por revolución completa (según lo calculado: 360°/11,25° = 32).

Además, el motor incorpora un juego de engranajes de reducción 1/64, lo que aumenta efectivamente su número de pasos a 32 × 64, dando como resultado 2048 pasos por revolución. Cada uno de estos 2048 pasos corresponde a una rotación de 360°/2048, lo que equivale aproximadamente a 0,1758 grados por paso.

Conclusión: si el motor da 2048 pasos (en modo de paso completo), el motor da una revolución

Esquema de pines

El motor paso a paso 28BYJ-48 tiene 5 pines. No es necesario preocuparse por los detalles de estos pines. Solo hay que conectarlo al conector del controlador ULN2003.

motor paso a paso 28BYJ-48

Acerca del módulo de controlador de motor paso a paso ULN2003

El ULN2003 se destaca como un módulo controlador de motor muy utilizado para motores paso a paso. Las características clave del módulo incluyen:

  • Cuatro LEDs que se iluminan para indicar la actividad de las cuatro líneas de entrada de control, reflejando de forma eficaz el estado de paso actual del motor. Estos LEDs no solo cumplen una función práctica, sino que también añaden un elemento visual al proceso de paso a paso.
  • Un jumper ON/OFF está integrado en el módulo, permitiendo aislar la alimentación al motor paso a paso conectado. Esta característica ofrece una forma conveniente de controlar la fuente de alimentación del motor, permitiendo una gestión eficiente de la energía.

Disposición de pines de ULN2003

Diagrama de pines del controlador ULN2003 para motor paso a paso

El módulo ULN2003 incluye 6 pines y un conector hembra:

  • Pin IN1: se usa para accionar el motor. Conéctalo a un pin de salida en Arduino Nano ESP32.
  • Pin IN2: se usa para accionar el motor. Conéctalo a un pin de salida en Arduino Nano ESP32.
  • Pin IN3: se usa para accionar el motor. Conéctalo a un pin de salida en Arduino Nano ESP32.
  • Pin IN4: se usa para accionar el motor. Conéctalo a un pin de salida en Arduino Nano ESP32.
  • Pin GND: es un pin de tierra común. DEBE conectarse a los dos GND: el del Arduino Nano ESP32 y el de la fuente de alimentación externa.
  • Pin VDD: suministra energía al motor. Conéctalo a la fuente de alimentación externa.
  • Conector del motor: aquí es donde se conecta el motor.

※ Nota:

Cuando se trata de alimentar motores paso a paso, es importante seguir estas pautas:

  • Asegúrese de que el voltaje de la fuente de alimentación externa coincida con los requisitos de voltaje del motor paso a paso. Por ejemplo, si su motor paso a paso opera a 12 V CC, es crucial usar una fuente de alimentación de 12 V. En el caso del motor paso a paso 28BYJ-48, que funciona a 5 V CC, es imperativo emplear una fuente de alimentación de 5 V.
  • Es importante señalar que, incluso si un motor paso a paso está diseñado para funcionar con una fuente de alimentación de 5 V, NO conecte el pin VDD al pin de 5 V en el Arduino Nano ESP32. En su lugar, conecte el pin VDD a una fuente de 5 V externa. Esta medida de precaución es esencial porque los motores paso a paso pueden consumir una cantidad significativa de energía, lo que podría superar las capacidades de la fuente de alimentación del ESP32, lo que podría causar problemas o daños.

Diagrama de Cableado

Diagrama de cableado para motor paso a paso ULN2003 con Arduino Nano/ESP32

This image is created using Fritzing. Click to enlarge image

Por favor, tenga en cuenta que no necesitamos preocuparnos por el color de los cables del motor paso a paso. Solo necesitamos enchufar el conector macho (en el motor paso a paso 28BYJ-48) al conector hembra (del controlador ULN2003).

Cómo programar para controlar un motor paso a paso

Cuando se trata de controlar un motor paso a paso, hay tres métodos principales:

  • Paso completo
  • Medio paso
  • Micro-paso

Para aplicaciones básicas, el método de paso completo suele ser suficiente. Sin embargo, se proporcionarán explicaciones detalladas de los tres métodos en la parte final de este tutorial. Es importante señalar que la programación de estos métodos puede ser compleja. La buena noticia es que hay muchas bibliotecas disponibles que manejan esta complejidad por nosotros. Todo lo que necesitamos hacer es utilizar la biblioteca adecuada, lo que simplifica el control de motores paso a paso en nuestros proyectos.

El IDE de Arduino incluye una biblioteca integrada Stepper, pero desaconsejamos usarla por las siguientes razones:

  • Naturaleza Bloqueante: Esta biblioteca opera de manera bloqueante, lo que significa que monopoliza los recursos del ESP32, impidiendo que realice otras tareas mientras controla el motor paso a paso.
  • Funcionalidad Limitada: La biblioteca Stepper integrada puede no proporcionar todas las funciones y características que necesitas para tu proyecto.

En su lugar, recomendamos utilizar la biblioteca AccelStepper. Esta biblioteca ofrece varias ventajas, entre ellas:

  • Aceleración y Desaceleración: Admite aceleración y desaceleración suaves, lo que permite un control más preciso.
  • Conducción en modo paso completo y medio paso: Puedes elegir entre los modos de conducción en paso completo y medio paso para tu motor paso a paso.
  • Múltiples motores paso a paso simultáneos: AccelStepper permite el control de múltiples motores paso a paso de forma simultánea, con cada motor moviéndose de forma independiente y de forma concurrente.

Sin embargo, es importante señalar que la biblioteca tiene una desventaja: no admite el accionamiento en micropasos.

Código de Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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()); }

Pasos R\u00e1pidos

Para empezar con Arduino Nano ESP32, siga estos pasos:

  • Si eres nuevo en Arduino Nano ESP32, consulta el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Conecte los componentes de acuerdo con el diagrama proporcionado.
  • Conecte la placa Arduino Nano ESP32 a su computadora usando un cable USB.
  • Inicie el IDE de Arduino en su computadora.
  • Seleccione la Arduino Nano ESP32 placa y su puerto COM correspondiente.
  • Abra el Administrador de Bibliotecas haciendo clic en el icono en la barra de navegación izquierda del IDE de Arduino.
  • Busque “AccelStepper”, luego localice la biblioteca AccelStepper de Mike McCauley.
  • Haga clic en el botón Instalar para instalar la biblioteca AccelStepper.
Biblioteca AccelStepper para Arduino Nano ESP32
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código a Arduino Nano ESP32
  • Vea que el motor esté girando. Debería:
    • Gire una revolución en sentido horario, y luego
    • Gire dos revoluciones en sentido antihorario, y luego
    • Gire dos revoluciones en sentido horario.

    Ese proceso se repite infinitamente.

    • Ver el resultado en el Monitor Serial

Cómo controlar múltiples motores paso a paso 28BYJ-48

Aprendamos a controlar dos motores paso a paso de forma independiente al mismo tiempo.

Diagrama de cableado para dos motores paso a paso 28BYJ-48

Diagrama de cableado para Arduino Nano ESP32 con dos motores paso a paso y controlador ULN2003

This image is created using Fritzing. Click to enlarge image

Código de Arduino Nano ESP32 para dos motores paso a paso 28BYJ-48

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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()); }

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!