//BATTERY MANAGEMENT SYSTEM_ARDUINO UNO
//MONITORING TEGANGAN, ESTIMASI SOC, GRAFIK
#include <Wire.h>;
#include <OneWire.h>;
#include <LiquidCrystal_I2C.h> // Memanggil library LCD I2C
LiquidCrystal_I2C lcd (0x27,16,2); // Mengatur LCD 16x2
#include<LcdBarGraphRobojax.h>; // Memanggil library LCD Bar Grafik
LcdBarGraphRobojax lbg(&lcd,16,0,0);// Mengatur LCD Bar Grafik Pada Baris ke 1,
Kolom Ke 1-16
#define soc_max 100 // Nilai maksimal SOC = 100%
#define analogPin_1 A1 // Pin S modul sensor tegangan 1 dihubungkan pada pin A1
arduino
#define analogPin_2 A2 // Pin S modul sensor tegangan 2 dihubungkan pada pin A2
arduino
#define analogPin_3 A3 // Pin S modul sensor tegangan 3 dihubungkan pada pin A3
arduino
#define analogPin_4 A4 // Pin S modul sensor tegangan 4 dihubungkan pada pin A4
arduino
#define analogPin_5 A5 // Pin S modul sensor tegangan 5 dihubungkan pada pin A5
arduino
int relay = 3; // Pin Input relay dihubungkan pada pin 3 arduino
float R1 = 20000.0; // Tahanan Resistor 1 = 20.000 ohm
float R2 = 1500.0; // Tahanan Resistor 2 = 1575 ohm
float Vmodul1 = 0.0;
float Vmodul2 = 0.0;
float Vmodul3 = 0.0;
float Vmodul4 = 0.0;
float Vmodul5 = 0.0;
float hasil1 = 0.0;
float hasil2 = 0.0;
float hasil3 = 0.0;
float hasil4 = 0.0;
float hasil5 = 0.0;
float vtot = 0.0;
int soc = 0;
int value1 = 0;
int value2 = 0;
int value3 = 0;
int value4 = 0;
int value5 = 0;
void setup()
{
[Link](9600);
[Link] (">> WELCOME TO <<"); // Menampilkan Kata "WELCOME TO" pada saat
awal bekerja
[Link] (" MONBAT PROJECT "); // Menampilkan Kata "MONBAT PROJECT" pada
saat awal bekerja
pinMode(analogPin_1, INPUT); // Pin S pada sensor 1 digunakan sebagai
input
pinMode(analogPin_2, INPUT); // Pin S pada sensor 2 digunakan sebagai
input
pinMode(analogPin_3, INPUT); // Pin S pada sensor 3 digunakan sebagai
input
pinMode(analogPin_4, INPUT); // Pin S pada sensor 4 digunakan sebagai
input
pinMode(analogPin_5, INPUT); // Pin S pada sensor 5 digunakan sebagai
input
pinMode(relay, OUTPUT);
[Link](); // Inisialisasi LCD 16x2 I2C
[Link](); // Mengatur backlight LCD
[Link](); // Membersihkan LCD pada saat awal bekerja
}
void loop()
{
//SENSOR 5
value5 = analogRead(analogPin_5);
Vmodul5 = ((value5 * 5.0) / 1024.0);
hasil5 = (Vmodul5 / (R2/(R1+R2)));
//SENSOR 4
value4 = analogRead(analogPin_4);
Vmodul4 = (((value4 * 5.0) / 1024.0))-Vmodul5;
hasil4 = (Vmodul4 / (R2/(R1+R2)));
//SENSOR 3
value3 = analogRead(analogPin_3);
Vmodul3 = (((value3 * 5.0) / 1024.0))-Vmodul5-Vmodul4;
hasil3 = (Vmodul3 / (R2/(R1+R2)));
//SENSOR 2
value2 = analogRead(analogPin_2);
Vmodul2 = (((value2 * 5.0) / 1024.0))-Vmodul5-Vmodul4-Vmodul3;
hasil2 = (Vmodul2 / (R2/(R1+R2)));
//SENSOR 1
value1 = analogRead(analogPin_1);
Vmodul1 = (((value1 * 5.0) / 1024.0))-Vmodul5-Vmodul4-Vmodul3-Vmodul2;
hasil1 = (Vmodul1 / (R2/(R1+R2)));
//TEGANGAN TOTAL&SOC
vtot = hasil1+hasil2+hasil3+hasil4+hasil5; // Jumlah dari tegangan baterai 1-5
yang dirangkai seri
soc = (((vtot-59)/6.9)*100); // Rumus didapatkan dari batas bawah tegangan 59
Volt dan batas atas 65,9 Volt
if (soc >= 100){
digitalWrite(relay,LOW); // Saat SOC >= 100% relay LOW (OFF)
[Link]("Relay : OFF");
}else{
digitalWrite(relay,HIGH); // Saat SOC < 100% relay HIGH (ON)
[Link]("Relay : ON");
}
//SERIAL MONITOR
[Link]("Tegangan 1 = "); // Menampilkan Tegangan Baterai 1
[Link](hasil1,2);
[Link](" Volt");
[Link]("Tegangan 2 = "); // Menampilkan Tegangan Baterai 2
[Link](hasil2,2);
[Link](" Volt");
[Link]("Tegangan 3 = "); // Menampilkan Tegangan Baterai 3
[Link](hasil3,2);
[Link](" Volt");
[Link]("Tegangan 4 = "); // Menampilkan Tegangan Baterai 4
[Link](hasil4,2);
[Link](" Volt");
[Link]("Tegangan 5 = "); // Menampilkan Tegangan Baterai 5
[Link](hasil5,2);
[Link](" Volt");
[Link]("Vtot = "); // Menampilkan Tegangan Total
[Link](vtot);
[Link](" V");
[Link]("SOC = "); // Menampilkan SOC
[Link](soc);
[Link](" %");
{if (soc >= 0){
[Link](1);
[Link](soc,soc_max); // Menampilkan Bar Grafik SOC
[Link](3,1);
[Link](soc); // Menampilkan Nilai SOC
[Link]("%");
[Link](8,1);
[Link](vtot); // Menampilkan Tegangan Total
[Link]("V");
}
else{
[Link](3,0);
[Link]("PLEASE WAIT");
[Link](3,1);
[Link]("...........");
}
}
delay(1200);
}