top of page

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.
​
 
 
 
 
 
 
 
 
 
​
 
 
 
 
 
 
 
​
bottom of page