El Código
long NumeroAleatorio; // Variable para guardar el numero aleatorio.
long GiroAleatorio; // Variable para guardar el numero GiroAleatorio.
long NumeroPasos; // Variable para guardar el numero de pasos.
//------------------------------------------------------------------------------------------------------------------
int StepTiempo = 1.8; // Delay Tiempo del Step.
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 = 13; // Led Rojo, Aviso sin Movimiento.
int PinM1 = 4; // Seleccion de micro pasos.
int PinM2 = 3; // Seleccion de micro pasos.
int PinM3 = 2; // Seleccion de micro pasos.
//------------------------------------------------------------------------------------------------------------------
const int Step = 9; // Este pin aplica pulsos cuadrados, para que el motor accione un paso.
const int Direccion = 8; // Pin Dir, encargado de seleccionar el sentido de giro.
//------------------------------------------------------------------------------------------------------------------
void setup() {
pinMode(PinM1, OUTPUT); // Habilita Como Salida Digital.
pinMode(PinM2, OUTPUT); // Habilita Como Salida Digital.
pinMode(PinM3, OUTPUT); // Habilita Como Salida Digital.
pinMode(Step, OUTPUT); // Habilita Como Salida Digital.
pinMode(Direccion, 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.
digitalWrite(PinM1, LOW); // Al arrancar, pone en LOW.
digitalWrite(PinM2, LOW); // Al arrancar, pone en LOW.
digitalWrite(PinM3, LOW); // Al arrancar, pone en LOW.
}
//------------------------------------------------------------------------------------------------------------------
void loop() { // Bucle Principal.
NumeroAleatorio = random(1, 6); // Asigna a la variable un numero aleatorio entre 1 y 5.
GiroAleatorio = random(1, 3); // Asigna a la variable un numero aleatorio entre 1 y 2.
if (NumeroAleatorio == 1) { // SI NumeroAleatorio = X.
Velocidad1(); // Accion Velocidad
NumeroPasos = 200; // Cantidad de Pulsos.
}
if (NumeroAleatorio == 2) { // SI NumeroAleatorio = X.
Velocidad2(); // Accion Velocidad
NumeroPasos = 400; // Cantidad de Pulsos.
}
if (NumeroAleatorio == 3) { // SI NumeroAleatorio = X.
Velocidad3(); // Accion Velocidad
NumeroPasos = 800; // Cantidad de Pulsos.
}
if (NumeroAleatorio == 4) { // SI NumeroAleatorio = X.
Velocidad4(); // Accion Velocidad
NumeroPasos = 1600; // Cantidad de Pulsos.
}
if (NumeroAleatorio == 5) { // SI NumeroAleatorio = X.
Velocidad5(); // Accion Velocidad
NumeroPasos = 3200; // Cantidad de Pulsos.
}
if (GiroAleatorio == 1) { // SI GiroAleatorio = X.
for (int i = 0; i <= NumeroPasos; i++) { // Pulsos para los giro.
AvisoLedGiraIzquierda(); // Accion Aviso de Giro Determinado.
GiraIzquierda(); // Accion Giro Determinado.
}
}
if (GiroAleatorio == 2) { // SI GiroAleatorio = X.
for (int i = 0; i <= NumeroPasos; i++) { // Pulsos para los giro.
AvisoLedGiraDerecha(); // Accion Aviso de Giro Determinado.
GiraDerecha(); // Accion Giro Determinado.
}
}
AvisoLedNoGira(); // Accion Aviso de Sin Giro.
delay(500); // Retardo.
}
//------------------------------------------------------------------------------------------------------------------
void GiraIzquierda() { // Accion para girar a la Izquierda.
digitalWrite(Direccion, HIGH); // Selecciona la Direccion de Giro.
for (uint32_t i = 0; i < 1 ; i++) { // Ciclor for en este caso solo cuenta 1.
digitalWrite(Step, HIGH); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo ); // Retardo.
}
}
//------------------------------------------------------------------------------------------------------------------
void GiraDerecha() { // Accion para girar a la Derecha
digitalWrite(Direccion, LOW); // Selecciona la Direccion de Giro.
for (uint32_t i = 0; i < 1 ; i++) { // Ciclor for en este caso solo cuenta 1.
digitalWrite(Step, HIGH); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo ); // Retardo.
}
}
//------------------------------------------------------------------------------------------------------------------
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 Velocidad1() { // Velocidad Muy Rapido.
digitalWrite(PinM1, LOW); // Pone en estado LOW.
digitalWrite(PinM2, LOW); // Pone en estado LOW.
digitalWrite(PinM3, LOW); // Pone en estado LOW.
}
void Velocidad2() { // Rapido.
digitalWrite(PinM1, HIGH); // Pone en estado HIGH.
digitalWrite(PinM2, LOW); // Pone en estado LOW.
digitalWrite(PinM3, LOW); // Pone en estado LOW.
}
void Velocidad3() { // Velocidad Normal.
digitalWrite(PinM1, LOW); // Pone en estado LOW.
digitalWrite(PinM2, HIGH); // Pone en estado HIGH.
digitalWrite(PinM3, LOW); // Pone en estado LOW.
}
void Velocidad4() { // Velocidad Lento.
digitalWrite(PinM1, HIGH); // Pone en estado HIGH.
digitalWrite(PinM2, HIGH); // Pone en estado HIGH.
digitalWrite(PinM3, LOW); // Pone en estado LOW.
}
void Velocidad5() { // Velocidad Muy Lento.
digitalWrite(PinM1, HIGH); // Pone en estado HIGH.
digitalWrite(PinM2, HIGH); // Pone en estado HIGH.
digitalWrite(PinM3, HIGH); // Pone en estado HIGH.
}
Motor Paso a Paso Automatico
Giro y velocidad Aleatoria
​
​
​
​
​
Manejo de un Motor Paso a Paso. Automatico.
Los Giros, Sentido Horario y Sentido AntiHorario, y la Velocidad se haran de manera aleatoria.
​
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.
​
​
​










