Tech Gyan Set
Published © MIT

Smart Water Tank Overflow + Bill Saving System (Advanced)

A smart IoT system that stops water overflow and saves electricity automatically. πŸ’§βš‘

BeginnerFull instructions provided8 hours183
Smart Water Tank Overflow + Bill Saving System (Advanced)

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

1️⃣ Required Libraries

C/C++
πŸ”Ή Purpose:
WiFi library internet connection ke liye, PubSubClient MQTT cloud communication ke liye, aur PZEM library pump electricity monitoring ke liye use hoti hai.
/*
====================================================
1️⃣ REQUIRED LIBRARIES
====================================================
*/

#include <WiFi.h>          // WiFi connectivity
#include <PubSubClient.h>  // MQTT communication
#include <PZEM004Tv30.h>   // Energy monitoring

πŸ”Ÿ Main Loop Logic

C/C++
void loop() {

  if (!client.connected()) {
    reconnect();
  }

  client.loop();
πŸ”Ή Purpose:
Ensure karta hai ki MQTT connection stable rahe aur cloud communication continue ho.

  // Trigger ultrasonic pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
πŸ”Ή Purpose:
Ultrasonic sensor ko trigger pulse send karta hai distance measure karne ke liye.

  long duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.034 / 2;
πŸ”Ή Purpose:
Echo signal receive karke water surface tak ka distance calculate karta hai.

  float levelPercent = ((tankHeight - distance) / tankHeight) * 100;

  if (levelPercent < 0) levelPercent = 0;
  if (levelPercent > 100) levelPercent = 100;
πŸ”Ή Purpose:
Measured distance ko water level percentage me convert karta hai.

  if (levelPercent < lowLevel) {
    digitalWrite(RELAY_PIN, LOW);  // Pump ON
    client.publish(topic_status, "PUMP ON");
  }

  if (levelPercent > highLevel) {
    digitalWrite(RELAY_PIN, HIGH); // Pump OFF
    client.publish(topic_status, "PUMP OFF");
  }
πŸ”Ή Purpose:
Automatic pump control logic β€” low level par ON, high level par OFF.

  float energy = pzem.energy();  // kWh
  float bill = energy * electricityRate;
πŸ”Ή Purpose:
Pump ki electricity consumption read karta hai aur estimated bill calculate karta hai.

  client.publish(topic_level, String(levelPercent, 1).c_str());
  client.publish(topic_bill, String(bill, 2).c_str());
πŸ”Ή Purpose:
Water level aur bill data cloud par publish karta hai.

  delay(5000);
}
πŸ”Ή Purpose:
Har 5 second me system update karta hai.

2️⃣ WiFi Configuration

C/C++
πŸ”Ή Purpose:
ESP32 ko internet se connect karne ke liye WiFi credentials define kiye gaye hain.
/*
====================================================
2️⃣ WIFI SETTINGS
====================================================
*/

const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASSWORD";

3️⃣ MQTT Configuration

C/C++
πŸ”Ή Purpose:
Water level, pump status aur electricity bill ko cloud par publish karne ke liye MQTT topics define kiye gaye hain.
/*
====================================================
3️⃣ MQTT SETTINGS
====================================================
*/

const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;

const char* topic_level = "watertank/level";
const char* topic_status = "watertank/status";
const char* topic_bill = "watertank/bill";

4️⃣ Pin Definitions

C/C++
#define PZEM_TX 17
πŸ”Ή Purpose:
Ultrasonic sensor, relay (pump control), aur PZEM ke GPIO pins define kiye gaye hain.
/*
====================================================
4️⃣ PIN CONFIGURATION
====================================================
*/

#define TRIG_PIN 5
#define ECHO_PIN 18
#define RELAY_PIN 4

#define PZEM_RX 16
#define PZEM_TX 17

5️⃣ System Parameters

C/C++
πŸ”Ή Purpose:
Tank height aur ON/OFF thresholds set kiye gaye hain. Electricity rate bill calculation ke liye use hota hai.
/*
====================================================
5️⃣ SYSTEM PARAMETERS
====================================================
*/

float tankHeight = 100.0;     // Tank height in cm
float lowLevel = 30.0;        // Pump ON below 30%
float highLevel = 90.0;       // Pump OFF above 90%

float electricityRate = 6.0;  // β‚Ή per unit

6️⃣ Object Initialization

C/C++
πŸ”Ή Purpose:
WiFi, MQTT aur energy monitoring objects create kiye gaye hain.
WiFiClient espClient;
PubSubClient client(espClient);
HardwareSerial pzemSerial(2);
PZEM004Tv30 pzem(pzemSerial, PZEM_RX, PZEM_TX);

7️⃣ WiFi Connect Function

C/C++
πŸ”Ή Purpose:
ESP32 ko WiFi network se connect karta hai taaki IoT features work karein.
void setup_wifi() {

  Serial.println("Connecting to WiFi...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nWiFi Connected");
}

8️⃣ MQTT Reconnect Function

C/C++
πŸ”Ή Purpose:
Agar MQTT connection disconnect ho jaye to automatically reconnect karta hai.
void reconnect() {

  while (!client.connected()) {

    Serial.println("Connecting to MQTT...");

    if (client.connect("WaterTankClient")) {
      Serial.println("MQTT Connected");
    } else {
      Serial.println("Retrying MQTT...");
      delay(2000);
    }
  }
}

9️⃣ Setup Function

C/C++
πŸ”Ή Purpose:
Initial hardware setup karta hai, relay ko OFF state me set karta hai aur WiFi + MQTT initialize karta hai.
void setup() {

  Serial.begin(115200);

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, HIGH);  // Pump OFF initially

  setup_wifi();

  client.setServer(mqtt_server, mqtt_port);
}

Credits

Tech Gyan Set
32 projects β€’ 16 followers
Tech Gyan Set | IoT & Embedded Systems Creator | Arduino, ESP32, GSM & NodeMCU Projects | Smart Home & Real-Life Automation Tutorials
Thanks to Tech Gyan Set .

Comments