Para controlar el motor lo podemos hacer de tres formas diferentes:
1. Sin utilizar ninguna libreria.
2. Utilizando la librería estandar de arduino "stepper.h"
3. Utilizando la librería "CustomStepper.h"
Veamos algunos ejemplos con cada una de estas opciones:
1. SIN UTILIZAR NINGUNA LIBRERÍA.
/* 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 función que provocará el giro antihorario
/* El parámetro 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 función 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); // Configuración de los PINes como salida digital
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
//gira media vuelta en sentido antihorario rápido
{
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 LIBRERÍA ESTÁNDAR "Stepper.h"
Para profundizar y ver todas las posibilidades de la esta librería, 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 LIBRERÍA "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 librería 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 librería, 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 rotación (CW = Horario o CCW = Antihorario)
stepper.setDirection(CCW);
//Define el angulo de rotación
stepper.rotateDegrees(90);
}
stepper.run(); // imprescindible para que funcione la libreria
}
No hay comentarios:
Publicar un comentario