Sunteți pe pagina 1din 5

CONTROL DE UN MOTOR PASO A PASO CON ARDUINO

Con esta prctica vamos a aprender a controlar un motor paso a paso con ARDUINO.
Vamos a trabajar con el motor paso a paso 28BYJ-48 y el driver ULN2003 (ambos los
podis conseguir fcilmente y por un mdico precio en internet)

Para controlar el motor lo podemos hacer de tres formas diferentes:


1. Sin utilizar ninguna libreria.
2. Utilizando la librera estandar de arduino "stepper.h"
3. Utilizando la librera "CustomStepper.h"

Veamos algunos ejemplos con cada una de estas opciones:

1. SIN UTILIZAR NINGUNA LIBRERA.

/* Control de motor paso a paso bipolar sin utilizar librerias


* ------------------------------------------------------------
*/

/*Declaramos la correspondencia entre pines del ARDUINO y el driver


ULN2003.
*/
int motorPin1 = 8; //pin8----1N4
int motorPin2 = 9; //pin8----1N3
int motorPin3 = 10; //pin8----1N2
int motorPin4 = 11; //pin8----1N1

//Definimos la funcin que provocar el giro antihorario


/* El parmetro de entrada "delayTime" definir la velocidad de giro
*/
void gira_antihorario(int delayTime)
{
digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
//Definimos la funcin que provocar el giro horario
void gira_horario(int delayTime)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
}

void setup() {
pinMode(motorPin1, OUTPUT); // Configuracin de los PINes como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);

void loop()
//gira media vuelta en sentido antihorario rpido
{
for (int i=0; i <= 265; i++){
gira_antihorario(2);
}
delay(2000);//espera 2 segundos
//gira media vuelta en sentido horario lento
for (int i=0; i <= 265; i++){
gira_horario(18);
}
delay(2000);//espera 2 segundos
}

2.UTILIZANDO LA LIBRERA ESTNDAR "Stepper.h"

Para profundizar y ver todas las posibilidades de la esta librera, consultad el


siguiente enlace.

#include <Stepper.h>
#define STEPS 200 //360 divided by step angle

Stepper stepper(STEPS, 8, 9, 10, 11);

void setup(){
stepper.setSpeed(60); //RPMs
}

void loop(){
stepper.step(100);
delay(1000);
stepper.step(-100);
delay(1000);
}

3.UTILIZANDO LA LIBRERA "CustomStepper.h"


En este tercer ejemplo lo que har el programa es controlar el ngulo de giro, girando 90
cada 2 segundos.
Para ello hay que descargarse la librera del siguiente enlace, descomprimir la carpeta,
copiar la carpeta CustomStepper dentro de la carpeta Arduino->Libraries de vuestro
ordenador y arrancar de nuevo el IDE arduino.
Para profundizar y ver todas las posibilidades de la esta librera, consultad el
siguiente enlace.

// Control motor paso a paso unipolar con la libreria "CustomStepper.h"

#include <CustomStepper.h>

//Define los parametros caracteristicos del motor


CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

void setup()
{
//Define la velocidad del motor
stepper.setRPM(16);
//Define el numero de pasos por vuelta
stepper.setSPR(4075.7728395);
}

void loop()
{
if (stepper.isDone())
{
delay(2000); //para que gire a intervalos de 90, con pausas de 2 segundos
//si se quita gira de forma continua

//Define el sentido de rotacin (CW = Horario o CCW = Antihorario)


stepper.setDirection(CCW);
//Define el angulo de rotacin
stepper.rotateDegrees(90);

}
stepper.run(); // imprescindible para que funcione la libreria
}

Publicado por Luis Torreo Peromingo en 0:44

S-ar putea să vă placă și