// 200A CT je 1A : 2v/200=0.01324 V
// logic shifter : 0.01324 prevedie 0.00876821192052980132450331125828v
// Esp32 - 4095bit 3.3v
// LCD - SCL pin 22 ......SDA pin 21
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
const unsigned long interval = 100;
unsigned long predcas = 0;
int ssr1 = 0;
unsigned int Ssr = 5;
float vytazovanie = 55.2;
float nasobic;
float tlup;
float tldown;
int vytazperc;
void setup() {
lcd.init();
lcd.clear();
lcd.backlight();
pinMode(Ssr, OUTPUT);
Serial.begin(115200);
}
void loop() {
// vypocet prudovej sondy 200A
float sensor1 = analogRead(34);
float voltage1 = sensor1 * (3.3 / 4095.0);
if (voltage1 < 1.65)
voltage1 = 1.65;
float prud = (voltage1 - 1.65) / 0.00876821192052980132450331125828;
//vypocet napatia baterie
float sensor2 = analogRead(35);
float voltage2 = (sensor2 * 3.3) / 4095.0;
float baterka = voltage2 / (2200.0 / (47000.0 + 2200.0));
int baterkaperc = (baterka - 44.4) * (100 - 0) / (57.8 - 44.4) + 0;
//vypocet vykonu baterie
unsigned int vykon = baterka * prud;
if (baterka < vytazovanie)
vykon = 0;
// nastavenie percent vytazovania - (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
int vytazperc = (vytazovanie - 44.4) * (100 - 0) / (57.8 - 44.4) + 0;
int ssrperc = (ssr1 - 0) * (100 - 0) / (255 - 0) + 0;
//SSR 0-5V
if (ssr1 <= 0)
ssr1 = 1;
if (ssr1 >= 254)
ssr1 = 254;
if (vykon > 0)
++ssr1;
if (vykon <= 0)
--ssr1;
if (baterka < vytazovanie)
ssr1 = 0;
if (baterka > vytazovanie + 0.5)
ssr1 = 255;
analogWrite(Ssr, ssr1);
// nastavenie vytazovania baterie
float tlup = analogRead(32);
float tldown = analogRead(33);
unsigned long aktualnycas = millis();
if (aktualnycas - predcas >= interval)
{
if (tlup == 4095)
vytazovanie = (++nasobic * 0.1) + 54.0;
if (tldown == 4095)
vytazovanie = (--nasobic * 0.1) + 54.0;
predcas = aktualnycas;
}
lcd.setCursor(0,3);
lcd.print("Rele:");
lcd.print(ssrperc);
lcd.print("% ");
lcd.setCursor(0,2);
lcd.print("Vykon:");
lcd.print(vykon);
lcd.print("W ");
lcd.setCursor(0,0);
lcd.print("Vytazovak:");
lcd.print(vytazperc);
lcd.print("% ");
lcd.setCursor(0,1);
lcd.print("Baterka:");
lcd.print(baterkaperc);
lcd.print("% ");
Serial.print("Vytazovanie : ");
Serial.print(vytazperc);
Serial.println("%");
Serial.print("vytazovanie : ");
Serial.print(vytazovanie);
Serial.println("V");
Serial.print("Ssr : ");
Serial.print(ssr1);
Serial.println(".");
Serial.print("Vykon : ");
Serial.print(vykon);
Serial.println("W");
Serial.print("Baterka : ");
Serial.print(baterka);
Serial.println("V");
Serial.print("Baterka : ");
Serial.print(baterkaperc);
Serial.println("%");
Serial.print("Voltage1 : ");
Serial.print(voltage1);
Serial.println("V");
Serial.print("Prud : ");
Serial.print(prud);
Serial.println("A");
}