#include <AccelStepper.h>
// Define Stepper Motors
AccelStepper stepper1(AccelStepper::FULL4WIRE, 8, 9, 10, 11); // Motor 1: Pin 8, 9, 10, 11
AccelStepper stepper2(AccelStepper::FULL4WIRE, 2, 3, 6, 7); // Motor 2: Pin 2, 3, 6, 7
// Define LDR Pins
const int ldrPins[] = {A0, A1, A2, A3};
// Define Ultrasonic Sensor Pins
const int ultrasonicTrigPins[] = {4, 5};
const int ultrasonicEchoPins[] = {12, 13};
// Define Stop Distance
const int stopDistance = 1; // 1 cm
// Define LDR Thresholds
const int ldrThreshold = 500; // Adjust the threshold based on your LDR characteristics
void setup() {
Serial.begin(9600);
// Set up Stepper Motors
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(500);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(500);
// Set up Ultrasonic Sensors
pinMode(ultrasonicTrigPins[0], OUTPUT);
pinMode(ultrasonicEchoPins[0], INPUT);
pinMode(ultrasonicTrigPins[1], OUTPUT);
pinMode(ultrasonicEchoPins[1], INPUT);
}
void loop() {
// Read values from LDR modules
int ldrValues[4];
for (int i = 0; i < 4; i++) {
ldrValues[i] = analogRead(ldrPins[i]);
}
// Control Stepper Motor 1 based on LDR 1 and LDR 2
int ldr2Value = ldrValues[1];
if (ldr2Value < ldrThreshold) {
// Move Stepper Motor 1 to the right
stepper1.setSpeed(500);
stepper1.runSpeed();
} else {
// Move Stepper Motor 1 to the left
stepper1.setSpeed(-500);
stepper1.runSpeed();
}
// Control Stepper Motor 2 based on LDR 3
int speed2 = map(ldrValues[2], 0, 1023, 0, 500);
stepper2.setSpeed(speed2);
stepper2.runSpeed();
// Read distances from Ultrasonic sensors
int distances[2];
for (int i = 0; i < 2; i++) {
digitalWrite(ultrasonicTrigPins[i], LOW);
delayMicroseconds(2);
digitalWrite(ultrasonicTrigPins[i], HIGH);
delayMicroseconds(10);
digitalWrite(ultrasonicTrigPins[i], LOW);
int duration = pulseIn(ultrasonicEchoPins[i], HIGH);
distances[i] = duration * 0.034 / 2;
}
// Stop Stepper Motors if the distance is less than or equal to 1 cm
if (distances[0] <= stopDistance || distances[1] <= stopDistance) {
stepper1.setSpeed(0);
stepper2.setSpeed(0);
}
// Display values on Serial Monitor
Serial.print("LDR Values: ");
for (int i = 0; i < 4; i++) {
Serial.print(ldrValues[i]);
Serial.print(" ");
}
Serial.print(" | Ultrasonic Distances: ");
Serial.print(distances[0]);
Serial.print(" ");
Serial.println(distances[1]);
delay(500);
}