#define BLYNK_TEMPLATE_NAME "SistemPakanOtomatis"
#define BLYNK_AUTH_TOKEN "Hn7GNVBOkUfbDpTluY6RNYVlrnAUhEet"
#define BLYNK_TEMPLATE_ID "TMPL6R4Owh6Kn"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin untuk servo dan sensor ultrasonik
#define SERVO_PIN 5
#define TRIG_PIN 4
#define ECHO_PIN 2
// Waktu jeda pemberian pakan dalam milidetik (misalnya 6 jam)
#define FEEDING_INTERVAL 21600000
Servo servoo;
BlynkTimer timer;
// Variabel untuk menyimpan waktu terakhir pemberian pakan
unsigned long lastFeedingTime = 0;
void checkDistance()
{
// Mengatur pin TRIG ke HIGH
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Membaca waktu perjalanan gelombang ultrasonik dalam mikrodetik
long duration = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak (dalam cm) berdasarkan waktu perjalanan gelombang ultrasonik
int distance = duration*0.034/2;
pinMode(15, OUTPUT);
// Mengirim jarak ke Blynk
Blynk.virtualWrite(V0, distance);
Serial.print("Jarak: ");
Serial.println(distance);
// Jika jarak kurang dari 10 cm, berarti pakan ikan habis
if(distance <= 10 ){
Serial.println("Pakan ikan habis, memberi pakan...");
// Menggerakkan servo untuk membuka katup dan memberi pakan ikan
servoo.write(90);
digitalWrite(15, HIGH);
}
else{
Serial.println("Pakan Ikan Tersedia.");
// Menutup katup setelah memberi pakan
servoo.write(0);
digitalWrite(15, LOW);
}
// Memperbarui waktu terakhir pemberian pakan
lastFeedingTime = millis();
}
BLYNK_WRITE(V1){
int LED_PIN = param.asInt();
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration*0.034/2;
if (distance <= 10){
LED_PIN == 1;
}
else {
LED_PIN == 0;
}
Blynk.virtualWrite(V1, LED_PIN);
}
void setup()
{
// Menghubungkan ke WiFi dan Blynk
Serial.begin(115200);
// WiFi.begin(ssid, pass);
Blynk.begin(auth, ssid, pass);
timer.setInterval(10000L, checkDistance); // Memeriksa jarak setiap 10 detik
// Mengatur pin servo dan sensor ultrasonik
servoo.attach(SERVO_PIN);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop()
{
Blynk.run();
timer.run();
}