Anna's Code

PHOTO EMBED

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