Diferentes formas de controlar con Arduino/Genuino el motor por pasos/steeper motor 28BYJ-48 con el driver ULN2003

Si quereis conocer como funciona el motor por pasos/steeper motor 28BYJ-48 con el driver ULN2003, aquí os presentamos 6 formas diferentes para que podáis controlarlo con Arduino/Genuino.

  • Como hacer que  se mueva de manera continua
  • Como ubicarlo en diferentes posiciones preestablecidas
  • Como realizar un recorrido de ida y vuelta  entre dos posiciones preestablecidas
  • Como controlar la posición con un potenciómetro
  • Como controlar la velocidad con un potenciómetro
  • Como hacer que realice cambios aleatorios en velocidad, posición y aceleración

Si quieres aprender a utilizar el motor por pasos/steeper motor 28BYJ-48 con el driver ULN2003 y Arduino/Genuino y tienes un proyecto en mente y voluntad, encontrarás fácilmente la información que te ayudará a realizar tu proyecto y ejecutarlo fácilmente.




Un motor paso a paso se puede mover en incrementos angulares precisos, conocidos como pasos. A efectos prácticos, un motor paso a paso es muy parecido a un servo: se mueve a una posición predefinida. Los servos ,sin embargo, se limitan generalmente a un rango de 0-180 grado, mientras que un motor paso a paso puede girar de forma continua, similar a un motor ordinario de DC.

La ventaja de un motor paso a paso  es que se puede lograr mucho mayor precisión y control sobre el movimiento. La desventaja de usar steppers es que son un poco más compleja de controlar que los servos y los motores de corriente continua.

El 28BYJ-48 Hoja de datos del motor de pasos Datasheet




El 28BYJ-48 es un pequeño motor paso a paso de 5 voltios, bastante barato. Estos motores paso a paso son aparentemente ampliamente utilizados para controlar múltiples elementos y son producidos en masa. Debido a la relación de reducción de engranajes de “aproximadamente” 64:1 ofrece un par decente para su tamaño a una velocidad de unos 15 rotaciones por minuto (RPM). Con algunos programas de “trucos” para acelerar de forma gradual y una fuente de alimentación de tensión superior se puede obtener alrededor de 25+ RPM. Estos pequeños steppers se pueden comprar junto con un pequeño controlador del motor de pasos ULN2003 compatible con Arduino. El bajo costo y pequeño tamaño hace que el 28BYJ-48 una opción ideal para pequeñas aplicaciones robóticas y una excelente introducción a stepper control del motor con Arduino. Aquí están las especificaciones detalladas del motor paso a paso 28BYJ-48Hoja de datos del motor de pasos 28BYJ-48 Datasheet.




El motor cuenta con 4 bobinas de alambres que funcionan en una secuencia para girar el eje del motor magnético. Cuando se utiliza el método de paso completo, 2 de las 4 bobinas son activadas ​​en cada paso. La biblioteca de pasos por defecto que viene pre-instalada con el Arduino IDE utiliza este método. La ficha técnica del 28BYH-48 especifica que el método preferido para la conducción de este motor paso a paso es el método de medio paso, en el que primero se activa la bobina 1 solamente, despues la bobina 1 y 2 juntas, despues la bobina 2 solamente y así sucesivamente … Con 4 bobinas, esto significa 8 señales diferentes.

 Tipo de motor  Motor paso a paso unipolar
Tipo de conección  5 Conexión del cable (al controlador del motor)
voltaje  5-12 voltios DC
Frecuencia  100 Hz
Modo de Paso  Modo de medio paso recomendado (8 paso de la señal de control de secuencia)
Ángulo Paso Modo de medio paso: secuencia de señal de control 8 paso (recomendada)5.625 grados por paso / 64 pasos por una revolución del eje del motor interno de modo de paso completo: secuencia de señal de control de 4 pasos 11.25 grados por paso / 32 pasos por una revolución de la interna eje de motor
Relación de transmisión Fabricante especifica 64: 1. Algunas personas pacientes y diligentes en los foros Arduino han desmontado el tren de engranajes de estos pequeños motores y determinó que la relación de transmisión exacta es de hecho 63,68395: 1. Mis observaciones confirman sus hallazgos. Estos medios que en el modo de medio paso recomendado tendremos: 64 pasos por rotación del motor x 63.684 relación de transmisión = 4076 pasos por vuelta completa (aproximadamente).
Cableado al controlador ULN2003 A (azul), B (rosa), C (Amarillo), D (naranja), E (rojo, de punto medio)
Peso 30g

Cableado del conductor del motor de pasos ULN2003 para Arduino Uno

El controlador del motor de pasos ULN2003 le permite controlar fácilmente el motor paso a paso 28BYJ-48 desde un microcontrolador, como el Arduino Uno. Un lado de la placa tiene un conector de 5 pines, donde se conecta el cable del motor paso a paso , y 4 LEDs para indicar que bobina se alimenta en cada momento. Los dos pines por debajo de las 4 resistencias, es donde se proporciona alimentación al motor paso a paso. Tenga en cuenta que no se recomienda alimentar el motor con la conexión de 5 V de la placa Arduino, ya que el motor puede drenar más corriente que el microcontrolador de la que puede manejar y podría dañarlo. En el centro del tablero tenemos el chip ULN2003. Debajo están las 4 entradas de control que se deben conectar a los cuatro pines digitales de Arduino.

Datos-ULN2003

Conecte el conductor ULN2003 IN1, IN2, IN3 y IN4 al pin digital 1, 2, 3, y 4, respectivamente, en la Arduino Uno. Conecte el cable positivo de una batería de 5-12V a la patilla “+” del conductor ULN2003 y el pin “-” a GND. Asegúrese de que el puente “on / off” está conectado. Si conecta la placa Arduino de una batería diferente, conecte los GND juntos.

Conexión de la placa Arduino Uno con el driver ULN2003 y el motor por pasos 28BYJ-48

 

Como utilizar el motor por pasos/steeper motor 28BYJ-48 con Arduino/Genuino

Para mejorar el rendimiento disponemos de la biblioteca AccelStepper-1.53-1.zip. Se ejecutan los motores por pasos 28BYJ-48 steppers de manera muy eficiente y también es compatible con la aceleración (que permite el paso a paso llegar a una velocidad más alta). Asegúrese de descargar e instalar la biblioteca AccelStepper primero!AccelStepper-1.53-1.zip

Para ver todas sus funciones podéis visitar la página de la biblioteca en www.airspayce.com

Para cada motor usamos cuatro pines para controlar cada driver y damos nombre a cada motor. En estos ejemplos usamos el driver conectado a los pines 1, 2, 3, y 4, y el motor se llama “stepper”.

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

Despues incluimos void setup() y void loop().

En void setup() podemos configurar la velocidad y la aceleración. Podeis probar diferentes configuraciones para ver como funciona cada una.

void setup()
{
  stepper.setMaxSpeed(1000.0); // Escoger velocidad máxima
  stepper.setAcceleration(100.0); // Escoger aceleración
}

Como hacer que un motor por pasos/steeper motor 28BYJ-48 se mueva de manera continua

// Código Arduino/Genuino para hacer que un motor por pasos/steeper motor 28BYJ-48 se mueva de manera continua

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{  
   stepper.setMaxSpeed(1000); // Escoger velocidad máxima
   stepper.setSpeed(50);	 // Escoger velocidad
}

void loop()
{  
   stepper.runSpeed();
}

Como ubicar un motor por pasos/steeper motor 28BYJ-48 en diferentes posiciones preestablecidas

 

A veces nos puede interesar que el motor por pasos/steeper motor se situe en diferentes posiciones y vaya pasando de una a otra sucesivamente. En este código hacemos que el motor por pasos/steeper motor pase de una posición a otras esperando un periodo de tiempo entre ellas.

stepper.runToNewPosition(0); //Primera posición
  delay(1000); // Tiempo de pausa en ms

  stepper.runToNewPosition(4000);
  delay(2000);

  stepper.runToNewPosition(2000);
  delay(3000);

  stepper.runToNewPosition(6000);
  delay(4000);

En este código hacemos pasar motor por pasos/steeper motor  por diferentes posiciones con la función stepper.runToNewPosition();

Y esperamos un tiempo con la función delay();

Copia, pega y modifica este código según tus necesidades. Puedes variar la velocidad máxima y la aceleración, y puedes añadir o eliminar posiciones y variar el tiempo de espera.

// Código Arduino/Genuino para ubicar un motor por pasos/steeper motor 28BYJ-48 en diferentes posiciones preestablecidas

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
  stepper.setMaxSpeed(1000.0); // Escoger velocidad máxima
  stepper.setAcceleration(100.0); // Escoger aceleración
}

void loop()
{
  // Podemos añadir o eliminar posiciones
  // Podemis variar el tiempo de pausa

  stepper.runToNewPosition(0); //Primera posición
  delay(1000); // Tiempo de pausa en ms

  stepper.runToNewPosition(4000);
  delay(2000);

  stepper.runToNewPosition(2000);
  delay(3000);

  stepper.runToNewPosition(6000);
  delay(4000);
}

Como realizar un recorrido de ida y vuelta con un motor por pasos/steeper motor 28BYJ-48 entre dos posiciones preestablecidas

En este ejemplo el motor se mueve de una posición inicial a una posición final y vuelve al principio para repetir la secuencia indefinidamente. La posición inicial es 0 y la posición final la fijamos con la función stepper.moveTo();

// Código Arduino/Genuino para realizar un recorrido de ida y vuelta
// con un motor por pasos/steeper motor 28BYJ-48 entre dos posiciones preestablecidas

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
  stepper.setMaxSpeed(100); // Escoger velocidad máxima
  stepper.setAcceleration(20); // Escoger aceleración
  stepper.moveTo(500); // Posición de destino
}

void loop()
{
  // Al llegar a la posición de destino vuelve a la posición 0
  if (stepper.distanceToGo() == 0)
    stepper.moveTo(-stepper.currentPosition());

  stepper.run();
}

 

Como controlar la posición de un motor por pasos/steeper motor 28BYJ-48 con un potenciómetro

 

 

// Código Arduino/Genuino para controlar la posición de un motor por pasos/steeper motor 28BYJ-48 con un potenciómetro

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
#define ANALOG_IN A0

void setup()
{  
  stepper.setMaxSpeed(1000);
}

void loop()
{
  // Read new position
  int analog_in = analogRead(ANALOG_IN);
  stepper.moveTo(analog_in);
  stepper.setSpeed(100);
  stepper.runSpeedToPosition();
}

 

 

Como controlar la velocidad de un motor por pasos/steeper motor 28BYJ-48 con un potenciómetro

 

// Código Arduino/Genuino para controlar la velocidad de un motor por pasos/steeper motor 28BYJ-48 con un potenciómetro

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

// This defines the analog input pin for reading the control voltage
// Tested with a 10k linear pot between 5v and GND
#define ANALOG_IN A0

void setup()
{  
  stepper.setMaxSpeed(1000);
}

void loop()
{
  int analog_in = analogRead(ANALOG_IN);
  stepper.setSpeed(analog_in);
  stepper.run();
}

 

Como hacer que un motor por pasos/steeper motor 28BYJ-48 realice cambios aleatorios en velocidad, posición y aceleración

// Código Arduino/Genuino para hacer que un motor por pasos/steeper motor 28BYJ-48 realice cambios aleatorios en velocidad, posición y aceleración

#include <AccelStepper.h>  // Incluimos la biblioteca AccelStepper
#define HALFSTEP 8 // Definimos HALFSTEP 8 para poder usar el motor por pasos/steeper motor 28BYJ-48

// Definimos los pines del driver ULN2003

#define motorPin1 1 // Pin 1 en el pin IN1 del driver ULN2003
#define motorPin2 2 // Pin 2 en el pin IN2 del driver ULN2003
#define motorPin3 3 // Pin 3 en el pin IN3 del driver ULN2003
#define motorPin4 4 // Pin 4 en el pin IN4 del driver ULN2003

// Damos nombre al motor "steeper" y le adjudicamos las caracteristicas anteriores

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
}

void loop()
{
  if (stepper.distanceToGo() == 0)
  {
    // Random change to speed, position and acceleration
    // Make sure we dont get 0 speed or accelerations
    delay(1000);
    stepper.moveTo(rand() % 200);
    stepper.setMaxSpeed((rand() % 200) + 1);
    stepper.setAcceleration((rand() % 200) + 1);
  }
  stepper.run();
}

[catlist category=conceptos basicos arduino]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *