ESP32 - Controlador de motor paso a paso 28BYJ-48 ULN2003
En este tutorial, cubriremos los siguientes temas:
- Controlar un motor paso a paso 28BYJ-48 con un ESP32 y un driver ULN2003.
- Gestionar varios motores paso a paso 28BYJ-48 usando un ESP32 y un driver ULN2003.

Los motores paso a paso destacan en el control de posición de alta precisión, ya que descomponen una revolución completa en pasos discretos. Estos motores encuentran aplicaciones en una amplia gama de dispositivos, incluyendo 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. Por lo general, estos motores vienen con placas de control basadas en ULN2003, lo que facilita enormemente su uso.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del motor paso a paso 28BYJ-48
Según la hoja de datos, el motor 28BYJ-48, cuando opera en modo de paso completo, se mueve en incrementos de 11,25°, lo que resulta en 32 pasos por una revolución completa (según lo calculado: 360°/11,25° = 32).
Además, el motor incorpora un juego de engranajes de reducción de 1/64, lo que aumenta de manera efectiva su conteo de pasos a 32 × 64, resultando en 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 realiza 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 hace falta preocuparse por los detalles de estos pines. Solo necesitamos conectarlo al conector del controlador ULN2003.

Acerca del Módulo Controlador de Motor Paso a Paso ULN2003
El ULN2003 se destaca como un módulo controlador de motor ampliamente 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 con precisión el estado de avance actual del motor. Estos LEDs no solo cumplen una función práctica, sino que también añaden un elemento visual al avance por pasos.
- Un puente de encendido/apagado 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 alimentación del motor, permitiendo una gestión eficiente de la energía.
Pinout de ULN2003

El módulo ULN2003 incluye 6 pines y un conector hembra:
- Pin IN1: se utiliza para accionar el motor. Conéctalo a un pin de salida en el ESP32.
- Pin IN2: se utiliza para accionar el motor. Conéctalo a un pin de salida en el ESP32.
- Pin IN3: se utiliza para accionar el motor. Conéctalo a un pin de salida en el ESP32.
- Pin IN4: se utiliza para accionar el motor. Conéctalo a un pin de salida en el ESP32.
- Pin GND: es un pin de tierra común. Debe conectarse a los GND del ESP32 y de la fuente de alimentación externa.
- Pin VDD: suministra energía para el 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 con 12V DC, es crucial utilizar una fuente de alimentación de 12V. En el caso del motor paso a paso 28BYJ-48, que funciona con 5V DC, es imperativo emplear una fuente de alimentación de 5V.
- Es importante señalar que incluso si un motor paso a paso está diseñado para funcionar con una fuente de alimentación de 5V, NO conecte el pin VDD al pin de 5V en el ESP32. En su lugar, conecte el pin VDD a una fuente de alimentación externa de 5V. 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 exceder las capacidades de la fuente de alimentación del ESP32, lo que podría causar problemas o daños.
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.
Por favor, tenga en cuenta que no necesitamos preocuparnos por el color de los cables del motor paso a paso. Solo necesitamos conectar el conector macho (del motor 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. Cabe señalar que programar para estos métodos puede ser complejo. La buena noticia es que existen 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 Stepper integrada, pero no recomendamos usarla por las siguientes razones:
- Naturaleza bloqueante: Esta biblioteca funciona 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 incorporada 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, incluyendo:
- Aceleración y Desaceleración: Soporta aceleración y desaceleración suaves, lo que permite un control más preciso.
- Conducción en Paso Completo y Medio Paso: Puede elegir entre los modos de paso completo y medio paso para su 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 simultáneamente.
Sin embargo, es importante señalar que la biblioteca tiene una desventaja: no soporta el control por micropasos.
ESP32 Código
Pasos R\u00e1pidos
- Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
- Realiza el cableado tal como se muestra en la imagen de arriba.
- Conecta la placa ESP32 a tu PC mediante un cable micro USB.
- Abre el IDE de Arduino en tu PC.
- Selecciona la placa ESP32 correcta (p. ej. Módulo de desarrollo ESP32) y el puerto COM.
- Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
- Busca “AccelStepper”, luego encuentra la librería AccelStepper de Mike McCauley.
- Haz clic en el botón Instalar para instalar la librería AccelStepper.

- Copie el código anterior y ábralo con el IDE de Arduino
- Haga clic en el botón Subir en el IDE de Arduino para cargar el código al ESP32
- Observe que el motor está girando. Debe:
- Girar una revolución en sentido horario, y luego
- Girar dos revoluciones en sentido antihorario, y luego
- Girar dos revoluciones en sentido horario.
- Ver el resultado en el Monitor Serial
Ese proceso se repite infinitamente.
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

This image is created using Fritzing. Click to enlarge image