Thursday, 1 October 2026

IoT-Based Smart Grid Load Redistribution and Monitoring System Using Arduino and ESP8266

Project Summary

Project Title:
Design and Implementation of a Smart Grid Load Redistribution System Using IoT

This project presents an IoT-based smart electrical load management system designed to monitor grid voltage and current and automatically manage multiple electrical loads according to the measured load condition.

The system uses an Arduino as the main controller and an ESP8266 Wi-Fi module for IoT connectivity. A ZMP101B voltage sensor measures the AC supply voltage, while an ACS712 current sensor measures the load current. The Arduino processes these measurements and controls three relay channels, each connected to a different AC bulb representing an individual electrical load.

When the monitored load reaches a predefined limit, the controller can activate the alarm and progressively disconnect selected loads through the relays. This demonstrates the basic concept of automatic load shedding and load redistribution. The ESP8266 sends electrical parameters and load status to an IoT/web dashboard for remote monitoring.

Main Components

  • Arduino
  • ESP8266 Wi-Fi module
  • ZMP101B voltage sensor
  • ACS712 current sensor
  • 3 relay modules/coils
  • 3 AC bulbs as demonstration loads
  • Alarm/buzzer
  • Power supply

Working Flow

AC Grid Supply → Voltage & Current Sensors → Arduino → Load Analysis → Relay Control → 3 Loads

At the same time:

Arduino → ESP8266 → Wi-Fi → IoT/Web Dashboard

Major Features

  • Real-time voltage monitoring
  • Real-time current monitoring
  • Electrical load/power estimation
  • Automatic load management
  • Three independent relay-controlled loads
  • Overload detection
  • Automatic load shedding
  • Alarm indication
  • ESP8266 Wi-Fi communication
  • IoT/web-based remote monitoring
  • Load status monitoring
  • Improved electrical load management

Expected Operation

Normal condition:
All three loads remain ON.

High-load condition:
The system detects excessive current/power and disconnects a selected lower-priority load.

Persistent overload:
Additional loads can be disconnected according to the programmed priority.

Critical condition:
The alarm is activated and the system reports the condition through the IoT interface.

Safety: The three bulbs represent AC/mains loads in the prototype. Properly rated relays, fuses/MCBs, isolation, insulated wiring, and an enclosed mains section should be used.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Project Documentation

 

Below is a complete documentation structure for your project, including the project description, objectives, hardware, working principle, block diagram, circuit/pin connections, flowcharts, control algorithm, Arduino code, ESP8266 IoT code, testing procedure, advantages, limitations, applications, and future scope.

Design and Implementation of a Smart Grid Load Redistribution System Using IoT

  1. Abstract

The Smart Grid Load Redistribution System Using IoT is an intelligent electrical load monitoring and management system designed to monitor the voltage and current of an electrical supply and automatically control multiple electrical loads according to the measured load condition.

The proposed system uses an Arduino as the main controller, an ESP8266 Wi-Fi module for IoT communication, a ZMPT101B voltage sensor for AC voltage measurement, and an ACS712 current sensor for AC current measurement. Three relay channels are used to control three separate electrical loads represented by AC bulbs. An alarm/buzzer provides a local indication when an overload or abnormal electrical condition is detected.

The Arduino continuously measures the electrical parameters, calculates the approximate load power, compares the measured load with predefined safety limits, and controls the relay channels according to load priority. During normal operation, all loads can remain active. When excessive loading is detected, the system can disconnect lower-priority loads sequentially. The ESP8266 transmits the measured parameters and load status to an IoT/web platform for remote monitoring.

The project demonstrates the basic principles of smart load management, automatic load shedding, electrical parameter monitoring, IoT connectivity, and intelligent energy management.

Technical terminology: In this prototype, "load redistribution" is implemented primarily through priority-based load management/load shedding. It does not physically redistribute power between utility-grid phases.

  1. Introduction

Traditional electrical systems generally depend on manual monitoring and switching of loads. When several loads operate simultaneously, the total current can increase beyond the desired operating limit. This can result in excessive loading, unnecessary energy consumption, or activation of protective devices.

A smart load management system can continuously monitor electrical parameters and automatically control non-critical loads.

The proposed system combines:

  • Electrical sensing
  • Microcontroller processing
  • Automatic relay control
  • Overload detection
  • Alarm indication
  • Wi-Fi communication
  • IoT monitoring

The Arduino performs the real-time sensing and control functions, while the ESP8266 provides wireless communication between the physical system and an IoT/web platform.

  1. Project Objectives

The main objectives are:

  1. To continuously monitor AC voltage.
  2. To continuously monitor load current.
  3. To estimate electrical power consumption.
  4. To monitor multiple electrical loads.
  5. To control three independent loads using relays.
  6. To detect excessive electrical loading.
  7. To automatically disconnect lower-priority loads when required.
  8. To activate an alarm during abnormal conditions.
  9. To transmit electrical data through Wi-Fi.
  10. To provide IoT-based remote monitoring.
  11. To demonstrate intelligent electrical load management.
  1. Proposed System

The proposed system consists of five major sections:

Section 1 — Measurement

The ZMPT101B measures AC voltage and the ACS712 measures AC current.

Section 2 — Processing

The Arduino receives the sensor signals and calculates:

  • Voltage
  • Current
  • Approximate power
  • Load condition

Section 3 — Load Control

Three relay channels control three separate loads:

Relay 1 → Bulb 1 → Load 1

Relay 2 → Bulb 2 → Load 2

Relay 3 → Bulb 3 → Load 3

Section 4 — Protection

When the load exceeds the configured limit:

Overload

   ↓

Alarm ON

   ↓

Disconnect Load 3

   ↓

Check Load

   ↓

Still High?

   ↓

Disconnect Load 2

Section 5 — IoT

The ESP8266 sends information through Wi-Fi to an IoT/web dashboard.

  1. System Architecture

                         AC GRID SUPPLY

                              │

                ┌─────────────┴─────────────┐

                │                           │

         ZMPT101B Sensor              ACS712 Sensor

         Voltage Measurement          Current Measurement

                │                           │

                └─────────────┬─────────────┘

                              │

                         ARDUINO UNO

                       Main Controller

                              │

          ┌───────────────────┼──────────────────┐

          │                   │                  │

       Relay 1             Relay 2            Relay 3

          │                   │                  │

       Bulb 1              Bulb 2             Bulb 3

       Load 1              Load 2             Load 3

          │

          └───────────────┐

                          │

                     Alarm/Buzzer

                          │

                       ESP8266

                       Wi-Fi

                          │

                    INTERNET / IoT

                          │

                   WEB DASHBOARD

  1. Hardware Components

Component

Quantity

Function

Arduino UNO

1

Main controller

ESP8266

1

Wi-Fi/IoT communication

ZMPT101B

1

AC voltage measurement

ACS712

1

AC current measurement

Relay module

3

Load switching

AC Bulb

3

Demonstration loads

Buzzer/Alarm

1

Overload indication

5V Power Supply

1

Controller/relay supply

Connecting wires

As required

Connections

Fuse/MCB

1

AC protection

  1. ZMPT101B Voltage Sensor

The ZMPT101B is an isolated AC voltage sensing module.

It provides a low-voltage analog signal corresponding to the measured AC voltage.

Connection

ZMPT101B

 ├── VCC → 5V

 ├── GND → Arduino GND

 └── OUT → Arduino A0

The actual voltage calibration depends on the sensor module and its potentiometer/calibration setting.

Therefore, the voltage calibration constant in the software should be adjusted using a properly rated measuring instrument.

  1. ACS712 Current Sensor

The ACS712 measures current using the Hall-effect principle.

Typical versions include:

  • ACS712 5A
  • ACS712 20A
  • ACS712 30A

The output is an analog voltage proportional to the current.

ACS712

 ├── VCC → 5V

 ├── GND → Arduino GND

 └── OUT → Arduino A1

The sensitivity depends on the exact ACS712 version.

Typical nominal sensitivities are:

Version

Approx. Sensitivity

5A

185 mV/A

20A

100 mV/A

30A

66 mV/A

The correct value must match the actual module used.

  1. Relay and Load Section

Three relays are used to control three separate loads.

Arduino D5 → Relay 1 → Bulb 1

Arduino D6 → Relay 2 → Bulb 2

Arduino D7 → Relay 3 → Bulb 3

Suggested priority:

Load 1 = Highest Priority

Load 2 = Medium Priority

Load 3 = Lowest Priority

Therefore, during overload:

First disconnect → Load 3

Second disconnect → Load 2

Last disconnect → Load 1

This priority can be changed in the program.

  1. Alarm Circuit

The alarm/buzzer is controlled by the Arduino.

Arduino D8 → Buzzer control

When an overload condition occurs:

Overload detected

       ↓

Buzzer ON

       ↓

Load management begins

For a higher-power alarm, use a transistor/MOSFET driver rather than connecting the alarm directly to an Arduino pin.

  1. ESP8266 IoT Section

The ESP8266 provides Wi-Fi connectivity.

The communication structure is:

Sensors

   ↓

Arduino

   ↓

Serial Communication

   ↓

ESP8266

   ↓

Wi-Fi Router

   ↓

Internet

   ↓

IoT Platform / Web Dashboard

The ESP8266 can transmit:

  • Voltage
  • Current
  • Power
  • Load 1 status
  • Load 2 status
  • Load 3 status
  • Overload status
  • Alarm status
  1. Arduino Pin Configuration

A practical pin assignment is:

Arduino Pin

Connection

A0

ZMPT101B voltage output

A1

ACS712 current output

D2

ESP8266 TX → Arduino RX

D3

Arduino TX → ESP8266 RX through level shifting

D5

Relay 1

D6

Relay 2

D7

Relay 3

D8

Alarm/Buzzer

5V

Sensor/relay supply as appropriate

GND

Common low-voltage ground

Important ESP8266 note

The ESP8266 uses 3.3 V logic. Do not directly feed a 5 V Arduino TX signal into an ESP8266 RX pin. Use an appropriate 3.3 V logic-level interface/voltage divider.

  1. Complete Working Principle

Step 1 — System Initialization

When the system starts, the Arduino initializes:

  • Analog sensor inputs
  • Relay outputs
  • Alarm output
  • Serial communication
  • ESP8266 communication

Initially:

Load 1 → ON

Load 2 → ON

Load 3 → ON

Alarm → OFF

Step 2 — Sensor Measurement

The Arduino reads the ZMPT101B and ACS712 signals.

Voltage Sensor → Voltage

Current Sensor → Current

The controller then estimates the electrical power.

For a simplified resistive-load demonstration:

P=V×IP = V \times I

where:

  • P = power in watts
  • V = RMS voltage
  • I = RMS current

For real AC loads with significant power factor, actual real power requires power-factor measurement rather than simply multiplying RMS voltage and RMS current.

  1. Load Decision Algorithm

The controller compares measured power against a configured limit.

Example:

Power Limit = 1000 W

Normal

Power ≤ 1000 W

 

Load 1 = ON

Load 2 = ON

Load 3 = ON

Alarm = OFF

Overload

Power > 1000 W

        ↓

Alarm ON

        ↓

Load 3 OFF

        ↓

Measure again

If the load is still excessive:

Load 2 OFF

        ↓

Measure again

If still excessive:

Load 1 OFF

  1. Load Redistribution Flow

             START

               │

               ▼

       Initialize Arduino

               │

               ▼

       Initialize ESP8266

               │

               ▼

          Connect Wi-Fi

               │

               ▼

        Read Voltage

               │

               ▼

         Read Current

               │

               ▼

        Calculate Power

               │

               ▼

       Send Data to IoT

               │

               ▼

       Is Load Safe?

          /         \

        YES          NO

         │            │

         ▼            ▼

     Keep Loads     Alarm ON

        ON             │

         │             ▼

         │         Turn OFF

         │          Load 3

         │             │

         │             ▼

         │       Check Load Again

         │             │

         │       Still Excessive?

         │          /       \

         │        NO         YES

         │        │           │

         │        │           ▼

         │        │       Turn OFF

         │        │        Load 2

         │        │           │

         │        │           ▼

         │        │       Check Again

         │        │

         └────────┴───────────┐

                              ▼

                       Update IoT Data

                              │

                              ▼

                    Continuous Monitoring

                              │

                              └──→ Repeat

  1. Detailed Circuit Concept

             AC 230V SUPPLY

               L       N

               │       │

               │       └───────────────────────┐

               │                               │

             FUSE                              │

               │                               │

               ├──── ZMPT101B ─────┐           │

               │                   │           │

               │              Voltage OUT      │

               │                   │           │

               │                  A0           │

               │                   │           │

               └──── ACS712 ───────┐           │

                                   │           │

                              Current OUT       │

                                   │           │

                                  A1           │

                                                │

              ARDUINO UNO                       │

          ┌───────────────────┐                 │

          │                   │                 │

 A0 ◄─────┤ ZMPT101B          │                 │

 A1 ◄─────┤ ACS712             │                 │

          │                   │                 │

 D5 ─────►│ Relay 1            │────► Load 1

 D6 ─────►│ Relay 2            │────► Load 2

 D7 ─────►│ Relay 3            │────► Load 3

 D8 ─────►│ Alarm              │

          │                   │

 D2 ◄─────┤ ESP8266 TX         │

 D3 ─────►│ ESP8266 RX*        │

          └───────────────────┘

                    │

                    ▼

                ESP8266

                    │

                  Wi-Fi

                    │

                    ▼

              IoT Dashboard

* Use appropriate 3.3 V level shifting between Arduino TX and ESP8266 RX.

  1. Control Logic

The software follows this logic:

IF voltage/current readings are valid

        ↓

Calculate electrical load

        ↓

IF load <= safe limit

        ↓

Keep all required loads ON

 

ELSE

        ↓

Activate alarm

        ↓

Turn OFF lowest-priority load

        ↓

Wait for stabilization

        ↓

Measure again

 

IF load is still high

        ↓

Turn OFF next lower-priority load

 

IF load becomes safe

        ↓

Maintain remaining loads

        ↓

Continue IoT monitoring

  1. Arduino Software

The following example assumes:

  • ZMPT101B OUT → A0
  • ACS712 OUT → A1
  • Relay 1 → D5
  • Relay 2 → D6
  • Relay 3 → D7
  • Buzzer → D8
  • ESP8266 serial → D2/D3

It also assumes an active-LOW relay module. If your relay is active-HIGH, reverse the relay logic.

#include <SoftwareSerial.h>

#include <math.h>

 

// ---------------- PIN DEFINITIONS ----------------

#define VOLTAGE_PIN A0

#define CURRENT_PIN A1

 

#define RELAY1 5

#define RELAY2 6

#define RELAY3 7

 

#define BUZZER 8

 

// Arduino RX, TX

SoftwareSerial espSerial(2, 3);

 

// ---------------- SETTINGS ----------------

 

// Adjust these after calibration

float VOLTAGE_CALIBRATION = 1.00;

 

// ACS712 sensitivity.

// Change according to your actual ACS712 version.

float ACS_SENSITIVITY = 0.100;   // 20A version = approx 100mV/A

 

// ADC reference

float ADC_REFERENCE = 5.0;

 

// Approximate safe power limit

float POWER_LIMIT = 1000.0;

 

// Recovery threshold with hysteresis

float RECOVERY_LIMIT = 800.0;

 

// Relay active LOW

#define RELAY_ON  LOW

#define RELAY_OFF HIGH

 

bool load1 = true;

bool load2 = true;

bool load3 = true;

 

unsigned long lastSend = 0;

 

// ------------------------------------------------

 

void setup()

{

  Serial.begin(9600);

  espSerial.begin(9600);

 

  pinMode(RELAY1, OUTPUT);

  pinMode(RELAY2, OUTPUT);

  pinMode(RELAY3, OUTPUT);

  pinMode(BUZZER, OUTPUT);

 

  digitalWrite(RELAY1, RELAY_ON);

  digitalWrite(RELAY2, RELAY_ON);

  digitalWrite(RELAY3, RELAY_ON);

  digitalWrite(BUZZER, LOW);

 

  delay(2000);

 

  Serial.println("SMART GRID LOAD MANAGEMENT SYSTEM");

}

 

// ------------------------------------------------

 

float readVoltage()

{

  long sum = 0;

 

  for (int i = 0; i < 500; i++)

  {

    sum += analogRead(VOLTAGE_PIN);

    delayMicroseconds(200);

  }

 

  float averageADC = sum / 500.0;

 

  float sensorVoltage =

      (averageADC * ADC_REFERENCE) / 1023.0;

 

  /*

    The exact conversion from sensor output

    to AC RMS voltage depends on calibration.

 

    Replace this factor after calibration.

  */

 

  float mainsVoltage =

      sensorVoltage * VOLTAGE_CALIBRATION;

 

  return mainsVoltage;

}

 

// ------------------------------------------------

 

float readCurrent()

{

  const int samples = 500;

 

  float sumSquares = 0;

 

  // Estimate ACS712 zero-current offset

  float offset = 512.0;

 

  for (int i = 0; i < samples; i++)

  {

    int adcValue = analogRead(CURRENT_PIN);

 

    float centered =

        adcValue - offset;

 

    float voltage =

        (centered * ADC_REFERENCE) / 1023.0;

 

    sumSquares += voltage * voltage;

 

    delayMicroseconds(200);

  }

 

  float rmsVoltage =

      sqrt(sumSquares / samples);

 

  float current =

      rmsVoltage / ACS_SENSITIVITY;

 

  return current;

}

 

// ------------------------------------------------

 

void controlLoads(float power)

{

  if (power > POWER_LIMIT)

  {

    digitalWrite(BUZZER, HIGH);

 

    // First shed lowest-priority load

    if (load3)

    {

      digitalWrite(RELAY3, RELAY_OFF);

      load3 = false;

 

      Serial.println("OVERLOAD: LOAD 3 OFF");

      delay(1000);

      return;

    }

 

    // Second priority

    if (load2)

    {

      digitalWrite(RELAY2, RELAY_OFF);

      load2 = false;

 

      Serial.println("OVERLOAD: LOAD 2 OFF");

      delay(1000);

      return;

    }

 

    // Last priority

    if (load1)

    {

      digitalWrite(RELAY1, RELAY_OFF);

      load1 = false;

 

      Serial.println("CRITICAL: LOAD 1 OFF");

      delay(1000);

      return;

    }

  }

  else

  {

    digitalWrite(BUZZER, LOW);

  }

}

 

// ------------------------------------------------

 

void sendData(float voltage,

              float current,

              float power)

{

  espSerial.print("V=");

  espSerial.print(voltage, 2);

 

  espSerial.print(",I=");

  espSerial.print(current, 2);

 

  espSerial.print(",P=");

  espSerial.print(power, 2);

 

  espSerial.print(",L1=");

  espSerial.print(load1 ? 1 : 0);

 

  espSerial.print(",L2=");

  espSerial.print(load2 ? 1 : 0);

 

  espSerial.print(",L3=");

  espSerial.print(load3 ? 1 : 0);

 

  espSerial.println();

}

 

// ------------------------------------------------

 

void loop()

{

  float voltage = readVoltage();

  float current = readCurrent();

 

  float power = voltage * current;

 

  Serial.print("Voltage: ");

  Serial.print(voltage);

  Serial.println(" V");

 

  Serial.print("Current: ");

  Serial.print(current);

  Serial.println(" A");

 

  Serial.print("Power: ");

  Serial.print(power);

  Serial.println(" W");

 

  controlLoads(power);

 

  if (millis() - lastSend > 5000)

  {

    sendData(voltage, current, power);

 

    lastSend = millis();

  }

 

  delay(1000);

}

  1. Important Sensor Calibration

The above program intentionally leaves the voltage conversion as a calibration parameter because the actual ZMPT101B module output depends on the particular module and adjustment.

For example:

float VOLTAGE_CALIBRATION = 1.00;

should be experimentally calibrated.

Calibration procedure

Use a properly rated AC measuring instrument.

  1. Apply the intended AC input.
  2. Measure the actual RMS voltage using the reference instrument.
  3. Observe the Arduino calculated voltage.
  4. Adjust the calibration factor.
  5. Repeat until the displayed value is reasonably close.
  6. Do the same for the ACS712 current measurement.

Do not calibrate or probe exposed mains wiring by hand.

  1. ESP8266 IoT Software

The ESP8266 can receive the Arduino data through serial communication and upload it to an IoT service.

One practical implementation is ThingSpeak.

Replace:

YOUR_WIFI_NAME

YOUR_WIFI_PASSWORD

YOUR_THINGSPEAK_API_KEY

with your actual credentials.

#include <ESP8266WiFi.h>

#include <ESP8266HTTPClient.h>

 

const char* ssid = "YOUR_WIFI_NAME";

const char* password = "YOUR_WIFI_PASSWORD";

 

String apiKey = "YOUR_THINGSPEAK_API_KEY";

 

WiFiClient client;

 

String serialData = "";

 

float voltage = 0;

float current = 0;

float power = 0;

 

int load1 = 0;

int load2 = 0;

int load3 = 0;

 

void setup()

{

  Serial.begin(9600);

 

  WiFi.begin(ssid, password);

 

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

  }

 

  Serial.println();

  Serial.println("ESP8266 CONNECTED");

  Serial.println(WiFi.localIP());

}

 

void parseData(String data)

{

  int p;

 

  p = data.indexOf("V=");

  if (p >= 0)

  {

    voltage =

      data.substring(p + 2,

      data.indexOf(",", p)).toFloat();

  }

 

  p = data.indexOf("I=");

  if (p >= 0)

  {

    current =

      data.substring(p + 2,

      data.indexOf(",", p)).toFloat();

  }

 

  p = data.indexOf("P=");

  if (p >= 0)

  {

    power =

      data.substring(p + 2,

      data.indexOf(",", p)).toFloat();

  }

 

  p = data.indexOf("L1=");

  if (p >= 0)

  {

    load1 =

      data.substring(p + 3,

      data.indexOf(",", p)).toInt();

  }

 

  p = data.indexOf("L2=");

  if (p >= 0)

  {

    load2 =

      data.substring(p + 3,

      data.indexOf(",", p)).toInt();

  }

 

  p = data.indexOf("L3=");

  if (p >= 0)

  {

    load3 =

      data.substring(p + 3).toInt();

  }

}

 

void uploadData()

{

  if (WiFi.status() != WL_CONNECTED)

  {

    WiFi.begin(ssid, password);

    return;

  }

 

  HTTPClient http;

 

  String url =

    "http://api.thingspeak.com/update?api_key="

    + apiKey

    + "&field1=" + String(voltage, 2)

    + "&field2=" + String(current, 2)

    + "&field3=" + String(power, 2)

    + "&field4=" + String(load1)

    + "&field5=" + String(load2)

    + "&field6=" + String(load3);

 

  http.begin(client, url);

 

  int httpCode = http.GET();

 

  Serial.print("ThingSpeak Response: ");

  Serial.println(httpCode);

 

  http.end();

}

 

void loop()

{

  if (Serial.available())

  {

    serialData = Serial.readStringUntil('\n');

 

    serialData.trim();

 

    if (serialData.length() > 0)

    {

      parseData(serialData);

 

      Serial.print("Voltage = ");

      Serial.println(voltage);

 

      Serial.print("Current = ");

      Serial.println(current);

 

      Serial.print("Power = ");

      Serial.println(power);

 

      uploadData();

    }

  }

 

  delay(100);

}

  1. IoT Data Fields

The IoT dashboard can contain:

Field

Parameter

Field 1

Voltage

Field 2

Current

Field 3

Power

Field 4

Load 1

Field 5

Load 2

Field 6

Load 3

Example:

Voltage       : 231 V

Current       : 3.25 A

Power         : 750 W

Load 1        : ON

Load 2        : ON

Load 3        : OFF

System Status : LOAD MANAGED

  1. Software Flowchart

                 ┌───────────┐

                 │   START   │

                 └─────┬─────┘

                       ↓

             ┌──────────────────┐

             │ Initialize System│

             └────────┬─────────┘

                      ↓

             ┌──────────────────┐

             │ Initialize Wi-Fi │

             └────────┬─────────┘

                      ↓

             ┌──────────────────┐

             │ Read Voltage     │

             │ Read Current     │

             └────────┬─────────┘

                      ↓

             ┌──────────────────┐

             │ Calculate Power  │

             └────────┬─────────┘

                      ↓

             ┌──────────────────┐

             │ Send IoT Data    │

             └────────┬─────────┘

                      ↓

                ┌────────────┐

                │ Load Safe? │

                └─────┬──┬───┘

                   YES│  │NO

                      │  │

                      ↓  ↓

             ┌─────────┐ ┌─────────────┐

             │ Keep ON │ │ Alarm ON    │

             └────┬────┘ └──────┬──────┘

                  │              ↓

                  │       ┌──────────────┐

                  │       │ Load 3 OFF   │

                  │       └──────┬───────┘

                  │              ↓

                  │       ┌──────────────┐

                  │       │ Measure Again│

                  │       └──────┬───────┘

                  │              ↓

                  │        Still High?

                  │         /        \

                  │       NO          YES

                  │       │            ↓

                  │       │      Load 2 OFF

                  │       │            ↓

                  │       │      Measure Again

                  │       │

                  └───────┴───────────────→

                              ↓

                       CONTINUOUS LOOP

  1. Hardware Flow

AC Supply

    ↓

┌──────────────────────┐

│ Voltage Measurement  │

│ ZMPT101B             │

└──────────┬───────────┘

           │

           ├─────────────┐

           ↓             ↓

      Arduino         ACS712

           │          Current

           │          Measurement

           └─────┬───────┘

                 ↓

          Load Calculation

                 ↓

          Decision Making

                 ↓

       ┌─────────┼─────────┐

       ↓         ↓         ↓

    Relay 1   Relay 2   Relay 3

       ↓         ↓         ↓

    Bulb 1    Bulb 2    Bulb 3

                 │

                 ↓

             Alarm

                 │

                 ↓

             ESP8266

                 ↓

               Wi-Fi

                 ↓

          IoT Dashboard

  1. Operating Modes

Mode 1 — Normal

Voltage Normal

Current Normal

Power Normal

 

Relay 1 = ON

Relay 2 = ON

Relay 3 = ON

Alarm = OFF

Mode 2 — High Load

Power > Limit

 

Alarm = ON

Relay 3 = OFF

Mode 3 — Continued Overload

Power still > Limit

 

Relay 2 = OFF

Mode 4 — Critical Load

Power remains excessive

 

Relay 1 = OFF

Alarm = ON

  1. Example Demonstration

Suppose:

Voltage = 230 V

Load 1 = 200 W

Load 2 = 300 W

Load 3 = 600 W

Total:

Ptotal=200+300+600P_{total}=200+300+600 Ptotal=1100WP_{total}=1100W

If the configured limit is:

1000 W

then:

1100 W > 1000 W

Therefore:

Alarm ON

Load 3 OFF

After Load 3 is disconnected:

200 W + 300 W = 500 W

The system is now below the limit.

Therefore:

Load 1 = ON

Load 2 = ON

Load 3 = OFF

Alarm = OFF/managed according to program

This demonstrates priority-based automatic load management.

  1. Expected Results

The expected prototype results are:

Condition

Load 1

Load 2

Load 3

Alarm

Normal

ON

ON

ON

OFF

High Load

ON

ON

OFF

ON

Continued High Load

ON

OFF

OFF

ON

Critical

OFF

OFF

OFF

ON

Load Normalized

Controlled recovery

Controlled recovery

Controlled recovery

OFF

The exact thresholds and recovery behavior should be determined from the actual prototype and programmed requirements.

  1. Testing Procedure

Test 1 — Voltage Sensor

Verify that the Arduino receives a changing analog signal when the monitored AC voltage changes.

Record:

Reference Voltage

Sensor Reading

Error

Test 2 — Current Sensor

Connect an appropriate test load and compare the ACS712 reading with a suitable reference meter.

Record:

Reference Current

ACS712 Current

Measurement Error

Test 3 — Relay Test

Test each relay individually:

Relay 1 → Bulb 1

Relay 2 → Bulb 2

Relay 3 → Bulb 3

Test 4 — Overload Test

Increase the demonstration load within safe limits.

Observe:

Power increases

       ↓

Threshold exceeded

       ↓

Alarm activates

       ↓

Lowest-priority relay switches OFF

       ↓

Power decreases

Test 5 — IoT Test

Check:

Arduino

   ↓

ESP8266

   ↓

Wi-Fi

   ↓

IoT platform

Verify that voltage, current, power and load status are updated.

  1. Advantages
  1. Automatic electrical load management.
  2. Real-time voltage monitoring.
  3. Real-time current monitoring.
  4. Multiple load control.
  5. Overload protection logic.
  6. Local alarm indication.
  7. IoT-based remote monitoring.
  8. Wireless communication.
  9. Reduced dependence on manual switching.
  10. Expandable architecture.
  11. Suitable for educational smart-grid demonstrations.
  1. Limitations
  1. The prototype uses simplified load-control logic.
  2. Voltage/current sensor calibration is required.
  3. ACS712 accuracy depends on the selected version and installation.
  4. Simple V × I gives apparent power for general AC loads unless power factor is accounted for.
  5. Wi-Fi-based monitoring depends on network availability.
  6. The prototype demonstrates load shedding rather than utility-scale grid power redistribution.
  7. Relay ratings must match the connected loads.
  1. Applications

The concept can be adapted for:

  • Smart homes
  • Smart buildings
  • Industrial load management
  • Energy monitoring systems
  • Educational smart-grid prototypes
  • Laboratory load management
  • Commercial building automation
  • IoT energy-management systems
  • Automatic non-critical-load shedding
  • Electrical safety monitoring
  1. Future Enhancements

The project can be extended with:

AI-Based Load Prediction

Historical power data can be analyzed to predict future load conditions.

Mobile Application

A mobile application can display:

Voltage

Current

Power

Load Status

Alarm Status

Remote Load Control

Authorized users could control individual loads through an IoT dashboard.

Cloud Database

Historical electrical data can be stored for:

  • Daily analysis
  • Weekly analysis
  • Monthly consumption
  • Peak-load identification

Energy Metering

Energy consumption can be calculated:

Energy=Power×TimeEnergy = Power \times Time

and displayed in kWh.

Advanced Power Measurement

A dedicated energy-metering IC or suitable power-monitoring hardware can be added for more accurate real-power and power-factor measurements.

AI-Based Load Scheduling

The system could automatically determine which loads should operate according to priority and predicted demand.

  1. Conclusion

The Design and Implementation of a Smart Grid Load Redistribution System Using IoT demonstrates how embedded systems and wireless communication can be combined to create an intelligent electrical load-management solution.

The ZMPT101B voltage sensor and ACS712 current sensor provide electrical measurements to the Arduino. The Arduino processes these measurements and controls three relay-operated loads. When the electrical load exceeds a predefined limit, the system can activate an alarm and progressively disconnect lower-priority loads. The ESP8266 provides wireless connectivity, allowing electrical parameters and load status to be monitored through an IoT platform.

The prototype therefore combines sensing, processing, automatic load control, alarm indication, and IoT monitoring into one integrated system.

  1. One-Line Project Architecture

ZMPT101B + ACS712

        ↓

     Arduino

        ↓

Load Calculation & Decision

        ↓

 ┌──────┼──────┐

 ↓      ↓      ↓

R1     R2     R3

 ↓      ↓      ↓

B1     B2     B3

        ↓

      Alarm

        ↓

    ESP8266 Wi-Fi

        ↓

 IoT / Web Dashboard

Important implementation note

For your actual prototype, use the exact sensor designation printed on your module—ZMPT101B is the commonly used AC voltage-sensor module. Also, the three bulbs are mains loads, so the AC side should use appropriately rated relays, fuse/MCB protection, insulated terminals/enclosure, and proper isolation from the Arduino/ESP8266 low-voltage circuitry. The circuit should be assembled and tested by someone qualified to work with mains voltage.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

No comments:

Post a Comment