The circuit is designed to manage a hybrid energy system that utilizes solar panels, a battery, and an AC power supply to provide electricity. It includes an Arduino UNO microcontroller to monitor voltage levels from the different energy sources and control relays to switch between these sources. The system also features a 20x4 LCD with I2C interface to display voltage readings and the current power source. Voltage sensors are used to measure the voltages of the solar panel, battery, and grid. A set of relays is used to connect and disconnect loads based on the availability and sufficiency of the power sources.
#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 control relays based on voltage readings
// (Omitted for brevity, see full code for details)
delay(1000);
}
This code snippet is responsible for reading the voltage levels from the solar panel, battery, and grid, and controlling the relays to switch between these power sources. It also updates the LCD with the current voltage readings and power source status. The full code includes additional logic to determine which relays to activate based on the voltage levels.
(Note: The full code includes additional logic for controlling the relays and managing the power sources, which is not shown here for brevity.)
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
This code snippet is a placeholder for the power supply, which does not require any specific code for its operation in this context. It is included here for completeness.