#define BLYNK_TEMPLATE_ID "TMPL6q4xssCb-"
#define BLYNK_TEMPLATE_NAME "Hydrogonik"
#define BLYNK_AUTH_TOKEN "m-NfnHndnNBqUaE1zVKt0V7ZeoR9hsxb"
#include<WiFi.h>
#include<WiFiClient.h>
#include<BlynkSimpleEsp32.h>
#include <DHTesp.h>
#define trigPin 12
#define echoPin 14
#define SOUND_SPEED 0.034
#define motor 27
#define tankDepth 400
int maxlvl = 85;
int minlvl = 20;
char auth[]= BLYNK_AUTH_TOKEN;
char ssid[] = "404 error not found";
char pass[] = "vadapav88";
int flag = 3;
long duration;
int pinValue = 1;
float distanceCm;
unsigned int level=0;
char level_air[] = "level air aman";
int level_alarm;
const int DHT_PIN = 15;
DHTesp dhtSensor;
const int alarm_pin = 26;
const int tds_pin = 35;
const int flow_pin = 34;
int tds_rawvalue;
int tds_value;
int tds_alarm;
int flow_rawvalue;
int flow_value;
BlynkTimer timer;
BLYNK_WRITE(V0){
pinValue = param.asInt();
}
void sendSensor()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature) + "°C");
Blynk.virtualWrite(V0, data.temperature); //mengirimkan data ke Virtual pin di Blynk Cloud
}
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motor, OUTPUT);
pinMode(alarm_pin, OUTPUT);
Serial.print("connecting to wifi");
WiFi.begin("Wokwi-GUEST","",6);
while(WiFi.status() != WL_CONNECTED){
delay(100);
Serial.print(".");
}
Serial.println("CONNECTED");
Blynk.begin(auth,"","");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * SOUND_SPEED/2;
int level = (distanceCm / tankDepth) * 100;
Blynk.virtualWrite(V3, 100-level);
if(level >= maxlvl){
strcpy(level_air,"kurang");
digitalWrite(motor, LOW);
pinValue = 0;
level_alarm = 1;
} else if(level <= minlvl){
strcpy(level_air,"meluap");
pinValue = 1;
level_alarm = 1;
} else{
if(pinValue == 1 && level < maxlvl && level > minlvl) {
digitalWrite(motor, HIGH);
level_alarm = 0;
} else{
digitalWrite(motor, HIGH);
level_alarm = 0;
}
strcpy(level_air,"aman");
}
tds_rawvalue = analogRead(tds_pin);
tds_value = (float)tds_rawvalue / 4095 * 1000;
if (tds_value>500){
tds_alarm=1;
} else {
tds_alarm=0;
}
Blynk.virtualWrite(V1, tds_value);
flow_rawvalue = analogRead(flow_pin);
flow_value = (float)flow_rawvalue / 4095 * 1000;
Blynk.virtualWrite(V2, flow_value);
if (tds_alarm || level_alarm){
digitalWrite(alarm_pin, HIGH);
Blynk.virtualWrite(V4, 1);
} else {
digitalWrite(alarm_pin, LOW);
Blynk.virtualWrite(V4, 0);
}
Serial.print("Level Air: ");
Serial.println(level);
Serial.print("Status Level Air: ");
Serial.println(level_air);
Serial.print("TDS: ");
Serial.println(tds_value);
Serial.print("Flow: ");
Serial.println(flow_value);
sendSensor();
Blynk.run();
}