#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLnLhESadt"
#define BLYNK_DEVICE_NAME "Smart Farming 2"
#define BLYNK_AUTH_TOKEN "H6N2AJWPP7jWvqRLN0DbO6x78oiWq5aR"
#define ECHO_PIN 2
#define TRIG_PIN 4
#define SCL_PIN 22
#define SDA_PIN 21
#define buzzer 12
int ledPin = 13;
int inputPin = 15;
int pirState = LOW;
String hama = "";
int val = 0;
const int servoPin = 18;
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DS1307RTC.h>
#include <ESP32Servo.h>
#include "TimeLib.h"
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
Servo myservo;
BlynkTimer timer;
int pos = 0;
void setup() {
myservo.attach(18, 500, 2400);
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("Kontrol Tambak Berjalan");
Serial.println("-------------------");
pinMode(TRIG_PIN, OUTPUT); //pemancar
pinMode(ECHO_PIN, INPUT); //penerima
Blynk.begin(auth, ssid, pass);
timer.setInterval(1L, sendSensor);
}
float readDistanceCM(){
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034/2;
//duration = waktu pantul dalam detik
}
void sendSensor() {
tmElements_t tm;
float jarak = readDistanceCM();
float distance = map(jarak, 0, 400, 400, 0); //dalam cm
if((distance >=50) && (distance<= 100)){
Serial.print("Muka Air Mulai Naik : ");
Serial.print(jarak);
Serial.println(" cm");
noTone(buzzer);
} else if((distance >=101) && (distance<= 400)){
Serial.print("Kondisi Permukaan Air Aman : ");
Serial.print(jarak);
Serial.println(" cm");
noTone(buzzer);
} else {
Serial.print("Banjir...Banjir...!!!");
Serial.print(jarak);
Serial.println(" cm");
tone(buzzer, 200);
}
Blynk.virtualWrite(V1, jarak);
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin, HIGH);
hama = "Hama Terdeteksi";
Blynk.virtualWrite(V0, hama);
if (pirState == LOW) {
Serial.println("Hama Terdeteksi!");
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW);
hama = "Tidak Ada Hama";
Blynk.virtualWrite(V0, hama);
if (pirState == HIGH) {
Serial.println("Tidak Ada Hama!");
pirState = LOW;
}
}
if (RTC.read(tm)) {
Serial.print("Sekarang Jam ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Tanggal ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
if(tm.Hour == 23 && tm.Minute == 55 && tm.Second == 00)
{
Serial.println("Pakan Ikan Terbuka");
for (pos = 0; pos <= 90; pos += 1) {
// in steps of 1 degree
myservo.write(pos);
delay(15);
}
for (pos = 90; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
}
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
void loop()
{
sendSensor();
Blynk.run();
timer.run();
}