//Test Evaluation #3
// David Wasty Sijabat (152236167101-538)
//Project:
// Simulasi monitoring ketinggian air sungai: 3 LEDs, Sensor Ultrasonik & Platform IoT
// Posisi Sensor Ultrasonik = 50 cm di atas bibir sungai. Kedalaman sungai = 3m (300cm)
// Level Air terhadap Sensor Ultrasonik & LED:
// >150cm = Hijau; 100-150 cm = Kuning; <100cm: Merah
// Ukur juga ketinggian air sungai di dashboard platform
#define BLYNK_TEMPLATE_ID "TMPLceoX05jO" //as of Blynk Template
#define BLYNK_PRINT Serial //deklarasi untuk menampilkan keterangan mulai koneksi ke blynk pada serial monitor
#define ledRed 13
#define ledYellow 12
#define ledGreen 14
#define pinEcho 2
#define pinTrigger 15
//Libraries
#include <WiFi.h> //deklarasi library WiFi.h
#include <WiFiClient.h> //deklarasi library WiFiClient.h
#include <BlynkSimpleEsp32.h> //deklarasi library blynk
BlynkTimer timer; //merubah perintah BlynkTimer menjadi "timer"
char auth[] = "ETxisE09_xmn6fGpiqvr1KinB9GHJKeb"; //deklarasi auth token dari device blynk yang dibuat, bisa dilihat pada bagian device info
char ssid[] = "Wokwi-GUEST"; //ssid wifi yang digunakan
char pass[] = ""; //password wifi yang digunakan
// void sendData(){ //void untuk mengirimkan pembacaan sensor atau nilai ke blynk
// float waterLevel = readUltrasonic();
// float riverLevel = 300+50-waterLevel
// Blynk.virtualWrite(V1, riverLevel); //mengirimkan data suhu ke virtual pin1 pada blynk
// Serial.println("WaterLevel: " + String(riverLevel, 2) + " cm"); //menampilkan tulisan Temp: nilai suhu dhtC ke dalam serial monitor
// Serial.println("------");
// }
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, User!");
Blynk.begin(auth, ssid, pass); //inisialisasi komunikasi dengan server blynk
//timer.setInterval(2000L); //interval pengiriman sendData dari mikrokontroler ke blynk
pinMode(pinEcho, INPUT);
pinMode(pinTrigger, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
}
float readUltrasonic() {
digitalWrite(pinTrigger, LOW);
delayMicroseconds(2);
//trigger PIN dengan sinyal HIGH selama 10micro detik
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
//echo PIN dengan sinyal HIGH
int duration = pulseIn(pinEcho, HIGH);
float dist_cm = duration * 0.034 / 2;
return dist_cm;
//float dist_inch = duration * 0.0133 / 2;
}
void loop() {
// put your main code here, to run repeatedly:
float waterLevel = readUltrasonic();
Serial.println("Ketinggian Air adalah: ");
Serial.println(350-waterLevel);
// Serial.println("WaterLevel: " + String(riverLevel, 2) + " cm"); //menampilkan tulisan Temp: nilai suhu dhtC ke dalam serial monitor
// Serial.println("------");
if(waterLevel > 150){
digitalWrite(ledGreen, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledRed, LOW);
Blynk.virtualWrite(V1, 350-waterLevel);
}
else if(waterLevel >100 && waterLevel <=150 ){
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
Blynk.virtualWrite(V1, 350-waterLevel);
}
else if(waterLevel <=100){
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(ledYellow, LOW);
Blynk.virtualWrite(V1, 350-waterLevel);
}
Blynk.run(); //menjalankan perintah yang ada di library blynk
//timer.run(); //menjalankan timer dari blynk
}