#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL34gXCPWvE"
#define BLYNK_TEMPLATE_NAME "practical 10 blynk"
#define BLYNK_AUTH_TOKEN "CrDuzQsRlCePYSyM49M7ES45Ef7_H2uS"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "HX711.h"
#include <ESP32Servo.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define BUTTON_VPIN V0
#define WEIGHT_VPIN V1
#define DISTANCE_VPIN V2
#define DT 16
#define SCK 4
HX711 scale;
const int SensorTRG = 25;
const int SensorECH = 26;
const int servoPin = 19;
Servo myServo;
BLYNK_WRITE(BUTTON_VPIN) {
int buttonState = param.asInt();
Serial.print("Button state from Blynk: ");
Serial.println(buttonState);
double weight = weightRead();
long distance = readDistance();
Blynk.virtualWrite(WEIGHT_VPIN, weight);
Blynk.virtualWrite(DISTANCE_VPIN, distance);
if (buttonState == 1) {
if (weight > 1) {
containerOpen();
Serial.println("Container Opened");
} else {
Serial.println("Container Empty");
}
} else {
containerClose();
Serial.println("Container Closed");
}
}
long readDistance() {
digitalWrite(SensorTRG, LOW);
delayMicroseconds(2);
digitalWrite(SensorTRG, HIGH);
delayMicroseconds(10);
digitalWrite(SensorTRG, LOW);
long duration = pulseIn(SensorECH, HIGH);
long distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
return distance;
}
void containerOpen() {
Serial.println("Dispensing FOOD..!!");
myServo.write(0);
}
void containerClose() {
myServo.write(90);
Serial.println("Food dispensed...!!");
}
float weightRead() {
Serial.println("Pet Nearby..!!");
if (scale.is_ready()) {
Serial.println("Reading Weight..");
float weight = scale.get_units();
weight *= 2.381;
float kilograms = weight / 1000;
Serial.print("Weight: ");
Serial.print(kilograms);
Serial.println(" kg");
return kilograms;
} else {
Serial.println("Error In Reading weight value");
return 0;
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
Serial.println("Connecting to Blynk...");
scale.begin(DT, SCK);
myServo.attach(servoPin, 500, 2400);
myServo.write(90);
pinMode(SensorTRG, OUTPUT);
pinMode(SensorECH, INPUT);
}
void loop() {
Blynk.run();
}