// Pines del motor paso a paso
const int dirPin = 5;
const int stepPin = 18;
const int dirpin2 = 15;
const int stepPin2 = 2;
const int stepPin3 = 12;
const int dirpin3 = 13;
const int dirpin4 = 4;
const int stepPin4 = 33;
const int ledinicio = 25;
const int ledparo = 14;
int pulsador = 23;
int pulsador2 = 22;
int pulsador3 = 21;
// Variables de lectura
int lectura;
int lectura2;
int lectura3;
// Funciones booleanas para los motores
bool giro_completo = false;
bool giro_completo2 = false;
bool giro_completo3 = false;
bool giro_completo4 = false;
bool giro_completo5 = false;
bool giro_completo6 = false;
// Limite de giro de los motores
const int steps = 200;
const int steps2 = 200;
const int steps3 = 200;
const int steps4 = 600;
const int steps5 = 400;
const int steps6 = 200;
// Tiempo de dilatación de giro de motor
int stepDelay = 250;
int stepDelay2 = 250;
int stepDelay3 = 250;
int stepDelay4 = 250;
// Pines de los sensores infrarrojos
int sensor1 = 34;
int sensor2 = 35;
int sensor3 = 32;
// Variables para guardar la lectura de los sensores PIR
int slectura1;
int slectura2;
int slectura3;
void activarBanda(int motorPin, int steps, int stepDelay) {
digitalWrite(dirpin4, HIGH);
for (int v = 0; v < steps; v++) {
digitalWrite(motorPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(motorPin, LOW);
delayMicroseconds(stepDelay);
}
}
void desactivarBanda(int motorPin, int steps, int stepDelay) {
digitalWrite(dirpin4, LOW);
for (int v = 0; v < steps; v++) {
digitalWrite(motorPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(motorPin, LOW);
delayMicroseconds(stepDelay);
}
}
void setup() {
Serial.begin(115200);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirpin2, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirpin3, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(stepPin4, OUTPUT);
pinMode(dirpin4, OUTPUT);
pinMode(pulsador, INPUT);
pinMode(pulsador2, INPUT);
pinMode(pulsador3, INPUT);
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(ledinicio, OUTPUT);
pinMode(ledparo, OUTPUT);
}
void loop() {
digitalWrite(ledparo, HIGH);
// Lectura de pulsadores y sensores
lectura = digitalRead(pulsador);
lectura2 = digitalRead(pulsador2);
lectura3 = digitalRead(pulsador3);
// Lectura de los sensores PIR
slectura1 = digitalRead(sensor1);
slectura2 = digitalRead(sensor2);
slectura3 = digitalRead(sensor3);
// Motor1
if (lectura == HIGH && !giro_completo) {
Serial.println("Girando en sentido horario motor 1");
digitalWrite(dirPin, HIGH);
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay);
}
giro_completo = true;
digitalWrite(ledparo, HIGH);
}
if (lectura == LOW && giro_completo) {
Serial.println("Girando en sentido antihorario motor 1");
digitalWrite(dirPin, LOW);
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(stepDelay);
digitalWrite(stepPin, LOW);
delayMicroseconds(stepDelay);
}
giro_completo = false;
digitalWrite(ledparo, HIGH);
}
// Motor2
if (lectura2 == HIGH && !giro_completo2) {
Serial.println("Girando en sentido horario motor 2");
digitalWrite(dirpin2, HIGH);
for (int e = 0; e < steps2; e++) {
digitalWrite(stepPin2, HIGH);
delayMicroseconds(stepDelay2);
digitalWrite(stepPin2, LOW);
delayMicroseconds(stepDelay2);
}
giro_completo2 = true;
digitalWrite(ledparo, HIGH);
}
if (lectura2 == LOW && giro_completo2) {
Serial.println("Girando en sentido antihorario motor 2");
digitalWrite(dirpin2, LOW);
for (int e = 0; e < steps2; e++) {
digitalWrite(stepPin2, HIGH);
delayMicroseconds(stepDelay2);
digitalWrite(stepPin2, LOW);
delayMicroseconds(stepDelay2);
}
giro_completo2 = false;
digitalWrite(ledparo, HIGH);
}
// Motor 3
if (lectura3 == HIGH && !giro_completo3) {
Serial.println("Girando en sentido horario motor 3");
digitalWrite(dirpin3, HIGH);
for (int r = 0; r < steps3; r++) {
digitalWrite(stepPin3, HIGH);
delayMicroseconds(stepDelay3);
digitalWrite(stepPin3, LOW);
delayMicroseconds(stepDelay3);
}
giro_completo3 = true;
digitalWrite(ledparo, HIGH);
}
if (lectura3 == LOW && giro_completo3) {
Serial.print("Giro en sentido antihorario motor 3");
digitalWrite(dirpin3, LOW);
for (int r = 0; r < steps3; r++) {
digitalWrite(stepPin3, HIGH);
delayMicroseconds(stepDelay3);
digitalWrite(stepPin3, LOW);
delayMicroseconds(stepDelay3);
}
giro_completo3 = false;
digitalWrite(ledparo, HIGH);
}
// Funcion de la banda
//SENSOR PIR 1
if (slectura1 == HIGH && !giro_completo4 && !giro_completo5 && !giro_completo6) {
Serial.println("Banda activada");
activarBanda(stepPin4, steps4, stepDelay4);
giro_completo4 = true;
digitalWrite(ledparo, HIGH);
}
if (slectura1 == LOW && giro_completo4) {
Serial.println("Banda desactivada");
desactivarBanda(stepPin4, 100, stepDelay4);
giro_completo4 = false;
digitalWrite(ledparo, LOW);
}
// SENSOR PIR 2
if (slectura2 == HIGH && !giro_completo5 && !giro_completo4 && !giro_completo6) {
Serial.println("Banda activada");
activarBanda(stepPin4, steps5, stepDelay4);
giro_completo5 = true;
digitalWrite(ledparo, HIGH);
}
if (slectura2 == LOW && giro_completo5) {
Serial.println("Banda desactivada");
desactivarBanda(stepPin4, 100, stepDelay4);
giro_completo5 = false;
digitalWrite(ledparo, LOW);
}
//SENSOR PIR 3
if (slectura3 == HIGH && !giro_completo6 && !giro_completo4 && !giro_completo5) {
Serial.println("Banda activada");
activarBanda(stepPin4, steps6, stepDelay4);
giro_completo6 = true;
digitalWrite(ledparo, HIGH);
}
if (slectura3 == LOW && giro_completo6) {
Serial.println("Banda desactivada");
desactivarBanda(stepPin4, 100, stepDelay4);
giro_completo6 = false;
digitalWrite(ledparo, LOW);
}
}