// 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 interval1 = 100;
unsigned long predcas1 = 0;
const unsigned long interval = 2000;
unsigned long predcas = 0;
int ssr1 = 0;
unsigned int Ssr = 5;
float vytazovanie = 55.2;
float nasobic;
float tlup;
float tldown;
int vytazperc;
unsigned long aktualnycas;
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 * (3300.0/ 4095.0);
float voltagex = (voltage1 - 0.0) * (5000.0 - 0.0) / (3300.0 - 0.0) + 0.0;
if (voltagex < 2500.0)
voltagex = 2500.0;
float prud = (voltagex - 2500.0) / 13.24;
//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
unsigned long aktualnycas1 = millis();
if (aktualnycas1 - predcas1 >= interval1)
predcas1 = aktualnycas1;
if (ssr1 <= 0)
ssr1 = 1;
if (ssr1 >= 254)
ssr1 = 254;
if (vykon > 0 && predcas1 == aktualnycas1)
++ssr1;
if (vykon <= 0 && predcas1 == aktualnycas1)
--ssr1;
if (baterka < vytazovanie)
ssr1 = 0;
if (baterka > vytazovanie + 1.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)
predcas = aktualnycas;
if (tlup == 4095 && predcas == aktualnycas)
vytazovanie = (++nasobic * 0.1) + 55.2;
if (tldown == 4095 && predcas == aktualnycas)
vytazovanie = (--nasobic * 0.1) + 55.2;
}
lcd.setCursor(0,3);
lcd.print("Rele:");
lcd.print(ssrperc);
lcd.print("% ");
lcd.setCursor(0,2);
lcd.print("Vykon:");
lcd.print(predcas);
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(voltagex);
Serial.println("V");
Serial.print("Prud : ");
Serial.print(prud);
Serial.println("A");
*/
}