#include <AccelStepper.h>
#include <Servo.h>
// Configuración de los pines de los sensores LDR
const int ldrPins[] = {A0, A1, A2, A3};
const int numLDRs = 4;
// Configuración de los pines del motor paso a paso A4988
#define motorStepPin 2
#define motorDirPin 3
#define motorEnablePin 4
// Configuración del pin del servomotor
#define servoPin 9
// Configuración del objeto del motor paso a paso
AccelStepper stepper(AccelStepper::FULL4WIRE, motorStepPin, motorDirPin);
// Configuración del objeto del servomotor
Servo servo;
void setup() {
// Inicialización de los pines de los sensores LDR
for (int i = 0; i < numLDRs; i++) {
pinMode(ldrPins[i], INPUT);
}
// Inicialización de los pines del motor paso a paso y del servomotor
pinMode(motorEnablePin, OUTPUT);
digitalWrite(motorEnablePin, LOW); // Habilitar el motor paso a paso
stepper.setMaxSpeed(1000); // Velocidad máxima del motor paso a paso
stepper.setAcceleration(500); // Aceleración del motor paso a paso
servo.attach(servoPin);
}
void loop() {
// Lectura de los valores de los sensores LDR
int ldrReadings[numLDRs];
for (int i = 0; i < numLDRs; i++) {
ldrReadings[i] = analogRead(ldrPins[i]);
}
// Cálculo de la dirección del sol (por ejemplo, usando el LDR más iluminado)
int maxLDRValue = 0;
int maxLDRIndex = 0;
for (int i = 0; i < numLDRs; i++) {
if (ldrReadings[i] > maxLDRValue) {
maxLDRValue = ldrReadings[i];
maxLDRIndex = i;
}
}
// Control del motor paso a paso
int targetPosition = map(maxLDRIndex, 0, numLDRs - 1, 0, 180); // Mapear la dirección del sol a un ángulo
stepper.moveTo(targetPosition);
stepper.run();
// Control del servomotor
int servoAngle = map(maxLDRValue, 0, 1023, 0, 180); // Mapear la intensidad de luz al ángulo del servo
servo.write(servoAngle);
delay(100); // Pequeña pausa para evitar lecturas rápidas de los sensores
}