// Librerías necesarias
#include <Stepper.h>
// Definición de pines
const int PinDePasos = 2; // Pin para controlar el motor paso a paso (A+)
const int PinDeDirec = 3; // Pin para dirección del motor paso a paso (A-)
const int FrenoPin = 4; // Pin para el relay de freno
const int potPin = A0; // Pin para la lectura del potenciómetro
const int DerechaLedPin = 5; // Pin para el LED de giro derecho
const int IzquierdaLedPin = 6; // Pin para el LED de giro izquierdo
// Parámetros del motor
int pasosPorVuelta = 2048; // Para el motor 28BYJ-48 - 2048 por vuelta
Stepper stepper(pasosPorVuelta, PinDePasos, PinDeDirec); // Define Objeto, Pin2, Pin3
// Variables
int potValor = 0; // Variable para almacenar el valor del potenciómetro
int grados = 0; // Variable para almacenar los grados
boolean giroDerecha = false; // Variable para indicar si se gira a la derecha
boolean giroIzquierda = false; // Variable para indicar si se gira a la izquierda
// Configuracion
void setup() {
pinMode(FrenoPin, OUTPUT); // Pin4 Salida
pinMode(DerechaLedPin, OUTPUT); // Pin5 Salida led derecho
pinMode(IzquierdaLedPin, OUTPUT); // Pin5 Salida led Izquiero
}
// Bucle principal
void loop() {
potValor = analogRead(potPin); // Lee el valor del potenciómetro
grados = map(potValor, 0, 1023, 0, 180); // Calcula los grados
// Controla el movimiento del motor
if (giroDerecha) {
digitalWrite(FrenoPin, HIGH); // Desactiva el freno
stepper.step(-pasosPorVuelta);
if (grados == 180) {
giroDerecha = false;
apagarMotor();
digitalWrite(FrenoPin, LOW); // Activa el freno
}
} else if (giroIzquierda) {
digitalWrite(FrenoPin, HIGH); // Desactiva el freno
stepper.step(pasosPorVuelta);
if (grados == 0) {
giroIzquierda = false;
apagarMotor();
digitalWrite(FrenoPin, LOW); // Activa el freno
}
}
// Controla los LEDs
if (giroDerecha) {
digitalWrite(DerechaLedPin, HIGH);
} else {
digitalWrite(DerechaLedPin, LOW);
}
if (giroIzquierda) {
digitalWrite(IzquierdaLedPin, HIGH);
} else {
digitalWrite(IzquierdaLedPin, LOW);
}
}
// Función para apagar el motor
void apagarMotor() { // Apaga el motor
stepper.setSpeed(0);
}