El Código
const int LedVelocidad = 5; // Pin 13 Aviso Velocidad con PWM
int Habilitador = 12; // Habilita Corriente con Enable.
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(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, 11); // convertir a porcentaje
if (PosicionPot == 1 ) { // Verifica SI: ValorVelocidad = X.
VelocidadMuyRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraIzquierda(); // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 255); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 2 ) { // Verifica SI: ValorVelocidad = X.
VelocidadRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraIzquierda(); // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 200); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 3 ) { // Verifica SI: ValorVelocidad = X.
VelocidadNormal(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraIzquierda(); // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 150); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 4 ) { // Verifica SI: ValorVelocidad = X.
VelocidadLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraIzquierda(); // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 100); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 5 ) { // Verifica SI: ValorVelocidad = X.
VelocidadLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraIzquierda(); // Accion Aviso con Led Verde Giro Izquierda del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraIzquierda(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 50); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 6 ) { // Verifica SI: ValorVelocidad = X.
AvisoLedNoGira();
digitalWrite(Habilitador, HIGH); // Habilita el Enable.
analogWrite(LedVelocidad, 0); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 7 ) { // Verifica SI: ValorVelocidad = X.
VelocidadLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraDerecha(); // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 50); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 8 ) { // Verifica SI: ValorVelocidad = X.
VelocidadLento(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraDerecha(); // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 100); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 9 ) { // Verifica SI: ValorVelocidad = X.
VelocidadNormal(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraDerecha(); // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 150); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 10 ) { // Verifica SI: ValorVelocidad = X.
VelocidadRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraDerecha(); // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 200); // Accion Aviso de Velocidad, Intensidad.
}
if (PosicionPot == 11 ) { // Verifica SI: ValorVelocidad = X.
VelocidadMuyRapido(); // Accion Cambio Velocidad. Puede elejir entre 5 velocidades
AvisoLedGiraDerecha(); // Accion Aviso con Led Verde Giro Derecha del Motor.
digitalWrite(Habilitador, LOW); // Habilita el Enable.
GiraDerecha(); // Accion Giro Determinado.
analogWrite(LedVelocidad, 255); // Accion Aviso de Velocidad, Intensidad.
}
}
//------------------------------------------------------------------------------------------------------------------
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, Giro Horario y Giro AntiHorario Manual 5 Velocidades con
Potenciometro
​
​
​
​
​
​
​
​
Manejo de un Motor Paso a Paso, mediante 1 Potenciometro. Manual.
2 Giros, Sentido Horario y Sentido AntiHorario.
El Potenciómetro cambia 5 velocidad.
Muy Lento, Lento, Normal, Rápido y Muy Rápido.
Desde la posición central es Nulo, APAGADO.
Luego a mas se aleja del centro mas rápido gira.
​
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 ohm. 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.
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 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.
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​













