#include <ESP32Servo.h>
#include <HX711.h>
const int trigPin = 12;
const int echoPin = 14;
#define DOUT 16
#define CLK 4
HX711 scale;
Servo lidServo;
const int servoPin = 2;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lidServo.attach(servoPin);
lidServo.write(0);
scale.begin(DOUT, CLK);
scale.set_scale();
scale.tare();
Serial.println("Pet Feeder Initialized");
}
void loop() {
float distance, duration;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.0344) / 2;
float cali_factor = 1.59302;
float rawReading = scale.get_units(1);
float foodWeight = map(rawReading, 0, 2100, 0, 5000) / 1000.0;
Serial.print("Total Distance: ");
Serial.println(distance);
Serial.print("Total Weight: ");
Serial.println(foodWeight);
if (distance <= 150 && foodWeight >= 1.0) {
lidServo.write(90); // Open lid
Serial.println("Conditions met. Lid opened.");
}
else {
lidServo.write(0); // Close lid
Serial.println("Conditions not met. Lid closed.");
}
delay(1000);
}