#include <ESP32Servo.h>
const int pirPin = 12;
const int trigPin = 13;
const int echoPin = 14;
const int servoPin = 15;
const int ledPin = 2; // Change to your preferred LED pin
Servo lidServo;
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
lidServo.attach(servoPin);
lidServo.write(0); // Initial position: Closed lid
}
void loop() {
int pirState = digitalRead(pirPin);
if (pirState == HIGH) {
openLid();
delay(5000); // Keep the lid open for 5 seconds
} else {
closeLid();
}
float distance = getDistance();
float binCapacity = map(distance, 0, 100, 100, 0); // Mapping distance to percentage
Serial.print("Bin Space: ");
Serial.print(binCapacity);
Serial.println("%");
if (binCapacity < 10) {
digitalWrite(ledPin, HIGH); // Turn on LED if space is less than 10%
} else {
digitalWrite(ledPin, LOW);
}
delay(1000); // Delay between sensor readings
}
void openLid() {
lidServo.write(90); // Open lid position
}
void closeLid() {
lidServo.write(0); // Close lid position
}
float getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2; // Speed of sound = 0.034 cm/μs
return distance;
}