#include <ESP32Servo.h>
const int pirPin = 12;
const int trigPin = 13;
const int echoPin = 14;
const int servoPin = 15;
const int ledPin = 2;
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);
}
void loop() {
int pirState = digitalRead(pirPin);
if (pirState == HIGH) {
openLid();
delay(5000);
} else {
closeLid();
}
float distance = getDistance();
float binCapacity = map(distance, 0, 100, 100, 0);
Serial.print("Bin Space: ");
Serial.print(binCapacity);
Serial.println("% full");
if (binCapacity < 90) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
delay(1000);
}
void openLid() {
lidServo.write(90);
}
void closeLid() {
lidServo.write(0);
}
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;
return distance;
}