#include <AccelStepper.h>
// Definiciones de pines
#define SENSOR_PIN_1 22 // Pin del primer sensor PIR
#define SENSOR_PIN_2 4 // Pin del segundo sensor PIR
#define SENSOR_PIN_3 5 // Pin del tercer sensor PIR
#define MOTOR_STEP_PIN 27 // Pin del paso del motor
#define MOTOR_DIR_PIN 14 // Pin de dirección del motor
// Crear una instancia de AccelStepper
AccelStepper stepper(1, MOTOR_STEP_PIN, MOTOR_DIR_PIN);
int paso_actual = 0; // Variable para llevar el registro del paso actual
void setup()
{
// Configurar pines de los sensores como entradas
pinMode(SENSOR_PIN_1, OUTPUT);
pinMode(SENSOR_PIN_2, OUTPUT);
pinMode(SENSOR_PIN_3, OUTPUT);
// Configurar el motor paso a paso
stepper.setMaxSpeed(1000); // Velocidad máxima en pasos por segundo
stepper.setAcceleration(500); // Aceleración en pasos por segundo al cuadrado
}
void loop()
{
// Leer el estado de los sensores PIR
bool sensor1_estado = digitalRead(SENSOR_PIN_1);
bool sensor2_estado = digitalRead(SENSOR_PIN_2);
bool sensor3_estado = digitalRead(SENSOR_PIN_3);
// Lógica de control del motor
if (sensor1_estado)
{
// Si el primer sensor detecta movimiento, gira el motor en una dirección
mover_motor(200);
}
else if (sensor2_estado)
{
// Si el segundo sensor detecta movimiento, gira el motor en la dirección opuesta
mover_motor(400);
}
else if (sensor3_estado)
{
// Si el tercer sensor detecta movimiento, gira el motor en la dirección opuesta
mover_motor(500);
}
}
void mover_motor(int pasos)
{
// Calcular la posición objetivo
long targetPosition = stepper.currentPosition() + pasos;
// Establecer la velocidad
if (pasos > 0)
{
stepper.setSpeed(1000); // Velocidad positiva
}
else
{
stepper.setSpeed(-1000); // Velocidad negativa
}
// Mover el motor a la posición objetivo
stepper.runToNewPosition(targetPosition);
}