Arduino Nano - Motor paso a paso 28BYJ-48 con controlador ULN2003

Este tutorial explica cómo usar Arduino Nano para controlar un motor paso a paso 28BYJ-48 utilizando el controlador ULN2003. En detalle, aprenderemos:

Arduino Nano ULN2003 motor paso a paso 28BYJ-48

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables ATMEGA328P Nano Development Board
1×Cable USB A a Mini-B
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

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

Los motores paso a paso son excelentes para el control de posición. Dividen una revolución completa en un número de pasos iguales. Estos motores se utilizan en muchos dispositivos, como impresoras, impresoras 3D, máquinas CNC y automatización industrial.

Uno de los métodos más económicos para obtener conocimiento sobre motores paso a paso es utilizar motores 28BYJ-48. Estos suelen venir con una placa de control basada en ULN2003, lo que los hace increíblemente fáciles de usar.

Como se indica en la ficha técnica, el motor 28BYJ-48 opera en modo de paso completo, con cada paso correspondiente a una rotación de 11,25°. Por lo tanto, hay 32 pasos por revolución (360°/11,25° = 32).

Además, el motor tiene un conjunto de engranajes con una reducción de 1/64. Esto se traduce en 32 × 64 = 2048 pasos. Cada paso equivale a 360°/2048 = 0,1758°.

Conclusión: Si el motor está configurado en modo de paso completo, tomará 2048 pasos para completar una revolución.

El motor paso a paso 28BYJ-48 usando la asignación de pines del controlador ULN2003

El motor paso a paso 28BYJ-48 tiene 5 pines. No es necesario preocuparse por las especificaciones de estos pines; simplemente deben conectarse al conector del controlador de motor ULN2003.

motor paso a paso 28BYJ-48

Acerca del controlador de motor paso a paso ULN2003

El ULN2003 es un módulo de controlador de motor muy utilizado para motores paso a paso.

  • Tiene cuatro LEDs que demuestran la actividad de las cuatro líneas de entrada de control, lo que produce un gran efecto visual cuando el motor da un paso.
  • Además, incluye un jumper ON/OFF para separar la alimentación del motor paso a paso.

Disposición de pines del ULN2003

Disposición de pines del controlador de motor paso a paso ULN2003

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

  • Pin IN1: se usa para accionar el motor. Debe conectarse a un pin de salida en la placa Arduino Nano.
  • Pin IN2: se usa para accionar el motor. Debe conectarse a un pin de salida en la placa Arduino Nano.
  • Pin IN3: se usa para accionar el motor. Debe conectarse a un pin de salida en la placa Arduino Nano.
  • Pin IN4: se usa para accionar el motor. Debe conectarse a un pin de salida en la placa Arduino Nano.
  • Pin GND: este es el pin de tierra común. Debe conectarse a los GND de la placa Arduino Nano y de la fuente de alimentación externa.
  • Pin VDD: suministra energía para el motor. Debe conectarse a la fuente de alimentación externa.
  • Conector del motor: aquí es donde se enchufa el motor.

※ Nota:

  • El voltaje de la fuente de alimentación externa debe ser igual al voltaje del motor paso a paso. Por ejemplo, si un motor paso a paso funciona con 12V DC, necesitamos usar una fuente de 12V. En el caso del motor paso a paso 28BYJ-48, funciona con 5V DC, por lo que utilizaremos una fuente de 5V.
  • Sin embargo, incluso si el motor paso a paso requiere una fuente de 5V, por favor no conectes el pin VDD al pin de 5V en el Arduino Nano. En su lugar, conéctalo a una fuente de alimentación externa de 5V, ya que el motor paso a paso consume demasiada energía.

Diagrama de Cableado

Diagrama de cableado de Arduino Nano para motor paso a paso con controlador ULN2003

This image is created using Fritzing. Click to enlarge image

No es necesario prestar atención al color de los cables del motor paso a paso. Todo lo que se necesita es conectar el conector macho del motor paso a paso 28BYJ-48 al conector hembra del controlador ULN2003.

Cómo programar para controlar un motor paso a paso

Hay tres maneras de regular un motor paso a paso:

  • Paso completo
  • Medio paso
  • Micro-paso

Para aplicaciones básicas, podemos usar el enfoque de paso completo. Los detalles de los tres métodos se describirán en la sección final de este tutorial. Programar estas técnicas puede ser complejo. Afortunadamente, hay muchas bibliotecas que ya han hecho el trabajo por nosotros, así que solo necesitamos utilizarlas.

El IDE de Arduino incluye una biblioteca integrada Stepper. Sin embargo, no le recomendamos utilizar esta biblioteca, ya que:

  • Es una biblioteca bloqueante, lo que significa que impide que el Arduino Nano realice otras tareas mientras controla el motor paso a paso.
  • No proporciona suficientes funciones.

En su lugar, le sugerimos que utilice la biblioteca AccelStepper. Esta biblioteca ofrece:

  • Aceleración
  • Desaceleración
  • Conducción en modo paso completo y modo medio paso
  • Varios motores paso a paso simultáneos, con avance concurrente independiente en cada motor
  • Desventaja: No hay soporte para micropasos

Código de Arduino Nano

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

Pasos R\u00e1pidos

  • Haz clic en el icono Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper”, luego localiza la biblioteca AccelStepper creada por Mike McCauley.
  • Haz clic en el botón Instalar para añadir la biblioteca AccelStepper.
Librería AccelStepper para Arduino Nano
  • Copia el código anterior y ábrelo con la IDE de Arduino.
  • Haz clic en el botón Cargar en la IDE de Arduino para cargar el código al Arduino Nano.
  • Entonces deberías ver girar el motor. Debería hacer una revolución en sentido horario, seguida de dos revoluciones en sentido antihorario y luego dos revoluciones en sentido horario.

El procedimiento se realiza de forma continua.

  • Consulta la salida en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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

Descubramos cómo manejar dos motores paso a paso por separado pero a la vez.

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

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

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

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

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

Conocimiento adicional

1. El motor paso a paso vibra mientras se mueve

No se preocupe si el motor paso a paso vibra mientras está en movimiento. Esta es una característica del motor paso a paso. Podemos reducir la vibración utilizando la técnica de micropasos.

Además, debido a esta característica, si se gestiona correctamente, el motor paso a paso puede crear música como si fuera un instrumento musical. Un ejemplo de esto se puede encontrar aquí en Hackster.io.

2. Método de control de motores paso a paso

  • Paso completo: La unidad de movimiento es un paso, que equivale al valor en grados especificado en la hoja de datos o manual del motor paso a paso.
  • Medio paso: Divide cada paso completo en dos pasos más pequeños. La unidad de movimiento es la mitad del paso completo. Este método permite que el motor se mueva con el doble de resolución.
  • Micro-paso: Divide cada paso completo en muchos pasos más pequeños. La unidad de movimiento es una fracción del paso completo. La fracción puede ser 1/4, 1/8, 1/16, 1/32 o incluso más. Este método permite que el motor se mueva con una mayor resolución. También hace que el motor se desplace más suavemente a bajas velocidades. Cuanto mayor sea el divisor, mayor será la resolución y más suave será el movimiento.

Si la hoja de datos del motor especifica 1,8° por paso:

  • Paso completo: El motor se moverá en incrementos de 1,8 grados por paso, resultando en 200 pasos por revolución.
  • Paso medio: El motor se moverá en incrementos de 0,9 grados por paso, resultando en 400 pasos por revolución.
  • Micro-paso: El motor se moverá en incrementos de 0,45, 0,225, 0,1125, 0,05625 grados por paso, resultando en 800, 1600, 3200, 6400... pasos por revolución.

El método de control utilizado en el código anterior fue el modo de paso completo.

3. Problema de resonancia

Esto es para usuarios avanzados. Los principiantes no necesitan preocuparse por ello. Ocurre en un rango de velocidades, donde la frecuencia de pasos es igual a la frecuencia natural del motor. Podría haber un cambio notable en el sonido que emite el motor, así como un aumento en la vibración. En aplicaciones prácticas, los desarrolladores deberían tenerlo en cuenta.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

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