Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Based Hybrid Energy Management System with Solar, Battery, and Grid Power Control

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Hybrid Energy Management System with Solar, Battery, and Grid Power Control

Hybrid Energy Management System Documentation

Summary

The Hybrid Energy Management System is designed to manage and distribute power from multiple sources, including solar panels, batteries, and the grid. It utilizes an Arduino UNO microcontroller to monitor voltage levels and control relays that switch between power sources based on their availability and voltage levels. The system also includes a 20x4 LCD with an I2C module for displaying voltage readings and the current power source. Voltage sensors are used to measure the voltage from the solar panel, battery, and grid. A 4-channel relay module is used to control the power flow to different loads and to manage charging. The system is powered by a 12V 5A power supply connected to an AC source.

Component List

Wiring Details

Arduino UNO

Lcd 20x4 i2c

I2C module

4 channel relay module (x2)

Voltage Sensor (x3)

Solar Panel

Battery

POWER SUPPLY 12V 5AMP

AC source

Resistor (200 Ohms)

LED: Two Pin (red) (x8)

Documented Code

Arduino UNO Code (sketch.ino)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

const int solarPin = A0;
const int batteryPin = A1;
const int gridPin = A2;

const int relaySolar = 13;
const int relayBattery = 12;
const int relayGrid = 11;
const int relayHighLoad = 7;
const int relayNormalLoad = 6;
const int relayLowLoad = 5;
const int Gcharge = 4;
const int Scharge = 3;
const int Emer = 1;

float solarVoltage, batteryVoltage, gridVoltage;

void setup() {
  Serial.begin(9600);
  lcd.backlight();
  lcd.begin(20, 4);
  lcd.init();
  
  lcd.setCursor(0, 1);
  lcd.print("HYBRID ENERGY SMART");
  lcd.setCursor(5, 2);
  lcd.print("MANAGEMENT");
  delay(2000);

  pinMode(relaySolar, OUTPUT);
  pinMode(relayBattery, OUTPUT);
  pinMode(relayGrid, OUTPUT);
  pinMode(relayHighLoad, OUTPUT);
  pinMode(relayNormalLoad, OUTPUT);
  pinMode(relayLowLoad, OUTPUT);
  pinMode(Gcharge, OUTPUT);
  pinMode(Scharge, OUTPUT);
  pinMode(Emer, OUTPUT);

  digitalWrite(relaySolar, HIGH);
  digitalWrite(relayBattery, HIGH);
  digitalWrite(relayGrid, HIGH);
  digitalWrite(relayHighLoad, HIGH);
  digitalWrite(relayNormalLoad, HIGH);
  digitalWrite(relayLowLoad, HIGH);
  digitalWrite(Gcharge, HIGH);
  digitalWrite(Scharge, HIGH);
  digitalWrite(Emer, HIGH);
}

void loop() {
  solarVoltage = analogRead(solarPin) * (5.0 / 1023.0) * (26.0 / 5.0);
  batteryVoltage = analogRead(batteryPin) * (5.0 / 1023.0) * (23.5 / 5.0);
  gridVoltage = analogRead(gridPin) * (5.0 / 1023.0) * (23.5 / 5.0);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Solar: ");
  lcd.print(solarVoltage, 2);
  lcd.print("V");

  lcd.setCursor(0, 1);
  lcd.print("Battery: ");
  lcd.print(batteryVoltage, 2);
  lcd.print("V");

  lcd.setCursor(0, 2);
  lcd.print("Grid: ");
  lcd.print(gridVoltage, 2);
  lcd.print("V");

  // Logic for selecting the power source based on voltage levels
  // and controlling the relays accordingly.
  // The LCD displays the current power source and voltage levels.
  // The system prioritizes solar power, then battery, and finally grid power.
  // It also manages the charging of the battery and the distribution of power
  // to high, normal, and low load circuits.

  delay(1000);
}

Additional Notes

The provided code snippet is a simplified version of the full program. It includes