johnyhol
Vytvořené odpovědi
-
AutorPříspěvky
-
johnyholÚčastník
Omluvám se, špatně jsem zkopíroval kód…
Druhý pokus:// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 14_5_2016 // changelog // v 5_11_2016 // zmena casu - upraveno pro realny provoz // v 4_11_2016 // zmena vsech vystupu na rele // v 14_5_2016 // precislovani pinu // zmena funkce fotobunky z digitalu na analog // dolpneni seriove komunikace o hodnotu fotobunky // v 30_3_2016 // oprava funkce tlacitka kvitace poruchy -> HIGH->LOW // umazani parametru "long cas=13000;" -> jiz neni potreba // umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba // umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba // umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni // drobne upravy textu/popisu jednotlivych parametru/funkci // v 27_3_2016 // uprava procesu zapalovani - nebude reagovat na prostorovy termostat // uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s // nastaveni definice poruch pro pozdejsi vyuziti // v22_3_2016 // uprava ladicich textu pro termostaty // v21_3_2016 // presunuti testuPlamene pouze do smycky udrzuj horeni // doplneni textu do testu horeni // oprava textu zprav // zruseni diakritiky // zapnuti alarmu pri vyskytu poruchy // v20_3_2016 // slouceni podminenych funkci // vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podminky smycek (zruseno =) // posun zpozdeni 5s z procesu zapaleni na jeho konec // doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle // nastaveni poruchy a jeji kvitance tlacitkem na pinu 9 // definice poruch // bit funkce // 0 prehrati kotle pri zapalovani // 1 ztrata plamene pri horeni // 2 volne // 3 volne // 4 volne // 5 volne // 6 volne // 7 volne // knihovna watchdogu #include <avr/wdt.h> #define davkovaniPelet 2 //davkovani pelet snek #define spirala 3 //zapalovaci spirala #define ventilator 5 //ventilator #define alarm 6 //signalizace poruchy #define prostorovyTermostat 7 //prostorovy termostat #define kotlovyTermostat 8 //kotlovy termostat #define fotobunka 15 //fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s int smycka2 = 0; // pomocna smycka - udrzeni horeni int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni int smycka3max = 2; // max.pomocne smycky int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet int smycka4max = 110; // max.pomocne smycky int smycka5 = 0; // pomocna smycka - rozhoreni int smycka5max = 50; // max.pomocne smycky int smycka6 = 0; // pomocna smycka - dohoreni int smycka6max = 840; // max.pomocne smycky byte porucha = 0; // promenna pro zaznam poruchy int ldr = 1; //analogovy pin kde je pripojen fotorezistor int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(prostorovyTermostat, INPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); // nastav watchdog na 8s wdt_enable(WDTO_8S); } void loop() { wdt_reset(); // resetuj watchdog ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0 if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty Serial.println("Prostorovy termostat zapnut"); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } } else { Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //vypni davkovani digitalWrite(spirala, HIGH); //vypni zhaveni digitalWrite(ventilator, HIGH); //vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani digitalWrite(ventilator, LOW); //zapni ventilator digitalWrite(spirala, LOW); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 3 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.print(smycka3max); // ladici seriova komunikace Serial.print(" stav: "); // ladici seriova komunikace Serial.print(smycka1); // ladici seriova komunikace Serial.print("s/"); // ladici seriova komunikace Serial.print(smycka1max); // ladici seriova komunikace Serial.println("s "); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace bitSet(porucha,0); // nastav poruchu bit c.0 na "1" } if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ // prostorovy + kotlovy termostat je zapnuty if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //davkuj pelety delay(8000); //pockej 8s digitalWrite(davkovaniPelet, HIGH); //vypni davkovani delay(10000); //pockej 10s } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(analogRead(fotobunka) >= 500){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, LOW); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(ventilator, HIGH); //vypni ventilator } void kvitancePoruchy() { // funkce kvitance poruchy if(porucha > 0 ){ // kdyz je porucha aktivni Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, LOW); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm } }
johnyholÚčastníkAhoj kluci, tak jsem se do toho opět po půl roce pustil a chtěl bych to zkusit spustit naostro, tedy přímo v kotli. Udělal jsem tedy úpravy časů (prodloužil jsem je na reálný hodnoty) a výstupů (změnil jsem je na relé). Skoro všechno funguje, jenom se mi nedaří nastavit čas dávkování pelet. Pro testování bylo nastaveno 1s sypání pelet (dávkování) a 1s stání(hoření). Dávkování se mi podařilo změnit na 8s, ale po změně stání z 1s na 10s se to chová nějak chaoticky. Dávkuje to správně 8s a pak to jenom procvakne relé a vyskočí alarm. Můžete na to prosím kouknout kde je chyba?
Tady je kód:<pre> <font color="#434f54">// REGULACE PELETKOVEHO KOTLE</font> <font color="#434f54">// author. Johnyhol & by JP</font> <font color="#434f54">// v 14_5_2016</font> <font color="#434f54">// changelog</font> <font color="#434f54">// v 4_11_2016</font> <font color="#434f54">// zmena vsech vystupu na rele</font> <font color="#434f54">// v 14_5_2016</font> <font color="#434f54">// precislovani pinu</font> <font color="#434f54">// zmena funkce fotobunky z digitalu na analog</font> <font color="#434f54">// dolpneni seriove komunikace o hodnotu fotobunky </font> <font color="#434f54">// v 30_3_2016</font> <font color="#434f54">// oprava funkce tlacitka kvitace poruchy -> HIGH->LOW</font> <font color="#434f54">// umazani parametru "long cas=13000;" -> jiz neni potreba</font> <font color="#434f54">// umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba</font> <font color="#434f54">// umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba</font> <font color="#434f54">// umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni</font> <font color="#434f54">// drobne upravy textu/popisu jednotlivych parametru/funkci</font> <font color="#434f54">// v 27_3_2016</font> <font color="#434f54">// uprava procesu zapalovani - nebude reagovat na prostorovy termostat</font> <font color="#434f54">// uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s</font> <font color="#434f54">// nastaveni definice poruch pro pozdejsi vyuziti</font> <font color="#434f54">// v22_3_2016</font> <font color="#434f54">// uprava ladicich textu pro termostaty</font> <font color="#434f54">// v21_3_2016</font> <font color="#434f54">// presunuti testuPlamene pouze do smycky udrzuj horeni</font> <font color="#434f54">// doplneni textu do testu horeni</font> <font color="#434f54">// oprava textu zprav</font> <font color="#434f54">// zruseni diakritiky</font> <font color="#434f54">// zapnuti alarmu pri vyskytu poruchy</font> <font color="#434f54">// v20_3_2016</font> <font color="#434f54">// slouceni podminenych funkci </font> <font color="#434f54">// vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy)</font> <font color="#434f54">// rozdeleni funkci do vlastnich funkcnich bloku</font> <font color="#434f54">// zapojeni seriove komunikace pro odladeni funkci </font> <font color="#434f54">// v16_3_2016</font> <font color="#434f54">// uprava podminky smycek (zruseno =)</font> <font color="#434f54">// posun zpozdeni 5s z procesu zapaleni na jeho konec</font> <font color="#434f54">// doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni</font> <font color="#434f54">// upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle</font> <font color="#434f54">// nastaveni poruchy a jeji kvitance tlacitkem na pinu 9</font> <font color="#434f54">// definice poruch</font> <font color="#434f54">// bit funkce</font> <font color="#434f54">// 0 prehrati kotle pri zapalovani</font> <font color="#434f54">// 1 ztrata plamene pri horeni</font> <font color="#434f54">// 2 volne</font> <font color="#434f54">// 3 volne</font> <font color="#434f54">// 4 volne</font> <font color="#434f54">// 5 volne</font> <font color="#434f54">// 6 volne</font> <font color="#434f54">// 7 volne</font> <font color="#434f54">// knihovna watchdogu</font> <font color="#5e6d03">#include</font> <font color="#434f54"><</font><font color="#000000">avr</font><font color="#434f54">/</font><font color="#000000">wdt</font><font color="#434f54">.</font><font color="#000000">h</font><font color="#434f54">></font> <font color="#5e6d03">#define</font> <font color="#000000">davkovaniPelet</font> <font color="#000000">2</font> <font color="#434f54">//davkovani pelet snek</font> <font color="#5e6d03">#define</font> <font color="#000000">spirala</font> <font color="#000000">3</font> <font color="#434f54">//zapalovaci spirala</font> <font color="#5e6d03">#define</font> <font color="#000000">ventilator</font> <font color="#000000">5</font> <font color="#434f54">//ventilator</font> <font color="#5e6d03">#define</font> <font color="#000000">alarm</font> <font color="#000000">6</font> <font color="#434f54">//signalizace poruchy</font> <font color="#5e6d03">#define</font> <font color="#000000">prostorovyTermostat</font> <font color="#000000">7</font> <font color="#434f54">//prostorovy termostat</font> <font color="#5e6d03">#define</font> <font color="#000000">kotlovyTermostat</font> <font color="#000000">8</font> <font color="#434f54">//kotlovy termostat</font> <font color="#5e6d03">#define</font> <font color="#000000">fotobunka</font> <font color="#000000">15</font> <font color="#434f54">//fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO</font> <font color="#5e6d03">#define</font> <font color="#000000">trimr1</font> <font color="#000000">14</font> <font color="#434f54">// nastaveni doby zapaleni DI14 = A0 pro arduino UNO</font> <font color="#5e6d03">#define</font> <font color="#000000">tlacitkoKvitance</font> <font color="#000000">9</font> <font color="#434f54">// pin tlacitka kvitance poruchy</font> <font color="#00979c">int</font> <font color="#000000">smycka1</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - zapaleni</font> <font color="#00979c">int</font> <font color="#000000">smycka1max</font> <font color="#434f54">=</font> <font color="#000000">600</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s</font> <font color="#00979c">int</font> <font color="#000000">smycka2</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - udrzeni horeni</font> <font color="#00979c">int</font> <font color="#000000">smycka2max</font> <font color="#434f54">=</font> <font color="#000000">2</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky</font> <font color="#00979c">int</font> <font color="#000000">smycka3</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - pocet pokusu o zapaleni</font> <font color="#00979c">int</font> <font color="#000000">smycka3max</font> <font color="#434f54">=</font> <font color="#000000">2</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky</font> <font color="#00979c">int</font> <font color="#000000">smycka4</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - davkovani zapalne davky pelet</font> <font color="#00979c">int</font> <font color="#000000">smycka4max</font> <font color="#434f54">=</font> <font color="#000000">110</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky</font> <font color="#00979c">int</font> <font color="#000000">smycka5</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - rozhoreni</font> <font color="#00979c">int</font> <font color="#000000">smycka5max</font> <font color="#434f54">=</font> <font color="#000000">50</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky</font> <font color="#00979c">int</font> <font color="#000000">smycka6</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// pomocna smycka - dohoreni</font> <font color="#00979c">int</font> <font color="#000000">smycka6max</font> <font color="#434f54">=</font> <font color="#000000">840</font><font color="#000000">;</font> <font color="#434f54">// max.pomocne smycky</font> <font color="#00979c">byte</font> <font color="#000000">porucha</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// promenna pro zaznam poruchy</font> <font color="#00979c">int</font> <font color="#000000">ldr</font> <font color="#434f54">=</font> <font color="#000000">1</font><font color="#000000">;</font> <font color="#434f54">//analogovy pin kde je pripojen fotorezistor</font> <font color="#00979c">int</font> <font color="#000000">ldr_value</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">//promenna pro zaznam hodnot z fotorezistoru</font> <font color="#00979c">void</font> <font color="#5e6d03">setup</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// nastav seriovou komunikaci na rychlost 9600 bd </font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">begin</font><font color="#000000">(</font><font color="#000000">9600</font><font color="#000000">)</font><font color="#000000">;</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Nastavuji vstupy/vystupy"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">OUTPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">OUTPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">ventilator</font><font color="#434f54">,</font> <font color="#00979c">OUTPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">alarm</font><font color="#434f54">,</font> <font color="#00979c">OUTPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">prostorovyTermostat</font><font color="#434f54">,</font> <font color="#00979c">INPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">kotlovyTermostat</font><font color="#434f54">,</font> <font color="#00979c">INPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">fotobunka</font><font color="#434f54">,</font> <font color="#00979c">INPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">trimr1</font><font color="#434f54">,</font> <font color="#00979c">INPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#d35400">pinMode</font><font color="#000000">(</font><font color="#000000">tlacitkoKvitance</font><font color="#434f54">,</font> <font color="#00979c">INPUT</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// vsechno vypni</font> <font color="#000000">vypniVse</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// nastav watchdog na 8s</font> <font color="#000000">wdt_enable</font><font color="#000000">(</font><font color="#000000">WDTO_8S</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#5e6d03">loop</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">ldr_value</font> <font color="#434f54">=</font> <font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">ldr</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//čte hodnoty LDR</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">"HODNOTA FOTOBUNKY = "</font><font color="#000000">)</font><font color="#000000">;</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#000000">ldr_value</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//zobrazí hodnoty LDR na seriove lince</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Cekam na sepnuti termostatu ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#000000">smycka1max</font> <font color="#434f54">=</font> <font color="#d35400">map</font><font color="#000000">(</font><font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">trimr1</font><font color="#000000">)</font><font color="#434f54">,</font> <font color="#000000">0</font><font color="#434f54">,</font> <font color="#000000">1024</font><font color="#434f54">,</font> <font color="#000000">60</font><font color="#434f54">,</font> <font color="#000000">600</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// nastaveni doby zapaleni trimrem na A0</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">prostorovyTermostat</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// prostorovy termostat je zapnuty</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Prostorovy termostat zapnut"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">kotlovyTermostat</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// kotlovy termostat je zapnuty</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Kotlovy termostat zapnut"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#434f54">// startovaci davka pelet</font> <font color="#434f54">//------------------------</font> <font color="#000000">zapalovaciDavkaPelet</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// proces zapaleni</font> <font color="#434f54">//----------------</font> <font color="#000000">zapaleni</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// test poruchy</font> <font color="#434f54">// -----------------</font> <font color="#434f54">//testPlamene(); </font> <font color="#434f54">// udrzeni horeni</font> <font color="#434f54">//--------------</font> <font color="#000000">udrzujHoreni</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// dohoreni</font> <font color="#434f54">//---------</font> <font color="#000000">dohoreni</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#5e6d03">else</font> <font color="#000000">{</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Prostorovy termostat vypnut"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#000000">}</font> <font color="#434f54">// kvitence pripadne poruchy</font> <font color="#434f54">//-------------------------------</font> <font color="#000000">kvitancePoruchy</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">vypniVse</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// funkce vypni vse</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Vypinam vsechny rele ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni davkovani</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni zhaveni</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">ventilator</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni ventilator</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">zapalovaciDavkaPelet</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// prvotni davkovani pelet pro zapaleni</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Davkuji pelety pro zapaleni ... 110s"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//davkuj pelety</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka4</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka4</font> <font color="#434f54"><</font> <font color="#000000">smycka4max</font><font color="#000000">;</font> <font color="#000000">smycka4</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">1000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">}</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//potom vypni davkovani</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">ventilator</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//zapni ventilator</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//zapni zhaveni</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">zapaleni</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// funkce zapaleni pelet</font> <font color="#434f54">// 3 pokusy o zapaleni</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Spoustim zapaleni ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka3</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka3</font> <font color="#434f54"><</font> <font color="#000000">smycka3max</font><font color="#000000">;</font> <font color="#000000">smycka3</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// smycka "1-10" minut zapalovani</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka1</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka1</font> <font color="#434f54"><</font> <font color="#000000">smycka1max</font><font color="#000000">;</font> <font color="#000000">smycka1</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">"Pokus "</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#000000">smycka3</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">"/"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#000000">smycka3max</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">" stav: "</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#000000">smycka1</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">"s/"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#000000">smycka1max</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"s "</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">kotlovyTermostat</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// kotlovy termostat vypne</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni zhaveni</font> <font color="#000000">smycka1</font> <font color="#434f54">=</font> <font color="#000000">smycka1max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku1</font> <font color="#000000">smycka3</font> <font color="#434f54">=</font> <font color="#000000">smycka3max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku3</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Rozepnuti termostatu ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">bitSet</font><font color="#000000">(</font><font color="#000000">porucha</font><font color="#434f54">,</font><font color="#000000">0</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// nastav poruchu bit c.0 na "1"</font> <font color="#000000">}</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">fotobunka</font><font color="#000000">)</font> <font color="#434f54"><=</font> <font color="#000000">500</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">//pokud fotobunka vidi plamen</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni zhaveni</font> <font color="#000000">smycka1</font> <font color="#434f54">=</font> <font color="#000000">smycka1max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku1</font> <font color="#000000">smycka3</font> <font color="#434f54">=</font> <font color="#000000">smycka3max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku3 </font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">" hori ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace </font> <font color="#000000">}</font> <font color="#5e6d03">else</font> <font color="#000000">{</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">" nehori ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace </font> <font color="#000000">}</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">1000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">}</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka5</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka5</font> <font color="#434f54"><</font> <font color="#000000">smycka5max</font><font color="#000000">;</font> <font color="#000000">smycka5</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">1000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">}</font> <font color="#434f54">//delay(5000); //cekej 5s</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">udrzujHoreni</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// funkce udrzeni horeni</font> <font color="#000000">ldr_value</font> <font color="#434f54">=</font> <font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">ldr</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//čte hodnoty LDR</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">print</font><font color="#000000">(</font><font color="#005c5f">"HODNOTA FOTOBUNKY = "</font><font color="#000000">)</font><font color="#000000">;</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#000000">ldr_value</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//zobrazí hodnoty LDR na seriove lince</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Udrzeni horeni ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka2</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka2</font> <font color="#434f54"><</font> <font color="#000000">smycka2max</font><font color="#000000">;</font> <font color="#000000">smycka2</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">smycka2</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// vynuluj smycku</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">prostorovyTermostat</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">HIGH</font> <font color="#434f54">&&</font> <font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">kotlovyTermostat</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// prostorovy + kotlovy termostat je zapnuty</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">fotobunka</font><font color="#000000">)</font> <font color="#434f54"><=</font> <font color="#000000">500</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">//pokud fotobunka vidi plamen</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Test plamene ... hori"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//davkuj pelety</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">8000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//pockej 8s</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni davkovani</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">10000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//pockej 10s</font> <font color="#000000">}</font> <font color="#5e6d03">else</font> <font color="#000000">{</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">1000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// pocekej jeste 1s a zkus to znovu</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#d35400">analogRead</font><font color="#000000">(</font><font color="#000000">fotobunka</font><font color="#000000">)</font> <font color="#434f54">>=</font> <font color="#000000">500</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">//pokud fotobunka nevidi plamen</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Test plamene ... porucha"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#000000">smycka2</font> <font color="#434f54">=</font> <font color="#000000">smycka2max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku</font> <font color="#434f54">//porucha = 1; // nastav poruchu</font> <font color="#d35400">bitSet</font><font color="#000000">(</font><font color="#000000">porucha</font><font color="#434f54">,</font><font color="#000000">1</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// nastav poruchu bit c.1 na "1"</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">alarm</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// zapni alarm</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#5e6d03">else</font> <font color="#000000">{</font> <font color="#000000">smycka2</font> <font color="#434f54">=</font> <font color="#000000">smycka2max</font><font color="#000000">;</font> <font color="#434f54">// ukonci smycku</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">dohoreni</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// funkce dohoreni</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Dohoreni ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">davkovaniPelet</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni davkovani pelet</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">spirala</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni zhaveni - pro jistotu</font> <font color="#5e6d03">for</font> <font color="#000000">(</font><font color="#000000">smycka6</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#000000">smycka6</font> <font color="#434f54"><</font> <font color="#000000">smycka6max</font><font color="#000000">;</font> <font color="#000000">smycka6</font> <font color="#434f54">++</font><font color="#000000">)</font><font color="#000000">{</font> <font color="#d35400">delay</font><font color="#000000">(</font><font color="#000000">1000</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">}</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">ventilator</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">//vypni ventilator</font> <font color="#000000">}</font> <font color="#00979c">void</font> <font color="#000000">kvitancePoruchy</font><font color="#000000">(</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// funkce kvitance poruchy</font> <font color="#5e6d03">if</font><font color="#000000">(</font><font color="#000000">porucha</font> <font color="#434f54">></font> <font color="#000000">0</font> <font color="#000000">)</font><font color="#000000">{</font> <font color="#434f54">// kdyz je porucha aktivni</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Kvitance poruchy ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#434f54">// vypni vse</font> <font color="#000000">vypniVse</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#5e6d03">while</font> <font color="#000000">(</font><font color="#d35400">digitalRead</font><font color="#000000">(</font><font color="#000000">tlacitkoKvitance</font><font color="#000000">)</font> <font color="#434f54">==</font> <font color="#00979c">LOW</font><font color="#000000">)</font> <font color="#000000">{</font> <font color="#434f54">// zapni alarm a cekej na stisk tlacitka</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">alarm</font><font color="#434f54">,</font> <font color="#00979c">LOW</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// zapni alarm</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Porucha ... cekam na kvitanci"</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#000000">wdt_reset</font><font color="#000000">(</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// resetuj watchdog</font> <font color="#000000">}</font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Porucha kvitovana ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">alarm</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// vypni alarm</font> <font color="#000000">porucha</font> <font color="#434f54">=</font> <font color="#000000">0</font><font color="#000000">;</font> <font color="#434f54">// vynuluj poruchu</font> <font color="#000000">}</font> <font color="#5e6d03">else</font> <font color="#000000">{</font> <font color="#434f54">// jinak </font> <b><font color="#d35400">Serial</font></b><font color="#434f54">.</font><font color="#d35400">println</font><font color="#000000">(</font><font color="#005c5f">"Zadna porucha ..."</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// ladici seriova komunikace</font> <font color="#d35400">digitalWrite</font><font color="#000000">(</font><font color="#000000">alarm</font><font color="#434f54">,</font> <font color="#00979c">HIGH</font><font color="#000000">)</font><font color="#000000">;</font> <font color="#434f54">// vypni alarm</font> <font color="#000000">}</font> <font color="#000000">}</font> </pre>
Díky moc!
johnyholÚčastníkTak to je přesně to co bych si představoval! moc díky za tip!
johnyholÚčastníkO displayi jsem už taky přemýšlel, ale nakonec jsem se rozhodl pro ethernet schield, protože bych chtěl časem sledovat stav kotle (případně i nastavovat) a taky teplotu v místnostech (nebo aspoň v obýváku) po síti a nejlépe i v mobilu s androidem. Půjde to? Úplně nejlepší by byla jednoduchá webová stránka, kde by se vypisovalo co zrovna kotel dělá a taky by tam bylo tlačítko pro zapnutí kotle na dálku v případě, že budeme někde na cestách, v baráku bude zima a budeme si chtít zatopit než přijedeme domů.
johnyholÚčastníkTady upravený kód:
// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 30_3_2016 // changelog // v 30_3_2016 // oprava funkce tlacitka kvitace poruchy -> HIGH->LOW // umazani parametru "long cas=13000;" -> jiz neni potreba // umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba // umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba // umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni // drobne upravy textu/popisu jednotlivych parametru/funkci // v 27_3_2016 // uprava procesu zapalovani - nebude reagovat na prostorovy termostat // uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s // nastaveni definice poruch pro pozdejsi vyuziti // v22_3_2016 // uprava ladicich textu pro termostaty // v21_3_2016 // presunuti testuPlamene pouze do smycky udrzuj horeni // doplneni textu do testu horeni // oprava textu zprav // zruseni diakritiky // zapnuti alarmu pri vyskytu poruchy // v20_3_2016 // slouceni podminenych funkci // vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podminky smycek (zruseno =) // posun zpozdeni 5s z procesu zapaleni na jeho konec // doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle // nastaveni poruchy a jeji kvitance tlacitkem na pinu 9 // definice poruch // bit funkce // 0 prehrati kotle pri zapalovani // 1 ztrata plamene pri horeni // 2 volne // 3 volne // 4 volne // 5 volne // 6 volne // 7 volne // knihovna watchdogu #include <avr/wdt.h> #define davkovaniPelet 6 //davkovani pelet snek #define spirala 5 //zapalovaci spirala #define ventilator 3 //ventilator #define alarm 10 //signalizace poruchy #define prostorovyTermostat 12 //prostorovy termostat #define kotlovyTermostat 2 //kotlovy termostat #define fotobunka 8 //fotobunka pro kontrolu plamene #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s int smycka2 = 0; // pomocna smycka - udrzeni horeni int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni int smycka3max = 2; // max.pomocne smycky int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet int smycka4max = 12; // max.pomocne smycky int smycka5 = 0; // pomocna smycka - rozhoreni int smycka5max = 5; // max.pomocne smycky int smycka6 = 0; // pomocna smycka - dohoreni int smycka6max = 84; // max.pomocne smycky byte porucha = 0; // promenna pro zaznam poruchy void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(prostorovyTermostat, INPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); // nastav watchdog na 8s wdt_enable(WDTO_8S); } void loop() { wdt_reset(); // resetuj watchdog Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0 if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty Serial.println("Prostorovy termostat zapnut"); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } } else { Serial.println("Prostorovy termostat vypnut"); // ladici seriova komunikace } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni davkovani digitalWrite(spirala, LOW); //vypni zhaveni digitalWrite(ventilator, LOW); //vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 12s"); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(davkovaniPelet, LOW); //potom vypni davkovani digitalWrite(ventilator, HIGH); //zapni ventilator digitalWrite(spirala, HIGH); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 3 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.print(smycka3max); // ladici seriova komunikace Serial.print(" stav: "); // ladici seriova komunikace Serial.print(smycka1); // ladici seriova komunikace Serial.print("s/"); // ladici seriova komunikace Serial.print(smycka1max); // ladici seriova komunikace Serial.println("s "); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne digitalWrite(spirala, LOW); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace bitSet(porucha,0); // nastav poruchu bit c.0 na "1" } if(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen digitalWrite(spirala, LOW); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(prostorovyTermostat) == HIGH && digitalRead(kotlovyTermostat) == HIGH){ // prostorovy + kotlovy termostat je zapnuty if(digitalRead(fotobunka) == HIGH){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //davkuj pelety delay(1000); //pockej 1s digitalWrite(davkovaniPelet, LOW); //vypni davkovani delay(1000); //pockej 1s } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(digitalRead(fotobunka) == LOW){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, HIGH); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ..."); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //vypni davkovani pelet digitalWrite(spirala, LOW); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(ventilator, LOW); //vypni ventilator } void kvitancePoruchy() { // funkce kvitance poruchy if(porucha > 0 ){ // kdyz je porucha aktivni Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, HIGH); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace digitalWrite(alarm, LOW); // vypni alarm } }
johnyholÚčastníkAhoj, tak teď už je to kód jako v Temelíně 🙂 Jinak jsem to zkoušel a po drobný úpravě už to vypadá dobře. Musel jsem ještě změnit hodnotu u kvitace poruchy, přesně tady:
while (digitalRead(tlacitkoKvitance) == HIGH) { // zapni alarm a cekej na stisk tlacitka
z hodnoty „HIGH“ na hodnotu „LOW“, protože to reagovalo na tlačítko poruchy obráceně. (+ jsem tam udělal ještě pár úprav, upravený kód přiložím později) Všiml jsem si toho, když už jsem byl bezradnej (pořád nefungovala porucha) a tak jsem to komplet všechno rozpojil a znovu zapojil podle simulátoru, ale stejně to nešlo. Taky jsem si všiml, že tam máš tlačítka (spínače) zapojený obráceně (jako imput_pullup), jenom jsem si toho předtím vůbec nevšiml, protože tam máš i odpory. (sice ne proti zemi, ale proti plusu) Sériová komunikace je taky v pohodě, jenom bych ještě uvítal, kdyby běžel při každý akci čas (odpočet) jako je to při pokusu o zapálení. Časování u zapalování už taky funguje korektně 1-10min.johnyholÚčastníkNo mělo by to prakticky reagovat jenom na prostorák. Kotlový termostat vypne pouze, když je teplota kotle vyšší než cca. 85°, takže je to během zapalování vyloučený. (proces zapalování začíná cca. při 75°)
johnyholÚčastníkTak jsem na to koukal a mám to přesně tak zapojený jako je to tam. Je zajímavý, že tam ta ztráta plamene funguje tak jak jsem požadoval: vypne dávkování, zapne/ohlásí to poruchu a doběhne ventilátor. Po stisknutí tlačítka to opět normálně naběhne. (tzn. začne proces zapalování) Ty už jsi s tím něco dělal? Jinak ten bod tři z posledního příspěvku je i tam stejný jak píšu v předešlým příspěvku. Jo a jak píšeš, že když kliknu na součástku tak se ukáže popis, tak to nefunguje, ale to nevadí, dá se v tom v pohodě vyznat.
johnyholÚčastníkZdravím, tak jsem to vyzkoušel a poznatky jsou následující:
1) test zapálení, rozhoření, hoření, vypnutí jednoho z termostatů, dohoření -> OK
2) test ztráty plamene během hoření -> tady je něco špatně. Pokud fotobuňka nevidí plamen, tak správně vypne dávkování pelet, ale potom běží čas na dohoření 84s a až pak to začne znovu dávkovat pelety a začne nový pokus o zapálení (respektive dva a pak to jede od znova pořád dokola) a hlavně to nesignalizuje chybu „Alarm“ na výstupu 10 – tady bych to řešil pouze vypnutím dávkování, mohl by ještě doběhnout ventilátor a pak by to zapnulo/ohlásilo poruchu. Jak jsem psal už dřív, tak se tato situace stává pouze když dojdou pelety, proto bych se tím zbytečně moc nezabýval.
3) test vypnutí termostatu během zapalování -> vypne to spirálu a začne běžet dohoření. Taky bych to trochu poopravil, aby to nechalo žhavit po nastavenou maximální dobu (10min.), nebo pokud to nezapálí a pak aby to dalo řekněme dvě dávky paliva a začal proces dohoření. Tím by se vyřešil případný problém s kopou pelet v komoře hořáku při dalším zapálení/zapnutí termostatu.
Díky!johnyholÚčastníkTakhle by to asi šlo, vyzkouším a dám vědět. Jenom u toho nastavení max. zapalovací doby mně to tak jak píšeš nefunguje. Když dám pin přímo na zem tak to běží cca. 3,5min. a když ho dám na 5V tak to běží cca. 21,5min. Takže když jsem dal 10K trimr na střed, tak mi to běželo cca. 12min a proto jsem to musel honit abych tam dostal těch požadovaných 10min.
johnyholÚčastníkChápu že bych to musel předělat na 5V když bych tam chtěl dát Arduino tak jak to je momentálně, ale jde mi o to jak se chová stávající zapojení. Konkrétně jestli musí být na konkrétním digitálním vstupu přesně 24V aby to vykonalo požadovanou věc, nebo jestli tam jde nastavit ať to dělá něco v případě že je na vstupu např. > 0V. Protože pokud měřím ostatní vstupy, tak tam je právě těch 24V a ani se to nehne, kdežto u fotobuňky to kolísá. Jinak pokud se nám to podaří rozchodit s Arduinem tak to plánuju stejně komplet předělat (přepojit).
johnyholÚčastníkOK, díky!
Ten Schneider právě nemůžu naprogramovat ani ručně, protože to má výrobce zamknutý. Dostanu se pouze do nastavení jednotlivých parametrů. (třeba jak dlouho to má sypat pelety, jakou dobu má běžet ventilátor, nebo jak dlouho má žhavit spirála) Ještě bych měl dotaz. Jak si psal, tak to má digitální vstupy 24V a do jednoho je napojená i fotobuňka. Respektive je napojená do silové jednotky a z ní pak leze do toho vstupu podle intenzity světla co vidí napětí v rozmezí 0-20V. Je to tedy tak v pořádku? Dají se nastavit ty vstupy, že reagují na určitý rozsah (hodnotu) napětí? a těch 24V je maximum co se tam dá poslat? Napadlo mě, jestli nemůže být problém v tý silový jednotce (že třeba dává menší napětí) a ta pak zblbne to program. relé.johnyholÚčastníkAhoj. Tak jsem to podrobil rozsáhlým testům a poznatky jsou následující:
1) Proces zapalování je zdá se v pořádku, včetně nastavení max. zapalovací doby trimrem (mimochodem super nápad, není to sice moc elegantní – musel jsem si s tím trochu pohrát abych tam dostal těch 10min., ale účel to splní)
2) Zkoušel jsem simulovat během zapalování vypnutí prostoráku a tady to ještě bude chtít odladit -> po vypnutí to pořád žhaví a točí se ventilátor, ten se po 84s vypne, ale spirála žhaví dál. Hlavně to vůbec nereaguje na fotobuňku.
3) Zkoušel jsem taky simulovat ztrátu plamene během hoření a tady je to celkem v pořádku – přestane to podávat pelety, počká to 84s, pak vypne ventilátor a začne proces zapalování -> tady by to možná chtělo řešit poruchou, protože plamen by pokud se nezasekne peleta v dopravníku, nebo nedojdou pelety neměl zhasnout nikdy.Ještě k tomu Schneideru. Taky jsem si původně myslel, že tomu zkusím aspoň přehrát firmware, ale jenom kabel na připojení k PC stojí cca. 2tis. Tak proto jsem se rozhodl, že to zkusím s Arduinem a aspoň se něco přiučím.
johnyholÚčastníkTak znova:
Attachments:
johnyholÚčastníkJe tam tohle:
-
AutorPříspěvky