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

Arduino UNO Based Hybrid Energy Management System with I2C LCD Display and Relay Control

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Hybrid Energy Management System with I2C LCD Display and Relay Control

Circuit Documentation

Summary

The circuit is designed to manage a hybrid energy system that utilizes solar panels, a battery, and an AC power source to supply power to various loads. The system is controlled by an Arduino UNO microcontroller, which monitors the voltage levels from the solar panel, battery, and grid to determine the most efficient power source. The circuit includes voltage sensors for monitoring, a 20x4 LCD with an I2C module for display, and relay modules for switching power sources and loads. The Arduino UNO also controls the charging of the battery and manages emergency situations.

Component List

Microcontroller

Sensors

Display

Modules

Relay Modules

Power Sources

Passive Components

Wiring Details

Arduino UNO

Voltage Sensors

Lcd 20x4 i2c

I2C Module

4 Channel Relay Modules

LEDs

Power Supply

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 to determine the power source and control relays
  // (Omitted for brevity, see full code for details)

  delay(1000);
}

Additional Code Files

(Note: The actual logic for controlling the relays based on voltage readings is included in the full code but omitted here for brevity.)