#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define inNastavTepChladic A0
#define inNastavTepOdpad A2
#define inNastavHystereze A1
int outLed12_otevrenAut = 12;
int outLed10_zavrenAut = 10;
int outLed11_ventilVyp = 11;
int outLed5_otevrenMan = 5;
int outLed3_zavrenMan = 3;
int outLed4_provoz = 4;
int outVentil8 = 8;
int inPrepinac6 = 6;
int inPrepinac7 = 7;
const int inTeplomer9 = 9;
float chladicTepDalas;
float odpadTepDalas;
float tepChladicVal = 0;
float tepChladicTep;
float tepOdpadVal = 0;
float tepOdpadTep;
float tepHysterezeVal = 0;
float tepHystereze;
int bojlerTep;
int rozdilTeploty = 0;
int rozdilTeplotyVent = 0;
int zapnutiVal = 0;
int vypnutiVal = 0;
int zapnutiHod = 0;
int vypnutiHod = 0;
int zapnutiHodVent = 10;
boolean prepinacAuto = false;
boolean prepinacManualOtevreno = false;
boolean prepinacManualzavreno = false;
boolean ventilOtevren = false;
boolean cekejPoStartu = true;
//dallas
OneWire oneWireDS(inTeplomer9);
DallasTemperature senzoryDS(&oneWireDS);
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
pinMode(inPrepinac6, INPUT_PULLUP);
pinMode(inPrepinac7, INPUT_PULLUP);
pinMode(outLed12_otevrenAut, OUTPUT);
pinMode(outLed10_zavrenAut, OUTPUT);
pinMode(outLed11_ventilVyp, OUTPUT);
pinMode(outLed5_otevrenMan, OUTPUT);
pinMode(outLed3_zavrenMan, OUTPUT);
pinMode(outLed4_provoz, OUTPUT);
pinMode(outVentil8, OUTPUT);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, HIGH);
digitalWrite(outLed11_ventilVyp, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outVentil8, LOW);
// zapnutí komunikace knihovny s teplotním čidlem
senzoryDS.begin();
// initialize the LCD
//lcd.begin(); //
lcd.init(); //
lcd.backlight(); //
zobrazHodnoty();
}
void loop() {
zobrazHodnoty();
if (cekejPoStartu == true) {
Serial.print(" cekej ");
delay(5000);
cekejPoStartu = false;
}
tepChladicVal = analogRead(inNastavTepChladic);
tepOdpadVal = analogRead(inNastavTepOdpad);
tepHysterezeVal = analogRead(inNastavHystereze);
tepChladicTep = mapFloat(tepChladicVal, 0, 1023, 15, 30);
tepOdpadTep = mapFloat(tepOdpadVal, 0, 1023, 10, 30);
tepHystereze = mapFloat(tepHysterezeVal, 0, 1023, 0, 1);
///// wokwi
const float BETA = 3950;
int chladicVal2 = analogRead(A6);
int odpadVal2 = analogRead(A7);
chladicTepDalas = 1 / (log(1 / (1023. / chladicVal2 - 1)) / BETA + 1.0 / 298.15) - 253.15;
odpadTepDalas = 1 / (log(1 / (1023. / odpadVal2 - 1)) / BETA + 1.0 / 298.15) - 253.15;
//// wokwi
// načtení informací ze všech připojených čidel na daném pinu
senzoryDS.requestTemperatures();
//chladicTepDalas = senzoryDS.getTempCByIndex(0);
//odpadTepDalas = senzoryDS.getTempCByIndex(1);
int prepinac6Val = digitalRead(inPrepinac6);
int prepinac7Val = digitalRead(inPrepinac7);
Serial.print(" 6: ");
Serial.print(prepinac6Val);
Serial.print(" 7: ");
Serial.print(prepinac7Val);
Serial.print(" hys: ");
Serial.println(tepHystereze);
// vypni vse D6=1 D7=1
if (prepinac6Val == 1 && prepinac7Val == 1 ) {
prepinacManualOtevreno = false;
prepinacManualzavreno = false;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, LOW);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, HIGH);
digitalWrite(outLed11_ventilVyp, LOW);
}
// manual-otevreno D6=0 D7=1
if (prepinac6Val == 0 && prepinac7Val == 1 && prepinacManualOtevreno == false) {
prepinacManualOtevreno = true;
prepinacManualzavreno = false;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, HIGH);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, HIGH);
digitalWrite(outLed12_otevrenAut, LOW);
digitalWrite(outLed10_zavrenAut, HIGH);
digitalWrite(outLed11_ventilVyp, LOW);
}
// manual-zavreno D6=1 D7=0
if (prepinac6Val == 1 && prepinac7Val == 0 && prepinacManualzavreno == false) {
prepinacManualOtevreno = false;
prepinacManualzavreno = true;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, HIGH);
digitalWrite(outVentil8, LOW);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, LOW);
digitalWrite(outLed11_ventilVyp, LOW);
}
// automat D6=0 D7=0
if (prepinac6Val == 0 && prepinac7Val == 0 && prepinacAuto == false) {
prepinacManualOtevreno = false;
prepinacManualzavreno = false;
prepinacAuto = true;
ventilOtevren = false;
digitalWrite(outLed4_provoz, HIGH);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, LOW);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, LOW);
digitalWrite(outLed11_ventilVyp, LOW);
}
// automatika
if (prepinacAuto == true) {
if (chladicTepDalas >= tepChladicTep && ventilOtevren == false) {
ventilOtevren = true;
digitalWrite(outVentil8, HIGH);
digitalWrite(outLed12_otevrenAut, LOW);
digitalWrite(outLed10_zavrenAut, HIGH);
digitalWrite(outLed11_ventilVyp, LOW);
Serial.println("Auto - zapni");
}
// vypni, kdyz je teplota Chladice mensi nez nastavena minus hystereze
if (ventilOtevren == true && chladicTepDalas <= (tepChladicTep-tepHystereze)) {
Serial.println("Auto - VYPNI");
ventilOtevren = false;
digitalWrite(outVentil8, LOW);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, LOW);
digitalWrite(outLed11_ventilVyp, LOW);
}
if (ventilOtevren == true &&
(chladicTepDalas >= (tepChladicTep-tepHystereze) && chladicTepDalas < tepChladicTep) ) {
Serial.println("Auto - muzes vypnout");
if (odpadTepDalas > tepOdpadTep && ventilOtevren == true) {
ventilOtevren = false;
digitalWrite(outVentil8, LOW);
digitalWrite(outLed12_otevrenAut, HIGH);
digitalWrite(outLed10_zavrenAut, LOW);
digitalWrite(outLed11_ventilVyp, HIGH);
Serial.println("Auto - vypni");
}
}
}
}
float mapFloat(float value, float fromLow, float fromHigh, float toLow, float toHigh) {
return (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
}
void zobrazHodnoty() {
delay(500);
//lcd.clear();
//lcd.autoscroll();
lcd.setCursor(0, 0);
lcd.print("TC:");
lcd.setCursor(3, 0);
lcd.print(" ");
lcd.setCursor(3, 0);
lcd.print(chladicTepDalas);
lcd.setCursor(9, 0);
lcd.print("N:");
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print(tepChladicTep);
////
lcd.setCursor(0, 1);
lcd.print("TO:");
lcd.setCursor(3, 1);
lcd.print(" ");
lcd.setCursor(3, 1);
lcd.print(odpadTepDalas);
lcd.setCursor(9, 1);
lcd.print("N:");
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(tepOdpadTep);
////
}
provoz D4
Ventil D8
A-Otevren12
A-zavren10
M-zavreni3
M-otevren5
TeplChlad
TepOdpad
chladic
odpadni
Ventil vypne