Anna's Code
Mon Mar 30 2026 15:52:30 GMT+0000 (Coordinated Universal Time)
Saved by
@iliavial
//
//ESP32 GPIO 5 --------> HC-SR04 TRIG
//ESP32 GPIO 18 <-------- HC-SR04 ECHO through voltage divider
//ESP32 GPIO 13 --------> Servo 1 signal
//ESP32 GPIO 12 --------> Servo 2 signal
//External 5V ----------> Servo 1 red
//External 5V ----------> Servo 2 red
//External 5V ----------> HC-SR04 VCC
//GND ------------------> Servo 1 brown/black
//GND ------------------> Servo 2 brown/black
//GND ------------------> HC-SR04 GND
//GND ------------------> ESP32 GND
//
#include <ESP32Servo.h>
const int trigPin = 5;
const int echoPin = 18;
const int servo1Pin = 13;
const int servo2Pin = 12;
Servo servo1;
Servo servo2;
// Adjust these after testing your mechanism
int closedAngle1 = 10;
int openAngle1 = 80;
int closedAngle2 = 170;
int openAngle2 = 100;
long duration;
float distanceCm;
const float openDistance = 12.0; // open if object is closer than this
bool lidOpen = false;
float readDistanceCM() {
digitalWrite(trigPin, LOW);
delayMicroseconds(3);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH, 30000);
if (duration == 0) {
return 999;
}
return duration * 0.0343 / 2.0;
}
void openLid() {
servo1.write(openAngle1);
servo2.write(openAngle2);
lidOpen = true;
}
void closeLid() {
servo1.write(closedAngle1);
servo2.write(closedAngle2);
lidOpen = false;
}
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo1.setPeriodHertz(50);
servo2.setPeriodHertz(50);
servo1.attach(servo1Pin, 500, 2400);
servo2.attach(servo2Pin, 500, 2400);
closeLid();
delay(500);
}
void loop() {
distanceCm = readDistanceCM();
Serial.print("Distance: ");
Serial.println(distanceCm);
if (distanceCm < openDistance) {
openLid();
delay(3000); // lid stays open
closeLid();
delay(500);
}
delay(150);
}
content_copyCOPY
Comments