#define BATTERY_PIN A0
#define RED_LED 2
#define GREEN_LED 3
#define BUZZER 4
float voltage = 0.0;
int soc = 0;
void setup() {
Serial.begin(9600);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
Serial.println("Basic Battery Management System");
}
void loop() {
int sensorValue = analogRead(BATTERY_PIN);
// Convert ADC value to voltage
voltage = (sensorValue / 1023.0) * 5.0;
// SOC Estimation
soc = map(voltage * 100, 320, 420, 0, 100);
// Limit SOC range
if (soc > 100) soc = 100;
if (soc < 0) soc = 0;
Serial.print("Battery Voltage: ");
Serial.print(voltage);
Serial.println(" V");
Serial.print("Estimated SOC: ");
Serial.print(soc);
Serial.println(" %");
// Protection Logic
// Undervoltage
if (voltage < 3.3) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
tone(BUZZER, 1000);
Serial.println("ALERT: UNDER VOLTAGE");
}
// Overvoltage
else if (voltage > 4.2) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
tone(BUZZER, 2000);
Serial.println("ALERT: OVER VOLTAGE");
}
// Normal Condition
else {
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
noTone(BUZZER);
Serial.println("Battery Status: NORMAL");
}
Serial.println("---------------------");
delay(1000);
}