#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL3vAr2BT0T"
#define BLYNK_TEMPLATE_NAME "Practical 10 Blynk App"
#define BLYNK_AUTH_TOKEN "mq8GQ8DSk_ueSGnHTSJgnwB4eVKl5XP4"
#include <ESP32Servo.h>
#include <HX711.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 0
#define DOUT 16
#define SCK 4
Servo servoMotor;
HX711 scale;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const float REQUIRED_WEIGHT = 1.0;
const int DISTANCE_THRESHOLD = 150;
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servoMotor.attach(SERVO_PIN, 500, 2400);
servoMotor.write(0);
scale.begin(DOUT, SCK);
scale.set_scale(2280.f);
scale.tare();
Serial.println("Pet Feeder Initialized");
}
void loop() {
Blynk.run();
float distance = getDistance();
float foodWeight = scale.read() * 50 / 21000;
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm, Weight: ");
Serial.print(foodWeight);
Serial.println(" kg");
bool foodAvailable = (foodWeight >= REQUIRED_WEIGHT);
if (distance <= DISTANCE_THRESHOLD && foodAvailable) {
Serial.println("Conditions met. Opening lid.");
servoMotor.write(90);
delay(5000);
servoMotor.write(0);
} else {
Serial.println("Conditions not met. Lid remains closed.");
servoMotor.write(0);
}
Blynk.virtualWrite(V0, distance);
Blynk.virtualWrite(V1, foodWeight);
delay(1000);
}
float getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
float distance = (duration * 0.0343) / 2;
return distance;
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4