Tech Gyan Set
Published © MIT

Smart Electricity Theft Detection System using IoT

An IoT-based system that detects electricity theft in real time by monitoring current mismatch and sending instant alerts.

BeginnerShowcase (no instructions)8 hours81
Smart Electricity Theft Detection System using IoT

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

1️⃣ File Name : Electricity_Theft_Detection_ESP32.ino

C/C++
/*************************************************
 Project   : Smart Electricity Theft Detection System
 File Name : Electricity_Theft_Detection_ESP32.ino
 Platform  : ESP32 (Arduino IDE)
*************************************************/

/************ 2️⃣ PIN DEFINITIONS ************/
#define SUPPLY_SENSOR_PIN 34   // Supply side current sensor
#define LOAD_SENSOR_PIN   35   // Load side current sensor
#define RELAY_PIN         26   // Relay module
#define BUZZER_PIN        27   // Buzzer

/************ 3️⃣ THRESHOLD VALUE ************/
#define THEFT_THRESHOLD 50     // Adjust after calibration

/************ 4️⃣ SETUP FUNCTION ************/
void setup() {
  Serial.begin(9600);

  pinMode(SUPPLY_SENSOR_PIN, INPUT);
  pinMode(LOAD_SENSOR_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, HIGH);   // Power ON
  digitalWrite(BUZZER_PIN, LOW);   // Buzzer OFF

  Serial.println("Electricity Theft Detection System Started");
}

/************ 5️⃣ LOOP FUNCTION ************/
void loop() {

  // 6️⃣ Read current sensor values
  int supplyCurrent = analogRead(SUPPLY_SENSOR_PIN);
  int loadCurrent   = analogRead(LOAD_SENSOR_PIN);

  // 7️⃣ Calculate difference
  int difference = abs(supplyCurrent - loadCurrent);

  // 8️⃣ Print values
  Serial.print("Supply: ");
  Serial.print(supplyCurrent);
  Serial.print(" | Load: ");
  Serial.print(loadCurrent);
  Serial.print(" | Difference: ");
  Serial.println(difference);

  // 9️⃣ Theft detection condition
  if (difference > THEFT_THRESHOLD) {

    // 🔟 Theft detected
    digitalWrite(RELAY_PIN, LOW);     // Power OFF
    digitalWrite(BUZZER_PIN, HIGH);   // Buzzer ON
    Serial.println("THEFT DETECTED");

  } else {

    // 1️⃣1️⃣ Normal condition
    digitalWrite(RELAY_PIN, HIGH);    // Power ON
    digitalWrite(BUZZER_PIN, LOW);    // Buzzer OFF
    Serial.println("NORMAL");
  }

  // 1️⃣2️⃣ Delay
  delay(2000);
}

2️⃣ File Name : Electricity_Theft_Detection_ESP32_Firebase.ino

C/C++
/*************************************************
 Project   : Smart Electricity Theft Detection System
 File Name : Electricity_Theft_Detection_ESP32_Firebase.ino
 Platform  : ESP32 (Arduino IDE)
*************************************************/

#include <WiFi.h>
#include <Firebase_ESP_Client.h>

/************ 1️⃣ WIFI DETAILS ************/
#define WIFI_SSID     "YOUR_WIFI_NAME"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"

/************ 2️⃣ FIREBASE DETAILS ************/
#define API_KEY "YOUR_FIREBASE_API_KEY"
#define DATABASE_URL "https://your-project.firebaseio.com/"

/************ 3️⃣ PINS ************/
#define SUPPLY_SENSOR_PIN 34
#define LOAD_SENSOR_PIN   35
#define RELAY_PIN         26
#define BUZZER_PIN        27
#define THEFT_THRESHOLD  50

FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

/************ 4️⃣ SETUP ************/
void setup() {
  Serial.begin(9600);

  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi Connected");

  config.api_key = API_KEY;
  config.database_url = DATABASE_URL;
  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);
}

/************ 5️⃣ LOOP ************/
void loop() {

  int supplyCurrent = analogRead(SUPPLY_SENSOR_PIN);
  int loadCurrent   = analogRead(LOAD_SENSOR_PIN);
  int diff = abs(supplyCurrent - loadCurrent);

  Firebase.RTDB.setInt(&fbdo, "/supply", supplyCurrent);
  Firebase.RTDB.setInt(&fbdo, "/load", loadCurrent);
  Firebase.RTDB.setInt(&fbdo, "/difference", diff);

  if (diff > THEFT_THRESHOLD) {
    digitalWrite(RELAY_PIN, LOW);
    digitalWrite(BUZZER_PIN, HIGH);
    Firebase.RTDB.setString(&fbdo, "/status", "THEFT DETECTED");
  } else {
    digitalWrite(RELAY_PIN, HIGH);
    digitalWrite(BUZZER_PIN, LOW);
    Firebase.RTDB.setString(&fbdo, "/status", "NORMAL");
  }

  delay(3000);
}

3️⃣ File Name : Current_Sensor_Calibration_ESP32.ino

C/C++
/*************************************************
 Project   : Sensor Calibration
 File Name : Current_Sensor_Calibration_ESP32.ino
 Platform  : ESP32 (Arduino IDE)
*************************************************/

#define SENSOR_PIN 34

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT);
}

void loop() {

  int rawValue = analogRead(SENSOR_PIN);
  float voltage = (rawValue / 4095.0) * 3.3;

  Serial.print("Raw Value: ");
  Serial.print(rawValue);
  Serial.print(" | Voltage: ");
  Serial.println(voltage);

  delay(1000);
}

Credits

Tech Gyan Set
9 projects • 1 follower
Thanks to Tech Gyan Set .

Comments