/*
Name project : Water Alarm System(M2)
From : MT department
CC : Mr.Rachna
Date : 17,May,2025
Location : Room Machine 2(M2)
*/
#include <Wire.h>
#define BLYNK_TEMPLATE_ID "TMPL6nAMQ3-pa"
#define BLYNK_TEMPLATE_NAME "Water Alarm System M2"
#define BLYNK_PRINT Serial
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Input digital from statuse of pump filter
const int P2101 = 14;
const int P2102 = 27;
const int P2103 = 26;
const int P2104 = 25;
// Input Digital form statuse of submersible pump
const int SP_RUN = 33;
const int SP_TRIP = 32;
// Digital output to Relay 5Vcc
int Relay1 = 15;
int Relay2 = 4;
/*Analog Sensor for measuring level water in the surge tank
HC-SR04:
Vcc to 5Vdc of power supply
GND to 0V of Power Supply
Trig to 13 of ESP32
Echo to 12 of ESP32
*/
int Trig = 13;
int Echo = 12;
float Timer1 = 150.50;
float Timer2 = 200.20;
//Initialize the LCD display
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
// My Auth token
char auth[] = "8YGDupEPTbfJNr0ef7OFqTihFUt0ulIW";
// My WIFI SSID and password
char ssid[] = "@***@";
char pass[] = "free1234";
void setup() {
// Debug console
Serial.begin(115200);
Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//lcd.init();
lcd.begin();
lcd.backlight();
pinMode(P2101, INPUT);
pinMode(P2102, INPUT);
pinMode(P2103, INPUT);
pinMode(P2103, INPUT);
pinMode(P2104, INPUT);
pinMode(SP_RUN, INPUT);
pinMode(SP_TRIP, INPUT);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
lcd.setCursor(0, 0);
lcd.print("SYSTEM LOADING...");
for (int a = 0; a <= 15; a++) {
lcd.setCursor(a, 1);
lcd.print(".");
delay(1000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("POWER BY RACHNA...");
delay(6000);
lcd.clear();
lcd.print("WATER ALARM M2...");
delay(5000);
lcd.clear();
}
void Water_level(){
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
// Read the pulse duration
long duration = pulseIn(Echo, HIGH);
// Calculate the distance
float distance = duration * 0.034 / 2;
Serial.print("Water Level = ");
Serial.print(distance);
Serial.println(" cm");
delay(Timer1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("L.WATER = ");
lcd.setCursor(10, 0);
lcd.print(distance);
lcd.setCursor(14, 0);
lcd.print("cm");
delay(Timer2);
Blynk.virtualWrite(V1,distance);
delay(100);
// Alarm When High Level Water Leaking
int Sound = V10;
if (distance<=35){
digitalWrite(Relay1,HIGH);
Blynk.virtualWrite(Sound,1);
Serial.println("High Level");
delay(Timer1);
Blynk.logEvent("high_level", "Please Check your room_M2!!!");
Blynk.logEvent("Bell_Auto", "Check Bell M2...!");
delay(60000);
}
else{
digitalWrite(Relay1,LOW);
Blynk.virtualWrite(Sound,0);
Serial.println("Low Level");
delay(Timer1);
}
// Level in tank (%)
float Height_Tank =1.7; // rate (m)
int Sensor_position = 0.1;// rate (m)
float distance_m = 0;
float Water_volume = 0;
float Volume_Tank = 0;
float Tank = 0;
distance_m = distance/100;
Volume_Tank = 1*1.5*1.7;
Water_volume =Height_Tank-distance_m-Sensor_position; // water level actual in tank
Tank =( Water_volume/Height_Tank)*100;
lcd.setCursor(0, 1);
lcd.print("V.TANK =");
lcd.setCursor(9, 1);
lcd.print(Tank);
lcd.setCursor(14, 1);
lcd.print(" %");
delay(Timer2);
Serial.println("Tank(%)= ");
Serial.println(Tank);
delay(Timer1);
Blynk.virtualWrite(V9,Tank);
delay(100);
lcd.setCursor(0, 1);
}
// Menual in cloud server
void Status(){
int P01 = V3;
int P02 = V4;
int P03 = V5;
int P04 = V6;
int SP_R = V7;
int SP_T = V8;
int pump01=digitalRead(P2101);
if(pump01==HIGH){
Blynk.virtualWrite(P01,1);
Serial.println("on p01");
delay(Timer2);
}
int pump02=digitalRead(P2102);
if(pump02==HIGH){
Blynk.virtualWrite(P02,1);
Serial.println("on p02");
delay(Timer2);
}
int pump03=digitalRead(P2103);
if(pump03==HIGH){
Blynk.virtualWrite(P03,1);
Serial.println("on p03");
delay(Timer2);
}
int pump04=digitalRead(P2104);
if(pump04==HIGH){
Blynk.virtualWrite(P04,1);
Serial.println("on p04");
delay(Timer2);
}
int sp_run=digitalRead(SP_RUN);
if(sp_run==HIGH){
Blynk.virtualWrite(SP_R,1);
Serial.println("on sp");
delay(Timer2);
}
int sp_trip=digitalRead(SP_TRIP);
if(sp_trip==HIGH){
Blynk.virtualWrite(SP_T,1);
Serial.println("fault sp");
delay(Timer2);
}
else {
Blynk.virtualWrite(P01,0);
Blynk.virtualWrite(P02,0);
Blynk.virtualWrite(P03,0);
Blynk.virtualWrite(P04,0);
Blynk.virtualWrite(SP_R,0);
Blynk.virtualWrite(SP_T,0);
Serial.println("no status");
delay(Timer2);
Blynk.logEvent("Status_Pump", "Now at M2 Pump filter off all");
}
}
BLYNK_WRITE(V2){
int Sound = V10;
int buttonValue = param.asInt(); // Read the value of button widget
if(buttonValue == 1){
digitalWrite(Relay2,HIGH);
Blynk.virtualWrite(Sound,1);
Blynk.logEvent("Bell_Ringing", "Plz Make Sure Your Action...!");
delay(60000);
}
else{
digitalWrite(Relay2,LOW);
Blynk.virtualWrite(Sound,0);
}
}
void loop(){
Blynk.run();
Status();
Water_level();
delay(120);
}