#include <LiquidCrystal.h>
#define prescaler 19.5
#define offset 512.0 // bpenentuan nilai 0 ampere di ACS
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
int progress = 0;
#include <LiquidCrystal.h>
#define prescaler 19.5
#define offset 510.0 // bpenentuan nilai 0 ampere di ACS
const int relay1 = 3; //pin3
const int relay2 = 2; //pin2
int relayON = LOW; //relay nyala
int relayOFF = HIGH; //relay mati
int button1 = 4;
int button2 = 8;
const int analogIn = A1;//Pin ACS
int mVperAmp = 185;
float Vraw = 0.0;
float Iraw = 0.0;
float Vacs = 0;
float Vsamp = 0.0;
float Isamp = 0.0;
float Vaverage = 0.0;
float Iaverage = 0.0;
float Vin = 0.0;
float Iin = 0.0;
double Voltage = 0;
double Amps = 0;
int analogInput = A0;//Pin sensor tegangan
int value = 0;
float soc1 = 100;
float soc2 = 60;
float soc_batt;
void setup() {
Serial.begin(9600);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
digitalWrite(relay1, relayOFF);
digitalWrite(relay2, relayOFF);
pinMode(analogInput, INPUT);
pinMode(analogIn, INPUT);
delay (2000);
}
void loop() {
//digitalWrite(relay1, relayON);
//digitalWrite(relay2, relayOFF);
//delay(10000);
/* Vsamp = 0;
Isamp = 0;
for (int x = 0; x < 1000; x++)
{
Vraw = analogRead(analogInput);
Iraw = analogRead(analogIn);
Vsamp = Vsamp + Vraw;
Isamp = Isamp + Iraw;
}
Vaverage = Vsamp / 1000;
Iaverage = Isamp / 1000;
Vin = ((Vaverage * 5.0) / 1024.0) / 0.2;
//Vacs = ( Iaverage / 1024.0)* 5000;
//Iin = (( Vacs - offset)/mVperAmp);
Iin = (( Iaverage * (5.0 / 1024.0)) - offset * 5.0 / 1024.0) / (185.0 / 1024.0);
{*/
Serial.print("pengisian");
digitalWrite(relay1, relayON);
digitalWrite(relay2, relayOFF);
Vsamp = 0;
Isamp = 0;
for (int x = 0; x < 1000; x++)
{
Vraw = analogRead(analogInput);
Iraw = analogRead(analogIn);
Vsamp = Vsamp + Vraw;
Isamp = Isamp + Iraw;
}
Vaverage = Vsamp / 1000;
Iaverage = Isamp / 1000;
Vin = ((Vaverage * 5.0) / 1024.0) / 0.2;
//Vacs = ( Iaverage / 1024.0)* 5000;
//Iin = (( Vacs - offset)/mVperAmp);
Iin = (( Iaverage * (5.0 / 1024.0)) - offset * 5.0 / 1024.0) / (185.0 / 1024.0);
//Vpengukuran = Vin * 0,6;
//value = Vin/(Res2/Res1+Res2);
// //Perhitungan Nilai SOC
soc1 = soc1 - ((abs (Iin)) * 100 / (1.5 * 3600));
soc_batt = soc1 - ((abs (Iin)) * 100) / (1.5 * 3600);
Serial.print("V = ");
Serial.print(Vin, 3);
Serial.print("\t");
Serial.print("I = ");
Serial.print(abs (Iin) * 0.1, 3);
Serial.print("\t");
Serial.print("SOC = ");
Serial.print(soc_batt, 3);
Serial.println("%");
delay(10000);
/*else if (Vin < 5.0){
digitalWrite(relay1, relayOFF);
digitalWrite(relay2, relayON);
}
Serial.print("V = ");
Serial.print(Vin, 3);
Serial.print("\t");
Serial.print("I = ");
Serial.print(abs (Iin) * 0.1, 3);
Serial.print("\t");
Serial.print("SOC = ");
Serial.print(soc_batt, 3);
Serial.println("%");
delay(10000);*/
u8g.firstPage();
do {
u8g.drawStr(0, 10, "Tegangan :");
u8g.setPrintPos(70, 10);
u8g.print(Vin, 3);
u8g.print(" V");
u8g.drawStr(0, 25, "Arus :");
u8g.setPrintPos(70, 25);
u8g.print(Iin, 3);
u8g.print(" A");
u8g.drawFrame(0, 35, 55, 10);
u8g.drawBox(2.5, 38, progress, 5);
u8g.drawBox(55, 38, 3, 5);
u8g.setPrintPos(70, 45);
u8g.print(soc_batt, 3);
u8g.print("%");
u8g.drawStr(0, 62, "-------------------");
} while ( u8g.nextPage() );
delay(1000);
if (progress < 55) {
progress = soc_batt/2;
} else {
progress = 0;
}
}