#include <Servo.h>
Servo lidServo;
const int trigPin = 9;
const int echoPin = 10;
const int servoPin = 6;
long duration;
int distance;
bool lidOpen = false; // state variable
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lidServo.attach(servoPin);
lidServo.write(0); // lid closed
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH, 30000);
if (duration == 0) return;
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Open lid if hand is detected and lid is closed
if (distance <= 15 && !lidOpen) {
lidServo.write(0);
lidOpen = true;
}
// Close lid when hand is removed
if (distance > 15 && lidOpen) {
lidServo.write(90);
lidOpen = false;
}
delay(200);
}