Close

Odpověď na: Řídící jednotka pro peletový kotel

Úvodní stránka Fórum Vaše projekty Arduino Řídící jednotka pro peletový kotel Odpověď na: Řídící jednotka pro peletový kotel

#6347
johnyhol
Účastník

Tak si myslím, že jsem se právě dostal do tý slepý uličky a nevím jak ven. Momentálně to prakticky funguje jak bych chtěl, až na to, že když doběhne celý proces (rozpojím kotlový termostat, vypne dávkování, počká 84s a vypne ventilátor) tak když chci zapnout nový (zapnu kotlový termostat) tak to už nic nedělá. Ještě je problém, že na začátku by to po 12s mělo vypnout dávkování pelet, ale to běží pořád, dokud nesimuluju plamen. Pak to přestane dávkovat, vypne to správně spirálu a začne dávkování v nastaveným intervalu (1s/1s). Taky jsem řešil to zpoždění u žhavení a zatím jsem to udělal přes funkci millis, ale to bude do budoucna taky špatně, protože to funguje jenom po startu/resetu a já budu muset mít Arduino asi pořád zapnutý.

Tady je zatím poslední pokus:

#define davkovaniPelet 6 //dávkování pelet – šnek
#define spirala 5 //zapalovací spirála
#define ventilator 3 //ventilátor
#define alarm 10 //signalizace poruchy
#define prostorovyTermostat 12 //prostorový termostat
#define kotlovyTermostat 2 //kotlový termostat
#define fotobunka 8 //fotobuňka pro kontrolu plamene
long cas=13000;

void setup() {
pinMode(davkovaniPelet, OUTPUT);
pinMode(spirala, OUTPUT);
pinMode(ventilator, OUTPUT);
pinMode(alarm, OUTPUT);
pinMode(prostorovyTermostat, INPUT);
pinMode(kotlovyTermostat, INPUT);
pinMode(fotobunka, INPUT);
}

void loop() {
if(digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ //pokud je prostorový+kotlový termostat zapnutý
digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
delay(12000); //po dobu 12s
digitalWrite(davkovaniPelet, LOW); //potom vypni dávkování
digitalWrite(ventilator, HIGH); //zapni ventilátor
digitalWrite(spirala, HIGH); //zapni žhavení
}
if(millis() >= cas+60000){ //délka žhavení 60s po uplynutí 13s od spuštění/resetu
cas = millis();
digitalWrite(spirala, LOW); //po vypršení času vypni žhavení(pokud už není vypnuté)
}
if(digitalRead(fotobunka) == HIGH){ //pokud fotobuňka vidí plamen
digitalWrite(spirala, LOW); //vypni žhavení
delay(5000); //čekej 5s
}
while(digitalRead(fotobunka) == HIGH && digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ //dokud fotobuňka vidí plamen+prostorový+kotlový termostat jsou zapnuté
digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
delay(1000); //počkej 1s
digitalWrite(davkovaniPelet, LOW); //vypni dávkování
delay(1000); //počkej 1s
}
if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ //pokud vypne prostorový nebo kotlový termostat
digitalWrite(davkovaniPelet, LOW); //vypni dávkování pelet
delay(84000); //počkej 84s
digitalWrite(ventilator, LOW); //potom vypni ventilátor
}
}