/***
* SCRIPT ESP32 untuk membaca jarak menggunakan sensor Ultrasonik
* Evaluasi ke-3
* dalam membaca ketinggian air, dan dikirim pada Blynk
* dibuat oleh Mahfud Efendi (IoT2 - 29 Mahfud Efendi)
***/
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLzLGJbZ5n"
#define BLYNK_DEVICE_NAME "Sensor Jarak HC04"
#define BLYNK_AUTH_TOKEN "48sml3GeBDIMDYBcfqmHIAdQZ4zf6UQ1"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
const int trigPin = 5;
const int echoPin = 18;
//define sound speed in cm/uS
#define KEC_SUARA 0.034
#define CM_TO_INCH 0.393701
#define ledHijau 4
#define ledKuning 2
#define ledMerah 15
long durasi;
float jarakCM;
float jarakINCH;
float batasketinggian = 300;
float posisiSensor = 50;
float tinggiAir = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); // Starts the serial communication
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledMerah, OUTPUT);
Blynk.begin(auth,ssid,pass);
timer.setInterval(300, sendValue);
}
void sendValue(){
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
durasi = pulseIn(echoPin, HIGH);
// Calculate the distance
jarakCM = durasi * KEC_SUARA/2;
tinggiAir = (batasketinggian + posisiSensor) - jarakCM;
Blynk.virtualWrite(V0, tinggiAir);
Blynk.virtualWrite(V1, jarakCM);
if(jarakCM > 150){
Blynk.virtualWrite(V2,1);
Blynk.virtualWrite(V3,0);
Blynk.virtualWrite(V4,0);
digitalWrite(ledHijau, HIGH);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, LOW);
}else
if(jarakCM >= 100 && jarakCM <= 150){
Blynk.virtualWrite(V2,0);
Blynk.virtualWrite(V3,1);
Blynk.virtualWrite(V4,0);
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledMerah, LOW);
}else
if(jarakCM < 100){
Blynk.virtualWrite(V2,0);
Blynk.virtualWrite(V3,0);
Blynk.virtualWrite(V4,1);
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
}
// Convert to inches
jarakINCH = jarakCM * CM_TO_INCH;
// Prints the distance in the Serial Monitor
Serial.print("Distance (cm): ");
Serial.println(jarakCM);
Serial.print("Distance (inch): ");
Serial.println(jarakINCH);
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10);
Blynk.run();
timer.run();
}