Skip to Content

Motor paso a paso 28BYJ-48 con controlador ULN2003 y tutorial de Arduino

Motor paso a paso 28BYJ-48 con controlador ULN2003 y tutorial de Arduino

Este artículo incluye todo lo que necesitas saber sobre el control de un motor paso a paso 28BYJ-48 con la placa de controladores ULN2003 y Arduino. ¡He incluido hojas de datos, un diagrama de cableado, y muchos códigos de ejemplo!

Primero echamos un vistazo a la biblioteca Arduino Stepper, que es muy fácil de usar. Esta librería es estupenda cuando se está empezando, pero no tiene muchas características adicionales.

Recomiendo encarecidamente echar un vistazo a los códigos de ejemplo para la biblioteca AccelStepper al final de este tutorial. Esta biblioteca es bastante fácil de usar y puede mejorar en gran medida el rendimiento de su hardware.

Después de cada ejemplo, desgloso y explico cómo funciona el código, por lo que no deberías tener problemas para modificarlo y adaptarlo a tus necesidades.

Si quieres aprender más sobre el control de motores paso a paso más grandes, con más par y más velocidad, echa un vistazo a los artículos siguientes. En estos artículos te enseño a controlar motores paso a paso NEMA 17, con drivers como el A4988.

Otros tutoriales sobre motores paso a paso:

Si tiene alguna pregunta, deje un comentario a continuación.

Suministros

Componentes de hardware

28byj-48-stepper-motorMotor paso a paso 28BYJ-48× 1Amazon
Placa de controladores ULN2003× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Cables de puente (macho a hembra)× 10Amazon
Tablero de pruebas (opcional, facilita el cableado)× 1Amazon
Cable USB tipo A/B× 1Amazon
Fuente de alimentación de 5V (alimentar el motor paso a paso directamente desde el Arduino puede dañarlo)× 1Amazon

Software

Arduino IDEArduino IDE

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

Información sobre el motor paso a paso 28BYJ-48 y la placa de controladores ULN2003

El 28BYJ-48 es uno de los motores paso a paso más baratos que puedes encontrar. Aunque no es súper preciso o potente, es un gran motor para usar en proyectos pequeños o si sólo quieres aprender sobre los motores paso a paso.

Este motor suele utilizarse para ajustar automáticamente las paletas de un aparato de aire acondicionado. Lleva incorporada una caja de engranajes, que le da un par adicional y reduce la velocidad drásticamente.

A continuación puedes encontrar las especificaciones tanto del motor paso a paso como del driver que se utilizan en este tutorial.

Especificaciones del motor paso a paso 28BYJ-48

Tensión nominal5 V
Resistencia de la bobina50 ohmios
Tipo de bobinaUnipolar
Diámetro - eje0,197″ (5,00 mm)
Longitud - eje y cojinete0,394″ (10 mm)
CaracterísticasEje plano
Tamaño/dimensiónRedondo - 1,100″ de diámetro (28,00 mm)
Distancia de los agujeros de montajeEje plano
Reducción de engranajes1/64(ver nota)
Ángulo de pasoModo de medio paso (recomendado): 0,0879°
Modo de paso completo: 0.176°
Pasos por revoluciónModo de medio paso: 4096(ver nota)
Modo de paso completo: 2048
Estilo de terminaciónCables con conector
Tipo de motorMotorreductor de imanes permanentes
Número de fases4
CosteComprobar el precio

Para más información, puede consultar la hoja de datos aquí.

Nota importante: Los fabricantes suelen especificar que los motores tienen una reducción de engranajes de 64:1. Algunos miembros de los foros de Arduino se dieron cuenta de que esto no era correcto y por eso desmontaron algunos motores para comprobar la relación de transmisión real. Determinaron que la relación de engranaje exacta es, de hecho, 63,68395:1, lo que resulta en aproximadamente 4076 pasos por revolución completa (en modo de medio paso).

No estoy seguro de que todos los fabricantes utilicen exactamente la misma caja de cambios, pero puedes simplemente ajustar los pasos por revolución en el código, para que coincida con tu modelo.

El motor paso a paso de reducción pequeña de Adafruit Industries utiliza el mismo factor de forma que el 28BYJ-48, pero tiene una relación de engranaje diferente. Tiene un conjunto de engranajes de reducción de aproximadamente 1/16, lo que resulta en 513 pasos por revolución (en modo de paso completo). Puedes descargar la hoja de datos aquí.

Para obtener más información sobre el controlador, puede consultar la hoja de datos que aparece a continuación.

Cableado - Conexión del motor paso a paso 28BYJ-48 y la placa de controladores ULN2003 a Arduino UNO

El diagrama/esquema de cableado que aparece a continuación muestra cómo conectar la placa del controlador ULN2003 al motor paso a paso 28BYJ-48 y al Arduino. Las conexiones también se dan en la tabla de abajo.

28BYJ-48-Motor de paso-ULN2003-Driagrama de cableado-Distribución esquemática
Diagrama de cableado para el controlador ULN2003 con motor paso a paso 28BYJ-48 y Arduino.

Utilicé una protoboard y algunos cables de puente para conectar la placa del controlador a una fuente de alimentación externa.

Conexiones de ULN2003 y 28BYJ-48 a Arduino

Placa de controladores ULN2003Conexión
IN1Pin 8 Arduino
IN2Pin 9 Arduino
IN3Pin 10 Arduino
IN4Pin 11 Arduino
-Lógica GND Arduino
-Fuente de alimentación GND
+Alimentación de 5 V

Nota: Es posible alimentar directamente el motor paso a paso desde la salida de 5 V del Arduino. Sin embargo, esto no se recomienda. Si el motor paso a paso consume demasiada corriente puede dañar el Arduino. También encontré que cuando se alimenta el Arduino con la energía USB solamente, obtendría un comportamiento inconsistente y un mal rendimiento del motor paso a paso.

Recomiendo alimentar la placa del driver/motor paso a paso con una fuente de alimentación externa de 5 V, como esta. Debería venir con un conector DC hembra, así que puedes conectarlo fácilmente con algunos cables (de puente). Ten en cuenta que también tienes que conectar el GND del Arduino al pin - de la placa del driver ULN2003.

Después de cargar el código también hay que alimentar el Arduino, ya sea con un cable USB tipo B o a través del conector de alimentación de 5,5 mm.

El puente situado junto a las conexiones de alimentación en la placa del controlador puede utilizarse para desconectar la alimentación del motor paso a paso.

Código básico de ejemplo de Arduino para controlar un motor paso a paso 28BYJ-48

Puedes cargar el siguiente código de ejemplo en tu Arduino utilizando el IDE de Arduino.

Este ejemplo utiliza la biblioteca Stepper.h, que debería venir preinstalada con el IDE de Arduino. Este sketch hace girar el motor paso a paso 1 revolución en una dirección, hace una pausa, y luego gira 1 revolución en la otra dirección.

/* 
  Example sketch to control a 28BYJ-48 stepper motor 
  with ULN2003 driver board and Arduino UNO. 
  More info: https://www.makerguides.com 
*/

// Include the Arduino Stepper.h library:
#include "Stepper.h"

// Define number of steps per rotation:
const int stepsPerRevolution = 2048;

// Wiring:
// Pin 8 to IN1 on the ULN2003 driver
// Pin 9 to IN2 on the ULN2003 driver
// Pin 10 to IN3 on the ULN2003 driver
// Pin 11 to IN4 on the ULN2003 driver

// Create stepper object called 'myStepper', note the pin order:
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  // Set the speed to 5 rpm:
  myStepper.setSpeed(5);
  
  // Begin Serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Step one revolution in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  
  // Step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Explicación del código:

El sketch comienza incluyendo la librería Arduino Stepper.h. Puedes encontrar más información sobre esta librería en la web de Arduino.

// Include the Arduino Stepper.h library:
#include "Stepper.h"

A continuación, definí cuántos pasos necesita el motor para girar 1 revolución. En este ejemplo vamos a utilizar el motor en modo de paso completo. Esto significa que tarda 2048 pasos en girar 360 grados (ver las especificaciones del motor más arriba).

// Define number of steps per rotation:
const int stepsPerRevolution = 2048;

A continuación, hay que crear una nueva instancia de la clase Stepper, que representa un determinado motor paso a paso conectado al Arduino. Para ello utilizamos la función Stepper(steps, pin1, pin2, pin3, pin4) donde pasos es el número de pasos por revolución y pin1 a pin4 son los pines a los que se conecta el motor. Para obtener la secuencia correcta de pasos, tenemos que ajustar los pines en el siguiente orden: 8, 10, 9, 11.

// Create stepper object called 'myStepper', note the pin order:
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

En este caso he llamado al motor paso a paso 'myStepper', pero también puedes utilizar otros nombres, como 'z_motor' o 'liftmotor', etc. Stepper liftmotor = Stepper(stepsPerRevolution, 8, 10, 9, 11);. Puedes crear múltiples objetos de motor paso a paso con diferentes nombres y pines. Esto le permite controlar fácilmente 2 o más motores paso a paso al mismo tiempo.

En la configuración, se puede ajustar la velocidad en rpm con la función setSpeed(rpm). El velocidad máxima para un motor paso a paso 28byj-48 es aproximadamente 10-15 rpm a 5 V.

void setup() {
  // Set the speed to 5 rpm:
  myStepper.setSpeed(5);
  
  // Begin Serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

En la sección de código del bucle, simplemente llamamos al step(steps) que hace girar el motor un número específico de pasos a una velocidad determinada por el setSpeed(rpm) función. Pasando un número negativo a esta función se invierte el sentido de giro del motor.

void loop() {
  // Step one revolution in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  
  // Step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Códigos de ejemplo para el motor paso a paso 28BYJ-48 con Arduino y la biblioteca AccelStepper

En los siguientes tres ejemplos te mostraré cómo puedes controlar tanto la velocidad como la dirección y el número de pasos que debe dar el motor paso a paso. En estos ejemplos utilizaré la librería AccelStepper.

La librería AccelStepper escrita por Mike McCauley es una librería impresionante para usar en tu proyecto. Una de las ventajas es que soporta la aceleración y la desaceleración, pero tiene un montón de otras funciones agradables también.

Puede descargar la última versión de esta biblioteca aquí o hacer clic en el botón de abajo.

Puedes instalar la librería yendo a Sketch > Incluir librería > Añadir librería .ZIP ... en el IDE de Arduino.

Otra opción es ir a Herramientas > Administrar Bibliotecas... o teclear Ctrl + Shift + I en Windows. El Administrador de Bibliotecas se abrirá y actualizará la lista de bibliotecas instaladas.

Instalar una librería Arduino paso 1 abrir Library Manager
Library Manager

Puedes buscar 'accelstepper' y buscar la biblioteca de Mike McCauley. Seleccione la última versión y luego haga clic en Instalar.

Instalación de una biblioteca Arduino paso 2 AccelStepper
Installing AccelStepper Library

1. Código de ejemplo de rotación continua

El siguiente esquema se puede utilizar para hacer funcionar uno o más motores paso a paso de forma continua a una velocidad constante. (No se utiliza ninguna aceleración o desaceleración).

Puede copiar el código haciendo clic en el botón de la esquina superior derecha del campo de código.

/* 
  Example sketch to control a 28BYJ-48 stepper motor 
  with ULN2003 driver board, AccelStepper and Arduino UNO: 
  continuous rotation. More info: https://www.makerguides.com 
*/

// Include the AccelStepper library:
#include "AccelStepper.h"

// Motor pin definitions:
#define motorPin1  8      // IN1 on the ULN2003 driver
#define motorPin2  9      // IN2 on the ULN2003 driver
#define motorPin3  10     // IN3 on the ULN2003 driver
#define motorPin4  11     // IN4 on the ULN2003 driver

// Define the AccelStepper interface type: 4 wire motor in half step mode:
#define MotorInterfaceType 8

// Initialize with pin sequence IN1-IN3-IN2-IN4
AccelStepper stepper = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
  // Set the maximum steps per second:
  stepper.setMaxSpeed(1000);
}

void loop() {
  // Set the speed of the motor in steps per second:
  stepper.setSpeed(500);
  // Step the motor with constant speed as set by setSpeed():
  stepper.runSpeed();
}

Cómo funciona el código:

De nuevo, el primer paso es incluir la biblioteca con #include "AccelStepper.h“.

// Include the AccelStepper library:
#include "AccelStepper.h"

El siguiente paso es definir las conexiones del ULN2003 con el Arduino.

La declaración #define se utiliza para dar un nombre a un valor constante. El compilador sustituirá cualquier referencia a esta constante por el valor definido cuando se compile el programa. Por lo tanto, en todos los casos en los que se menciona motorPin1el compilador lo sustituirá por el valor 8 al compilar el programa.

// Motor pin definitions:
#define motorPin1  8      // IN1 on the ULN2003 driver
#define motorPin2  9      // IN2 on the ULN2003 driver
#define motorPin3  10     // IN3 on the ULN2003 driver
#define motorPin4  11     // IN4 on the ULN2003 driver

El siguiente paso es especificar el tipo de interfaz del motor para la biblioteca AccelStepper. En este caso vamos a conducir un motor paso a paso de 4 hilos en modo de medio paso, por lo que establecemos el tipo de interfaz a '8'. Puedes encontrar los otros tipos de interfaz aquí. Si quieres hacer funcionar el motor en modo de paso completo (menos pasos por revolución), simplemente cambia el 8 por el 4.

// Define the AccelStepper interface type: 4 wire motor in half step mode:
#define MotorInterfaceType 8

A continuación, es necesario crear una nueva instancia de la clase AccelStepper con el tipo de interfaz del motor y las conexiones adecuadas. Para obtener la secuencia de pasos correcta, necesitamos establecer los pines en el siguiente orden: motorPin1, motorPin3, motorPin2, motorPin4.

En este caso he llamado al motor paso a paso 'stepper', pero también puedes utilizar otros nombres, como 'z_motor' o 'liftmotor', etc. AccelStepper liftmotor = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);. Puedes crear múltiples objetos de motor paso a paso con diferentes nombres y pines. Esto le permite controlar fácilmente 2 o más motores paso a paso al mismo tiempo.

// Initialize with pin sequence IN1-IN3-IN2-IN4
AccelStepper stepper = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);

En la sección de configuración del código, definimos la velocidad máxima en pasos/segundo con la función setMaxSpeed(). Las velocidades de más de 1000 pasos por segundo pueden ser poco fiables, así que establezco esto como el máximo. Tenga en cuenta que especifico el nombre del motor paso a paso ('stepper'), para el que quiero definir la velocidad máxima. Si tienes varios motores paso a paso conectados, puedes especificar una velocidad diferente para cada motor: stepper2.setMaxSpeed(500);.

void setup() {
  // Set the maximum steps per second:
  stepper.setMaxSpeed(1000);
}

En el bucle, primero establecemos la velocidad a la que queremos que funcione el motor con la función setSpeed(). (también puede colocar esto en la sección de configuración del código).

stepper.runSpeed() sondea el motor y cuando se debe dar un paso ejecuta 1 paso. Esto depende de la velocidad ajustada y del tiempo transcurrido desde el último paso. Si quieres cambiar la dirección del motor, puedes establecer una velocidad negativa: stepper.setSpeed(-400); gira el motor hacia el otro lado.

void loop() {
  // Set the speed of the motor in steps per second:
  stepper.setSpeed(500);
  // Step the motor with constant speed as set by setSpeed():
  stepper.runSpeed();
}

En el modo de medio paso, una revolución requiere 4096 pasos, por lo que 500 pasos/seg resulta en aproximadamente 7 rpm.

2. Croquis para controlar el número de pasos o revoluciones

Con el siguiente esquema puedes controlar tanto la velocidad, como la dirección y el número de pasos/revoluciones.

En este caso, el motor paso a paso gira 1 revolución en el sentido de las agujas del reloj con 500 pasos/seg, luego gira 1 revolución en sentido contrario a las agujas del reloj con 1000 pasos/seg, y por último gira 2 revoluciones en el sentido de las agujas del reloj con 1000 pasos/seg.

/* Example sketch to control a 28BYJ-48 stepper motor with 
  ULN2003 driver board, AccelStepper and Arduino UNO
  More info: https://www.makerguides.com */

#include "AccelStepper.h"

// Motor pin definitions:
#define motorPin1  8      // IN1 on the ULN2003 driver
#define motorPin2  9      // IN2 on the ULN2003 driver
#define motorPin3  10     // IN3 on the ULN2003 driver
#define motorPin4  11     // IN4 on the ULN2003 driver

// Define the AccelStepper interface type; 4 wire motor in half step mode:
#define MotorInterfaceType 8

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper library with 28BYJ-48 stepper motor:
AccelStepper stepper = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
  // Set the maximum steps per second:
  stepper.setMaxSpeed(1000);
}

void loop() {
  // Set the current position to 0:
  stepper.setCurrentPosition(0);

  // Run the motor forward at 500 steps/second until the motor reaches 4096 steps (1 revolution):
  while (stepper.currentPosition() != 4096) {
    stepper.setSpeed(500);
    stepper.runSpeed();
  }
  delay(1000);

  // Reset the position to 0:
  stepper.setCurrentPosition(0);

  // Run the motor backwards at 1000 steps/second until the motor reaches -4096 steps (1 revolution):
  while (stepper.currentPosition() != -4096) {
    stepper.setSpeed(-1000);
    stepper.runSpeed();
  }

  delay(1000);

  // Reset the position to 0:
  stepper.setCurrentPosition(0);
  // Run the motor forward at 1000 steps/second until the motor reaches 8192 steps (2 revolutions):
  while (stepper.currentPosition() != 8192) {
    stepper.setSpeed(1000);
    stepper.runSpeed();
  }

  delay(3000);
}

Explicación del código:

La primera parte del código hasta la sección loop() es exactamente la misma que en el ejemplo anterior.

En el bucle hago uso de un bucle while en combinación con el currentPosition() función. En primer lugar, puse a cero la posición actual del motor paso a paso con stepper.setCurrentPosition(0).

  // Set the current position to 0:
  stepper.setCurrentPosition(0);

A continuación, utilizamos el bucle while. Un bucle while hará un bucle continuo, e infinito, hasta que la expresión dentro del paréntesis, () se vuelva falsa. Así que en este caso compruebo si la posición actual del motor paso a paso no es igual a 4096 pasos (!= significa: no es igual a). Mientras no sea así, hacemos funcionar el motor paso a paso a una velocidad constante, tal y como se establece en setSpeed().

  // Run the motor forward at 500 steps/second until the motor reaches 4096 steps (1 revolution):
  while (stepper.currentPosition() != 4096) {
    stepper.setSpeed(500);
    stepper.runSpeed();
  }

En el resto del bucle, hacemos exactamente lo mismo, sólo que con una velocidad y una posición de destino diferentes.

3. Código de ejemplo de aceleración y desaceleración

Con el siguiente sketch puedes añadir aceleración y desaceleración a los movimientos del motor paso a paso, sin ninguna codificación complicada. La primera sección de este sketch es la misma que en el ejemplo 1, pero la configuración y el bucle son diferentes.

El motor funcionará a dos revoluciones de ida y vuelta con una velocidad de 1000 pasos por segundo y una aceleración de 200 pasos/segundo2.

/* 
  Example sketch to control a 28BYJ-48 stepper motor with ULN2003 driver board, 
  AccelStepper and Arduino UNO: acceleration and deceleration. 
  More info: https://www.makerguides.com 
*/

#include "AccelStepper.h"

// Motor pin definitions:
#define motorPin1  8      // IN1 on the ULN2003 driver
#define motorPin2  9      // IN2 on the ULN2003 driver
#define motorPin3  10     // IN3 on the ULN2003 driver
#define motorPin4  11     // IN4 on the ULN2003 driver

// Define the AccelStepper interface type; 4 wire motor in half step mode:
#define MotorInterfaceType 8

// Initialize with pin sequence IN1-IN3-IN2-IN4
AccelStepper stepper = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
  // Set the maximum steps per second:
  stepper.setMaxSpeed(1000);
  // Set the maximum acceleration in steps per second^2:
  stepper.setAcceleration(200);
}

void loop() {
  // Set target position:
  stepper.moveTo(8192);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();
  
  delay(1000);
  
  // Move back to original position:
  stepper.moveTo(0);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();
  
  delay(1000);
}

Cómo funciona el código:

En la configuración, además de la velocidad máxima, también tenemos que definir la aceleración/desaceleración. Para ello, utilizamos la función setAcceleration().

void setup() {
  // Set the maximum steps per second:
  stepper.setMaxSpeed(1000);
  // Set the maximum acceleration in steps per second^2:
  stepper.setAcceleration(200);
}

En la sección de bucle del código, utilicé una forma diferente de dejar que el motor gire un número predefinido de pasos. Primero establecí la posición objetivo con la función moveTo(). A continuación, simplemente utilizamos la función runToPosition() para que el motor funcione hasta la posición objetivo con la velocidad y la aceleración establecidas. El motor se desacelerará antes de alcanzar la posición objetivo.

void loop() {
  // Set target position:
  stepper.moveTo(8192);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();
  
  delay(1000);
  
  // Move back to original position:
  stepper.moveTo(0);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();
  
  delay(1000);
}

Por último, volvemos a poner la nueva posición de destino en el 0, de forma que volvemos al origen.

Conclusión

En este artículo te he mostrado cómo puedes controlar un motor paso a paso 28BYJ-48 con un driver ULN2003 y Arduino. Hemos visto 4 ejemplos, utilizando las librerías Stepper y AccelStepper. Espero que lo hayas encontrado útil e informativo. Si lo has hecho, ¡compártelo con un amigo al que también le guste la electrónica!

Me encantaría saber qué proyectos planeas construir (o ya has construido) con este motor paso a paso.Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.

Adam

Sunday 3rd of March 2024

Is your first link to the MEAN WELL power supply a mistake? I've been waiting all week to get it in and now I'm seeing you link to an Alitove power supply adapter and DC connector that isn't in your part list...?

Stefan Maetschke

Monday 4th of March 2024

Hi, both of them are fine. Any DC power supply with 5V (up to 12V) output and sufficient current will work. The current will depend on the motors, and the number of motors you want to control. A single ULN2003 Driver can output up to 500mA.

John

Wednesday 7th of February 2024

Well that was fun. Brings several projects to mind. Using a Nano and powering the motor externally. All codes worked flawless. Many thanks!

Stefan Maetschke

Friday 9th of February 2024

Thanks, much appreciated!

Jan

Monday 20th of November 2023

Tried the first sketch only. Power the driver board from the Arduino's 5v pin as I had with the example sketch from manufacturer. Added the before I started but it still just made the motor buzz. Dropped the speed to 1rpm, still buzzing. changed the number of steps per rev to 4096 and the motor now turns half a revolution, stops for a buzz and then continues for another half a revolution. Increase the speed to 5rpm but no change to the behaviour. Tried it with the other steppers in the set that were not faulty and got the same result. Methinks the code and/or the library cause a problem with my 28BYJ-48s or my UNO. The sketch provided with the manufacturer's wiki didn't call a library and worked (after I edited it a bit), and ran all my motors backward (as a result of a different edit). I am not good enough at this to start a sketch, I have to attempt to mend other people's sketches, and half the time they still don't work.

Jan

Tuesday 21st of November 2023

@Stefan Maetschke, This has now been deleted twice from my posts by the website, so maybe that is why it does not in the sketch I was using. The line "(pointy bracket)Stepper.h(pointy bracket)" See if that gets censored as well. Inside the pointy brackets is the phrase Stepper(dot)h

Jan

Tuesday 21st of November 2023

@Stefan Maetschke, yes, good call. I was using 5V from the Arduino, in error; but all morning I have now been using a bench power supply for the motor, 5V at 350mA. After another half day's research and testing I have established that my motors are 4096 steps per revolution, achieved by 64 steps geared down by 64. The manufacturer's code (corrected) turns one revolution clockwise and then buzzes for the same time, then starts a second CW revolution. The Dronebot Workshop single motor code does not work at all, even after I have corrected the steps per rev and changed the firing sequence back to 8-9-10-11 (that gave me 1/4 revolution just once, the rest of the time gentle buzzing). The first code on this site exactly half works if edited as follows. I have not yet tried any more. 1 add below #include. 2 Change stepsPerRevolution to 2048 3 reduce the setSpeed to my motor's absolute maximum (from testing) of 11 rpm. This half works in so far as it does a clockwise revolution, pauses for half a second and does another. The serial monitor started by editing out the counterclockwise revolutions, even on the few occasions it did one or tries. Now the Serial Monitor writes clockwise and counterclockwise alternately while the spindle only turns clockwise. As it looks like the code may be sorted it seems that all five of my motors are faulty in so far as they don't take any notice of the minus sign at the start of (-stepsPerRevolution). Or China has managed to map produce millions of individually unique items.

Stefan Maetschke

Tuesday 21st of November 2023

I tested all 4 code examples with the given wiring and they work. Are you powering the stepper motor from your Arduino or from an external power source? If you power the stepper motor from the Arduino that is likely to cause issues. The Arduino may not provide sufficient current to run the motor and the Arduino may get damaged. It sounds like that the stepper motor get insufficient voltage (should be 5V...12V) or current.

Burbujas

Sábado 29 de octubre de 2022

AYUDA. Lo he intentado todo....

Estoy usando el motor y el controlador especificado aquí con un arduino nano y no puede obtener ninguna codificación para mover el motor. Las luces LED están en plena en el conductor, pero theres ningún movimiento como su ciclo a través de las fases. He intercambiado dos drivers y dos motores para asegurarme de que los componentes no están fritos. Cuando conecto el motor directamente al Nano puedo sentir que vibra como si tratara de moverse, pero es evidente que tiene poca potencia (que sé que es). Cuando lo tengo conectado de nuevo al driver lo estoy alimentando con una fuente de alimentación externa de 5V y 2,1A.

¿Qué me falta aquí? Siento que he pasado por todos los temas que tienen que ver con este motor en el sitio de la comunidad de arduino y todavía estoy tan, tan, tan atascado.

Jan

Tuesday 21st of November 2023

@Bubbles, I have a similar but slightly different problem. these things are spectacularly temperamental. You look like you have the power sorted. vibration means juice is getting through. most likely is that your setup is sending the pulses too quickly for the motor to cope with them. Try reducing the "setSpeed" to 5. If it still buzzes try 1. I don't think you can go lower than that, my computer running IDE1.8.19 and an UNO can't cope with rpm below 1, but that doesn't mean yours won't either. If that still doesn't work, keep the speed low but play around with the number of pulses per revolution. My motors say the step angle is "5.625 x 1/64" which actually means the internal motor takes 64 pulses per 360 degree circle, and that is geared down 64fold by cogs on its way to the output shaft, meaning 4096 pulses. But for the purposes of the first sketch here, my 4096 step motors need the "stepsPerRevolution" set to 2048 to do one rotation. If changing speed and number of pulses per rev don't work, try reversing the direction of the spindle in your code by putting a minus before the stepsPerRevolution in the second line of code in the loop. Otherwise it is not impossible that your motor is faulty. We still have the rational rule that cheap = rubbish, even with China out-Capitalism-ing the West. Good luck

r4Y

Martes 30 de marzo de 2021

Hola, funciona un poco, pero el motor paso a paso no gira. ot vibra littlebit tho. ¿cómo puedo arreglar esto?

Travis

Viernes 6 de mayo de 2022

@r4Y, esto creo que sería debido a una posibilidad de un par de cosas. uno) podría ser la velocidad se establece demasiado alto y el par no se está produciendo, o el número de pasos definidos en el código está fuera, o incluso cuántos pasos se llaman en el bucle o lo que sea no son enteros reales después de la conversión a hex / binario por el compilador, tres) las señales que van al motor en una fase o secuencia incorrecta. si miras el modulo breakout UN2003, los LEDs de salida se ven esencialmente como un contador binario, y cuando el motor esta pisando bien sigue la secuencia de conteo binario para la que ha sido configurado. sin embargo, cuando los cables se colocan en pines mal ordenados el campo magnético no está siendo girado de una manera lógica o suave y al azar produce una fuerza de rotación aparentemente al azar, pero es sólo cualquier fase que está conectada, y los LEDs de salida muestran este patrón secuencial feo. sé que esto es tarde así que lo siento.

r4Y

Martes 30 de marzo de 2021

estoy usando arduino mega 2560 BTW