El Código
//------------------------------------------------------------------------------------------------------------------
const int LedVelocidad = 5; // Pin 13 Aviso Velocidad con PWM
int Habilitador = 12; // Habilita Corriente con Enable.
int BotonGiroDerecho = 11; // Control de Giro.
int BotonGiroIzquierdo = 10; // Control de Giro.
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.
const int Step = 9; // Pin del Step.
const int Direccion = 8; // Pin del Dir.
const int PotVelocidad = A0; // Pin A0, Lectura del Poteciometro para Cambio de Velocidad.
int ValorPot; // Variable que almacena la lectura analógica.
int PosicionPot; // Posicion del potenciometro.
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
//------------------------------------------------------------------------------------------------------------------
void setup() {
pinMode(LedVelocidad, OUTPUT); // Habilita Como Salida Digital.
pinMode( BotonGiroIzquierdo , INPUT) ; // Habilita Botón Entrada Digital.
pinMode( BotonGiroDerecho , INPUT) ; // Habilita Botón Entrada Digital.
pinMode(Habilitador, 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(Habilitador, LOW); // Al Arranque pone en estado LOW. Habilita.
pinMode(PasosM0, OUTPUT); // Habilita Como Salida Digital.
pinMode(PasosM1, OUTPUT); // Habilita Como Salida Digital.
pinMode(PasosM2, OUTPUT); // Habilita Como Salida Digital.
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() { // Bucle Principal.
ValorPot = analogRead(PotVelocidad); // realizar la lectura analógica raw
PosicionPot = map(ValorPot, 0, 1023, 1, 5); // convertir a porcentaje
if (PosicionPot == 1 ) { // Verifica SI: ValorVelocidad = X.
VelocidadMuyLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
analogWrite(LedVelocidad, 25); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 2 ) { // Verifica SI: ValorVelocidad = X.
VelocidadLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
analogWrite(LedVelocidad, 83); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 3 ) { // Verifica SI: ValorVelocidad = X.
VelocidadNormal(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
analogWrite(LedVelocidad, 140); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 4 ) { // Verifica SI: ValorVelocidad = X.
VelocidadRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
analogWrite(LedVelocidad, 197); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 5 ) { // Verifica SI: ValorVelocidad = X.
VelocidadMuyRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
analogWrite(LedVelocidad, 255); // Accion Aviso de Velocidad, Intensidad.
}
int ValorGiroIzquierdo = digitalRead(BotonGiroIzquierdo) ; // Leemos los Valores del Boton X.
int ValorGiroDerecho = digitalRead(BotonGiroDerecho) ; // Leemos los Valores del Boton X.
if (ValorGiroIzquierdo == HIGH && ValorGiroDerecho == LOW )// Verifica SI: Valor1 = X y Valor2 = X.
{
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
AvisoLedGiraIzquierda(); // Accion Aviso de Giro Determinado.
}
if (ValorGiroIzquierdo == LOW && ValorGiroDerecho == HIGH )// Verifica SI: Valor1 = X y Valor2 = X.
{
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
AvisoLedGiraDerecha(); // Accion Aviso de Giro Determinado.
}
if (ValorGiroIzquierdo == HIGH && ValorGiroDerecho == HIGH )// Verifica SI: Valor1 = X y Valor2 = X.
{
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
AvisoLedNoGira(); // Accion Aviso de Sin Giro.
}
if (ValorGiroIzquierdo == LOW && ValorGiroDerecho == LOW )// Verifica SI: Valor1 = X y Valor2 = X.
{
digitalWrite(Habilitador, HIGH); // Deshabilita el Enable.
AvisoLedNoGira(); // Accion Aviso de Sin Giro.
}
}
//------------------------------------------------------------------------------------------------------------------
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 * 1 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // 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 * 1 ); // Retardo.
digitalWrite(Step, LOW); // Cambia estado del Step para exitar la bobina.
delay(StepTiempo * 1 ); // 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 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 5 Velocidades Con Potenciometro
​
​
​
​
​
​
Manejo de un Motor Paso a Paso, mediante 2 pulsadores. Manual.
2 Giros, Sentido Horario y Sentido AntiHorario.
1 Potenciómetro que cambia 5 velocidad.
Muy Lento, Lento, Normal, Rápido y Muy Rápido.
​
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 Botones Pulsadores. Para los Giros.
2 Resistencias de 470 ohm. Para los Leds Verdes.
1 Resistencia de 1K ohm. Para el Led Rojo.
2 Resistencias de 10K ohm. Para los Botones Pulsadores.
2 Leds Verdes. Para Aviso de Giro.
1 Led Rojo. Para Aviso de Sin Giro.
1 Led Azul. Para Aviso de Velocidades.
2 Resistencias de 1K ohm. Para el Led de Velocidad.
1 Potenciómetro de 20K ohm. Para el cambio de Velocidad.
​
Conexión:
​
Pin 13 del arduino al Led Azul Aviso Velocidad.
Pin 12 del arduino al Enable del A4988.
Pin 11 del arduino al Boton Giro Derecho.
Pin 10 del arduino al Boton Giro Izquierda.
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 13 del arduino al Led Rojo Aviso No Giro.
A4988 : Reset y Sleeep Conectar en puente entre si.
Pin 4 del arduino al M0 del A4988.
Pin 3 del arduino al M1 del A4988.
Pin 2 del arduino al M2 del A4988.
A4988 : A1, A2, B1 y B2 Conectar el Motor Nema 17.
A4988 : Alimentacion 0 y 5 Volts, 0 y 12 Volts.
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​

















