El Código
l
int PasosM0 = 4; // Pin 4 Habilitador de los pasos del Driver A4988 = M0
int PasosM1 = 3; // Pin 3 Habilitador de los pasos del Driver A4988 = M1
int PasosM2 = 2; // Pin 2 Habilitador de los pasos del Driver A4988 = M2
int Habilitador = 12; // Habilita Corriente con Enable.
int LedGiraIzquierda = 7; // 1° Led Verde, Aviso de Giro a la Izquierda.
int LedGiraDerecha = 6; // 2° Led Verde, Aviso de Giro a la Derecha.
int LedNoGira = 5; // Led Rojo, Aviso sin Movimiento.
const int PinDireccion = 8; // Pin Direcion
const int PinStep = 9; // Pin Step.
int TiempoStep ; // Variable Tiempo.
//------------------------------------------------------------------------------------------------------------------
void setup() {
pinMode(PinDireccion, OUTPUT);
pinMode(PinStep, OUTPUT);
pinMode(Habilitador, OUTPUT); // Habilita Como Salida Digital.
pinMode(LedGiraIzquierda, OUTPUT); // Habilita Como Salida Digital.
pinMode(LedGiraDerecha, OUTPUT); // Habilita Como Salida Digital.
pinMode(LedNoGira, OUTPUT); // Habilita Como Salida Digital.
pinMode(PasosM0, OUTPUT); // Habilita Como Salida Digital.
pinMode(PasosM1, OUTPUT); // Habilita Como Salida Digital.
pinMode(PasosM2, OUTPUT); // Habilita Como Salida Digital.
digitalWrite(Habilitador, LOW); // Al Arranque pone en estado LOW. Habilita.
digitalWrite(PasosM0, LOW); // Al Arranque pone en estado LOW.
digitalWrite(PasosM1, LOW); // Al Arranque pone en estado LOW.
digitalWrite(PasosM2, LOW); // Al Arranque pone en estado LOW.
}
//------------------------------------------------------------------------------------------------------------------
void loop() {
digitalWrite(Habilitador, LOW);
VelocidadMuyLento();
AvisoLedGiraIzquierda();
GiraIzquierdaLento();
GiraIzquierdaAumenta();
GiraIzquierdaRapido();
GiraIzquierdaDisminuye();
GiraIzquierdaLento();
AvisoLedNoGira();
digitalWrite(Habilitador, HIGH);
delay(500);
digitalWrite(Habilitador, LOW);
AvisoLedGiraDerecha();
GiraDerechaLento();
GiraDerechaAumenta();
GiraDerechaRapido();
GiraDerechaDisminuye();
GiraDerechaLento();
AvisoLedNoGira();
digitalWrite(Habilitador, HIGH);
delay(500);
}
//...............................................................................................
void GiraIzquierdaLento() {
digitalWrite(PinDireccion, HIGH);
TiempoStep = 300;
for (int x = 0; x < 4000; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
//...............................................................................................
void GiraIzquierdaRapido() {
digitalWrite(PinDireccion, HIGH);
TiempoStep = 25;
for (int x = 0; x < 30000; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
//...............................................................................................
void GiraIzquierdaAumenta() {
digitalWrite(PinDireccion, HIGH);
for (int Y = 300; Y > 25; Y--) {
TiempoStep = Y;
for (int x = 0; x < 50; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
}
//...............................................................................................
void GiraIzquierdaDisminuye() {
digitalWrite(PinDireccion, HIGH);
for (int Y = 25; Y < 300; Y++) {
TiempoStep = Y;
for (int x = 0; x < 50; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
}
//...............................................................................................
void GiraDerechaLento() {
digitalWrite(PinDireccion, LOW);
TiempoStep = 300;
for (int x = 0; x < 4000; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
//...............................................................................................
void GiraDerechaRapido() {
digitalWrite(PinDireccion, LOW);
TiempoStep = 25;
for (int x = 0; x < 30000; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
//...............................................................................................
void GiraDerechaAumenta() {
digitalWrite(PinDireccion, LOW);
for (int Y = 300; Y > 25; Y--) {
TiempoStep = Y;
for (int x = 0; x < 50; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
}
//...............................................................................................
void GiraDerechaDisminuye() {
digitalWrite(PinDireccion, LOW);
for (int Y = 25; Y < 300; Y++) {
TiempoStep = Y;
for (int x = 0; x < 50; x++) {
digitalWrite(PinStep, HIGH);
delayMicroseconds(TiempoStep);
digitalWrite(PinStep, LOW);
delayMicroseconds(TiempoStep);
}
}
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedNoGira() { // Accion Aviso con Led Rojo Sin Giro del Motor.
digitalWrite(LedGiraIzquierda, LOW); // Apaga Led.
digitalWrite(LedGiraDerecha, LOW); // Apaga Led.
digitalWrite(LedNoGira, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedGiraIzquierda() { // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(LedGiraDerecha, LOW); // Apaga Led.
digitalWrite(LedNoGira, LOW); // Apaga Led.
digitalWrite(LedGiraIzquierda, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void AvisoLedGiraDerecha() { // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(LedNoGira, LOW); // Apaga Led.
digitalWrite(LedGiraIzquierda, LOW); // Apaga Led.
digitalWrite(LedGiraDerecha, HIGH); // Enciende Led.
}
//------------------------------------------------------------------------------------------------------------------
void VelocidadMuyLento() {
digitalWrite(PasosM0, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM1, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM2, HIGH); // Pone en estado HIGH.
}
//------------------------------------------------------------------------------------------------------------------
void VelocidadLento() {
digitalWrite(PasosM0, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM1, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM2, LOW); // Pone en estado HIGH.
}
//------------------------------------------------------------------------------------------------------------------
void VelocidadNormal() {
digitalWrite(PasosM0, LOW); // Pone en estado HIGH.
digitalWrite(PasosM1, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM2, LOW); // Pone en estado HIGH.
}
//------------------------------------------------------------------------------------------------------------------
void VelocidadRapido() {
digitalWrite(PasosM0, HIGH); // Pone en estado HIGH.
digitalWrite(PasosM1, LOW); // Pone en estado HIGH.
digitalWrite(PasosM2, LOW); // Pone en estado HIGH.
}
//------------------------------------------------------------------------------------------------------------------
void VelocidadMuyRapido() {
digitalWrite(PasosM0, LOW); // Pone en estado HIGH.
digitalWrite(PasosM1, LOW); // Pone en estado HIGH.
digitalWrite(PasosM2, LOW); // Pone en estado HIGH.
}
//------------------------------------------------------------------------------------------------------------------
Motor Paso a Paso Automático
Giro con velocidad de Aceleración y Desaceleración.
​
​
​
​
​
​
​
Manejo de un Motor Paso a Paso. Automatico.
Los Giros, Sentido Horario y Sentido AntiHorario, son con Aceleración y Desaceleración.
​
Materiales para el proyecto:
​
Arduino Uno.
Driver A4988
Motor Paso a Paso Nema 17.
1 Capacitor Electrolítico 1000uf 25V, Para La entrada de 12 Volts del A4988.
2 Resistencias de 470 ohms, Para los Leds Verdes.
1 Resistencia de 1K ohm, Para el Led Rojo.
2 Leds Verdes. Para Aviso de Giro.
1 Led Rojo. Para Aviso de Sin Giro.
Conexión:
​
Pin 12 del Arduino al Enable del A4988.
Pin 9 del Arduino al Step del A4988.
Pin 8 del Arduino al Dir del A4988.
Pin 7 del Arduino al Led Verde Aviso Giro Izquierda.
Pin 6 del Arduino al Led Verde Aviso Giro Derecha.
Pin 5 del Arduino al Led Rojo Aviso No Giro.
A4988 : Reset y Sleeep Conectar en puente entre si.
A4988 : M1, M2, M3 Responsables de Micro Pasos no usaremos, dejarlos desconectados.
A4988 : A1, A2, B1 y B2 Conectar el Motor Nema 17.
A4988 : Alimentacion 0 y 5 Volts, 0 y 12 Volts.
​
​
​










