Close

GabrielM

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 2,131. až 2,160. (celkem z 2,760)
  • Autor
    Příspěvky
  • odpověď na: Řídící jednotka pro peletový kotel #6388
    posjirka
    Účastník

    Arduino má digitální vstupy a vyýstupy na všech pinech a to v napěťové hladině 5V.
    to je tedy pro něj max. napětí, pro které bylo stavěné. Některé modely jej mají snížené na 3,3V.
    Uno má navíc na 6 pinech analogový vstup pro 0-5V (hodnoty 0-1023). 24V je pro něj moc.
    Musíš jej snížit na 5V (nejčastěji stabilizátorem řady 78xx). To ovšem znamená, že i celá logika vstupů musí být na 5V. Předpokládám, že se vše odvijí od 24V zdroje a kotel je vybaven tzv. bezpotenciálovými kontakty = prostě kontakty ve vzduchu, s ničím nespojené. To je vcelku časté řešení. Pak by nebyl problém překopat to na 5V.
    Výstupy budou v každém případě pomocí relé (opět ze stejného důvodu). Předpokládám že budou místy spínat 230V ze sítě.
    Takže vstup bych dal na 5V logiku a výstupy přes relé.
    Ten foto odpor nevím jak je zapojený. Většinou je to formou napě´tového děliče, takže je někde již zapojený odpor.
    Pak budeš mít hodnoty třeba 0 – 4V (0 – 820 hodnoty převodníku).Nastavit si že plamen je cokoliv > 2V je úplně v pořádku. Nevím jaká je tam tedy logika. Jestli 0V je tma nebo plamen.

    odpověď na: Řídící jednotka pro peletový kotel #6387
    johnyhol
    Účastník

    OK, 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é.

    odpověď na: Podmínka IF s D3231 #6386
    posjirka
    Účastník

    tak ti asi nikdo neodpoví. Zkus nahodit jednoduchý příklad co to má dělat a k tomu dej svůj kod, kam až ses dostal. Určitě ti pak můžeme pomoci. Jinak dostaneš pouze hordu odkazů bez jakékoliv myšlenky.

    odpověď na: Řídící jednotka pro peletový kotel #6385
    posjirka
    Účastník

    podívám se na to.
    Programovatelné relé jako je ten schneider se dají naprogramovat i bez kabelu.
    Mám na mysli programování pomocí tlačítek. Dobře je to vidět tady:
    http://www.conrad.cz/ridici-releovy-plc-modul-eaton-easy-512-dc-r-274108-ip20-4x-rele-24-v-dc.k198179

    není to u všech modelů ale může to programovat tak, že se odstaneš do ručního programování a pomocí tlačítek tam nadatluješ „kontakové zapojení“.
    Pak to odzkoušíš a je to. Bez kabelů, bez SW, …

    Existuje i podobné vývojové prostředí free a pro mikroprocesory. jmenuje se to LDMICRO:
    http://cq.cx/ladder.pl
    V tom programu si napojíš na jednotlivé linie kontkty tak, že vlastně každý řádek je jedna podmínka. v ní se nachází stav vstupů (i virtuálních) zobrazen jako kontakty (zapni, vypni, hodnota, …) a ukončíš to výstupem nebo virtuální cívkou, která zase může ovládat další linie. Ten SW je včetně simulátoru, takže si to můžeš vyzkoušet dřív než to nahraješ. Výstup může být i pro arduino resp. pro mikročip ATMEGA328 🙂

    To jen pro úplnost. Večer se podívám na ty problémy a zkusím je poopravit.

    odpověď na: Řídící jednotka pro peletový kotel #6383
    johnyhol
    Účastník

    Ahoj. 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.

    posjirka
    Účastník

    děkuji ti za sdílení informací a zkušeností. To je důvod, proč jsou tyto fóra oblíbená a využitelná i pro laiky. Máš problém, vyřešil si jej a dáváš nám řešení do placu. Držím palce a kdybys něco potřeboval ozvi se …

    Simakai
    Účastník

    Ahoj všem,

    zatím na projektu pracuju a hotový ještě není. Tento příspěvek píšu jednak proto, abych vykázal nějakou aktivitu, jednak proto, aby posjirka věděl, že tohle vlákno nepošlo : a jednak proto, že zrovna mám čas hodit sem pár postřehů.

    1) Peklo s diodou: Koupil jsem si několik diod, k nim dle rad na internetu dopočítal rezistory, zapojil do kontaktního nepájivého pole a nic. Zkoušel jsem s rezistorem, bez, tak či onak, otočit atd a nesvítila. Jen se mi podařilo pár diod rozsvítit na jejich poslední cestu do křemíkového nebe (red dwarf spoiler 😉 při jejich odvaření. Řešení se nakonec ukázalo samo – já pakoš jsem zapojoval kaskádu rezistor + dioda do jedné řady v breadboardu a tedy jsem všechny nožičky napojoval do jednoho uzlu obvodu :-D. Po elementárním uvědomění jak vlastně pozapojovat obvod na breadboardu to již fičí.

    2) Peklo s SD kartou 1: občas to kartu detekovalo, občas ne. V celém cyklu dělám totiž několik testů, zda je SD karta dostupná, abych buď diodou signalizoval že je či není, nebo před samotným zápisem dat. Nakonec jsem vygooglil, že SD knihovna má v sobě elementární chybu a musel jsem upravit SDClass::begin proceduru a přidat tam něco jako if(root.isOpen()) root.close(). Pak to začlo fungovat dobře a test přítomnosti SD karty je možno volat opakovaně.

    3) Peklo s SD kartou 2: při zahájení měření se prohledá SD karta, zda tam existuje soubor typu mer00001.csv a pokud ne, tak ho založí, pokud jo, tak se zjistí nejvyšší číslo v souborech a vytvoří se nový soubor s číslem o jedna vyšším, tedy například při existenci mer000001.csv se vytvoří mer000002.csv. Nu a občas to správně našlo všechny soubory a propočítalo z jejich názvů jméno nového souboru a někdy to nenašlo nic a tedy mi to otevřelo základní mer000001.csv. Po několika probrečených večerech jsem přišel na to, že v proceduře pro procházení souborů musím za root = SD.open(„/“); přidat příkaz root.rewindDirectory(); a pak prohledávat soubory, neboť SD knihovna si bez rewindu pamatovala konec řady prohledávaných souborů a tedy nic neobjevila. Rewindem se to vyřešilo.

    4) Peklo s časem: po startu logování se mi na LCD display ukazuje čas ve formátu hh:ii:ss a i se to zapisuje na SD kartu. K mému údivu při testu mi to po cca 5 hodinách a 47 minutách začlo čas počítat opět od začátku. Čas odvozuju od millis a ty se mi logovaly správně (stále narůstaly). Po deseti hrstích vytrhaných vlasů jsem zjistil, že v proceduře pro formát času z hodnoty millis (kterou jsem převzal z internetu), musím nahradit řádek days = inttime / (24 * 3600); jiným zápisem a sice days = inttime / 86400; a pak to funguje dobře. To mě, věru, překvapilo nejvíc. Nakonec jsem zjistil, že tam vlastně dny ani nepotřebuju a rovnou tam hledám hodiny pomocí řáku hours = inttime / 3600; a to funguje bezpečně dobře. Krásně mi to loguje i 31:25:13 atd, tedy vím, že od startu logování uběhlo 31 hodin.

    Jiné 1): LCD display se mi podařilo připojit napoprvé, resp. velmi rychle, dokonce jsem tam zapojil i potenciometr na nastavení kontrastu a taktéž to funguje dobře.

    Jiné 2): Malý senzor s na teplotu se mi taktéž podařilo zprovoznit rychle, za využití knihoven OneWire.h a DallasTemperature.h

    Co mě čeká: stále mi nedorazily termočlánky a k nim objednané převodníkové moduly, takže se těším, co mě překvapí. Už teď vím, že budu muset vyřešit více zařízení na SPI sběrnici, ale teoreticky to zmáknuté mám, SD čtečku už na SPI vlastně taky mám a funguje, takže jsem skoro v závěru.

    Snad mé postřehy uvedené výše pomůžou i dalším při řešení problémů s arduinem.

    Martin

    odpověď na: Řídící jednotka pro peletový kotel #6368
    posjirka
    Účastník

    smart rele od schneideru 🙂
    dalo se to čekat, je spolehlivé, jednoduše programovatelné a vcelku levné.
    Jinak to si můžeš naprogramovat sám pomocí kontaktových schémat …
    Používá se např. Siemens LOGO.
    Jen pozor na na digitální vstup – tady má hodnotu 24V !!!
    Já jsem zatím udělal toto:

    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 16_3_2016
    
    // changelog 16_3_2016
    // uprava podmínky smyček (zrušeno =)
    // posun zpoždění 5s z procesu zapálení na jeho konec
    // doplněna podmínka reakce na termostaty (kotlový/prostorový) v procesu zapálení
    // 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
    // nastavení poruchy a její kvitance tlačítkem na pinu 9
    
    #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
    #define trimr1 14 // nastaveni doby zapaleni  DI14 = A0 pro arduino UNO
    #define tlacitkoKvitance 9 // pin tlačítka kvitance poruchy
    
    long cas=13000;
    int smycka1 = 0; // pomocna smycka - zapálení
    int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A1 60-600s
    int smycka2 = 0; // pomocna smycka - udržení hoření
    int smycka2max = 2; // max.pomocne smycky
    int smycka3 = 0; // pomocna smycka - počet pokusu o zapalení
    int smycka3max = 2; // max.pomocne smycky
    int porucha = 0; // proměnná pro záznam poruchy (zatím v režimu 0-1)
    
    void setup() {
    	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
    	digitalWrite(davkovaniPelet, LOW); //vypni dávkování
    	digitalWrite(spirala, LOW); //vypni žhavení
    	digitalWrite(ventilator, LOW); //potom vypni ventilátor
    }
    
    void loop() {
    	smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni dobz zapaleni trimrem na A0
    	if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    		if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    			// start
    			//------
    			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í
    			// proces zapálení
    			//----------------
    			for (smycka3 = 0;  smycka3 < smycka3max; smycka3 ++){
    				for (smycka1 = 0;  smycka1 < smycka1max; smycka1 ++){
    					if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    						if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    							if(digitalRead(fotobunka) == HIGH){	//pokud fotobuňka vidí plamen
    								digitalWrite(spirala, LOW); //vypni žhavení
    								smycka1 = smycka1max; // ukonči smyčku1
    								smycka3 = smycka3max; // ukonči smyčku3
    								
    							}
    						} else {
    							smycka1 = smycka1max; // ukonči smyčku1
    							smycka3 = smycka3max; // ukonči smyčku3
    						}
    					} else {
    						smycka1 = smycka1max; // ukonči smyčku1
    						smycka3 = smycka3max; // ukonči smyčku3
    					}
    					delay(1000);
    				}
    				delay(5000); //čekej 5s
    			}
    			// porucha
    			if(digitalRead(fotobunka) == LOW){	//pokud fotobuňka nevidí plamen
    				if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    					if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    						// tzn. termostaty chteji topit, ale plamen se nezapalil
    						porucha = 1; // nastav poruchu
    					}	
    				}
    			}
    			// udržení hoření
    			//--------------
    			for (smycka2 = 0;  smycka2 < smycka2max; smycka2 ++){
    				smycka2 = 0; // vynuluj smyčku
    				if(digitalRead(prostorovyTermostat) == HIGH){	// prostorovy termostat je zapnuty
    					if(digitalRead(kotlovyTermostat) == HIGH){	// kotlový termostat je zapnutý
    						if(digitalRead(fotobunka) == HIGH){	//pokud fotobuňka vidí plamen
    							digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
    							delay(1000); //počkej 1s
    							digitalWrite(davkovaniPelet, LOW); //vypni dávkování
    							delay(1000); //počkej 1s
    						} else {
    							smycka2 = smycka2max; // ukonči smyčku
    						}
    					} else {
    						smycka2 = smycka2max; // ukonči smyčku
    					}
    				} else {
    					smycka2 = smycka2max; // ukonči smyčku
    				}  
    			}
    			// dohoření
    			//---------
    			digitalWrite(davkovaniPelet, LOW); //vypni dávkování pelet
    			delay(84000); //počkej 84s
    			digitalWrite(ventilator, LOW); //potom vypni ventilátor
    		}
    	}
    	if(porucha > 0 ){	// když je porucha aktivní
    		while (digitalRead(tlacitkoKvitance) == HIGH) {	// zapni alarm a cekej na stisk tlačítka
    			digitalWrite(alarm, HIGH); // zapni alarm
    		}
    		digitalWrite(alarm, LOW); // vypni alarm
    		porucha = 0; // vynuluj poruchu
    	} else {	// jinak 
    		digitalWrite(alarm, LOW); // vypni alarm
    	}
    }
    odpověď na: Řídící jednotka pro peletový kotel #6366
    johnyhol
    Účastník

    Tak znova:

    odpověď na: Řídící jednotka pro peletový kotel #6365
    johnyhol
    Účastník

    Je tam tohle:

    odpověď na: Řídící jednotka pro peletový kotel #6364
    posjirka
    Účastník

    možná mám někde chybku já. budu si muset nadatvit simulator a zjistit kde je chyba.

    Proč trápit spirálu? Práv když nevíš kolik je tam pelet, tak zkusit zapálit a když nic tak je tam naládovat. ta podmínka vypnutí termostatu po zapálení a následně 1 min. hoření, vypnutí … těch proměnných a podmínek je tam pak vcelku dost.

    asi opustíme tuto myšlenku a necháme to na původní funkci regulace. Opravdu se to pak dá dodělat, jen bych rád udělal 1 fuknční kus a ten pak vylepšoval. kotel a zbytek HW je na tento proces připraven, tak by to neměl být problém. mohl bys sem dát jak ta stávající regulace vypadá? celkem by mě zajímalo co má za signalizaci na sobě a jaké má možnosti nastavení. je dobré vycházet z typového řešení…

    odpověď na: Řídící jednotka pro peletový kotel #6363
    johnyhol
    Účastník

    Takže jsem udělal ten test s LEDkou a časy sedí. Tak nevím…

    odpověď na: Řídící jednotka pro peletový kotel #6362
    johnyhol
    Účastník

    To by asi problém byl. Průměrná doba zapálení je cca. 6min. a proč trápit spirálu bez pelet? už tak jsem jednu po cca. pěti letech měnil. V návodu k hořáku (a taky nastavení z výroby) je doba pro zapálení pelet 7min. a když to nezapálí tak se konají ještě dva kompletní procesy zapalování. (jak jsem psal dřív, tak to znamená hromadu pelet a někdy přetopení kotle) Mně se osvědčilo nastavit čas pro zapálení pelet na 10min. a tak to poměrně spolehlivě fungovalo do doby než začala blbnout řídící jednotka. Takže bych asi vyzkoušel to samý nastavit i tady a zkoušet co to udělá. Případně aby to dalo (jak navrhuješ) po uplynutí času (10min.) ještě jednu menší dávku (12s) a opakovalo pokus o zapálení. Potom už bych to řešil vypnutím a alarmem. Jinak k tomu přerušení po vypnutí prostoráku bych to viděl asi takto:
    1)pokud vypne během zapalování, tak pokračuj v procesu zapalování a po zapálení nech proběhnout řekněme 3x proces hoření (3x 10s dávkování + 10s stání), potom vypni dávkování a nech dohořet pelety (84s) a vypni ventilátor – tím se zabezpečí vyhoření zapalovací dávky pelet a zabrání se případnému přetopení kotle při dalším zapnutí
    2)pokud vypne během normálního hoření, tak to nechat jednoduše tak jak to je momentálně, vypnout dávkování a nechat dohořet pelety (84s) a potom vypnout ventilátor

    Takže asi tak, jdu zkusit tu LEDku abych zjistil ten problém s časem(respektive kde se bere těch 3,5min)

    odpověď na: Řídící jednotka pro peletový kotel #6361
    posjirka
    Účastník

    a byl by problém kdyby spirála žhavila třeba 5 minut bze peletek,
    Napadlo mě udělat zapalovací proces ve 3 stupních.
    1, zapni spirálu a zkus do 5 minut zapálit peletky.
    2, nepovedlo se? tak tak 12s naláduj pelekty a zkus to znovu
    3, add.2,
    Když ani te´d nic tak spus´t alarm a ukonči vše,

    odpověď na: Řídící jednotka pro peletový kotel #6360
    johnyhol
    Účastník

    No momentálně je to tak jak jsem psal v prvním příspěvku. S tím, že když vypne prostorák, tak to prostě vypne hořák a je jedno jestli to zrovna topí nebo žhaví spirála. Takže když se to snaží zapálit a vypne to, tak tam prostě zbyde halda pelet a při opětovným zapnutí se přisypou další (zapalovací dávka). Což občas nedělá dobrotu, protože je to nastavený tak, že když to napoprvé nezapálí tak se proces opakuje ještě dvakrát a pak už je tam opravdu ohromná halda a někdy se kotel přetopí až vypadne tepelná pojistka. Což není dobrý a myslím že to proto musíme udělat jinak. Takže jsem o tom přemýšlel a myslím že bych to radši udělal tak, že když v průběhu zapalování vypne prostorák, tak to ještě nechá zapálit pelety, nějaký čas to poběží aby dohořely a pak by se to normálně vypnulo. Ještě to pořádně promyslím a ozvu se. Jinak už je to téměř dokonalý!
    Díky!

    odpověď na: Řídící jednotka pro peletový kotel #6359
    posjirka
    Účastník

    je to otázka co je žádáno.
    Dá se udělat proměnná, která bude řešit jednotlivé stupně procesu a když termostat vypne + zapne, tak se vrátí k poslednímu stupni a bude pokračovat dál. V tu chvíli je nutné si říct nějáké podmínky za kterých se má k tomu stupni vrátit a v případě nepslnění podmínek sjet o stupeň dolu.
    Už je to pak o více potřebných informacích :
    – mám v kotli dost peletek na zapálení?
    – nehoří mi už zbytek peltek = je nutené tam cpát 12s plnou dávku pelet?
    – …

    Tohle všechno už moc nesouvisí s programováním, ale s tzv. procesním algoritmem.
    Jeho funckí je popsat všechyn možné a nemožné stavy zařízení a reakce na ně.
    Vracíme se zpět k tomu diagramu co jsem tady dávali do kupy …

    Ve výsledku bych být tebou poslat reakce stvávající regulace a „pouze“ ji zkopíroval. čas na vylepšení je vhodné využit na již fungující platformě.
    jinak se zasekneš na banalitě a celek tím bude trpět…

    Dej si tedy dohromady funkcionalitu stávající regulace v jednotlivých provozních režimech + reakci na nenadálé situace a jdeme na to.
    Základ si myslím, že už máš ….

    odpověď na: Řídící jednotka pro peletový kotel #6358
    johnyhol
    Účastník

    1) Momentálně to dělá to, že když vypne prostorový termostat, tak to vypne komplet hořák (tzn. žhavení, šneka a myslím že i ventilátor, ale to si nejsem šur – zjistím) – je to sice na prd, když to pak zase sepne prostorák tak jsou tam rázem dvě zapalovací dávky pelet, ale ty pak nějak vyhoří – zkusím se ještě zamyslet jestli by to nešlo nějak vylepšit.
    2) Nechám radši na tobě, nicméně to s tou LEDkou zkusím

    Díky!

    odpověď na: Řídící jednotka pro peletový kotel #6357
    posjirka
    Účastník

    add 1, co by to mělo dělat, když se vypne termostat? nezapomeń, že máš nasypané peletky a žhavíš spirálu….
    add 2, to pujde dodělat. 3,5min může být bu´d nesprávnou frekvencí Arduina (mělo s tím prlbémy moje Arduino u verze IDE tuším 1.0.3). Dej si jednoduchý příklad, rozsvi´t LED na 10s, pak 10s zhasni. No a změř si čas stopkama.
    add 3, to else je tam proto, že když vypne termostat kotle, nebo prostorový termostat nebo zmizí plamen, tak automaticky ukončuje „nekonečnou“ smyčku udržení hoření. No a jelikož jsem to nechtel koplikovat tak jsem dal jednu stopku do každé podmínky když se nesplní.

    Tu upravu zvládneš sám, nebo jí tam mám dát?

    odpověď na: Řídící jednotka pro peletový kotel #6356
    johnyhol
    Účastník

    Tak jsem to tvoje dílo hodil do stroje a je to téměř dokonalý! Seš opravdu jednotka! Jelikož je to pro mně už vyšší dívčí, tak bych potřeboval ještě pár maličkostí:
    1) Pokud během procesu zapalování vypnu jeden z termostatů tak se nic neděje, resp. pořád to žhaví a běží ventilátor (ten vypne cca. po 3,5min., ale spirála žhaví dál)
    2) Proces zapalování trvá cca. 3,5min., pokud se nezapálí pelety tak se pak všechno opakuje (začne se sypat zapalovací dávka, vypne ventilátor a po zpoždění 12s se zastaví sypání a zapne ventilátor) – nechápu kde se to zpoždění (3,5min.) pořád bere? -> potřeboval bych zpoždění zapalování cca. 10min
    3) Nechápu proč je na konci smyčky „udržení hoření“ 3x po sobě „else“?

    Zatím díky moc!

    odpověď na: Řídící jednotka pro peletový kotel #6354
    posjirka
    Účastník

    je myslím čas začít řešit poruchy.
    Navrhuji použít „registr poruch“.
    uděláš si proměnnou typu byte :
    byte porucha = 0; // registr poruch

    proměnná typu byte má velikost 8 bite. tzn. 8x pozice 1 nebo 0 pro záznam poruchy.
    Můžeš totiž přistupovat ke každému bitu zvlášť a zároveń jej brát jako číslo.
    Myslím to tak, že budeme mít 2 typy poruch:
    – drobné
    – vážné
    Přiřadíme si ke každému typu 4 pozice (nikdy nevíš kolik jich budeš potřebovat)
    takže bite 0 až 3 budou drobné poruchy – třeba zhasnul plamen během hoření
    a bite 4 až 7 budou závažné poruchy – nepodařilo se mi zapálit peletky

    Je to super, že máš kam zapisovat chyby, zároveň si je můžeš zobrazit i třídit.
    Navíc, pokud se nejedná o závažnou chybu můžeš pokračovat dál.

    if(porucha < 8) { 
      // když jsou poruchy pouze drobné pokračuj dál ...
    }
    odpověď na: Řídící jednotka pro peletový kotel #6353
    posjirka
    Účastník

    sakryš, nepodařilo se mi nahrát soubor. no nic vložím ho tedy sem:

    // REGULACE PELETKOVEHO KOTLE
    // author. Johnyhol & by JP
    // v 15_3_2016_a
    
    #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;
    int smycka1 = 0; // pomocna smycka - zapálení
    int smycka1max = 120; // max.pomocne smycky
    int smycka2 = 0; // pomocna smycka - udržení hoření
    int smycka2max = 2; // max.pomocne smycky
    
    void setup() {
      pinMode(davkovaniPelet, OUTPUT);
      pinMode(spirala, OUTPUT);
      pinMode(ventilator, OUTPUT);
      pinMode(alarm, OUTPUT);
      pinMode(prostorovyTermostat, INPUT);
      pinMode(kotlovyTermostat, INPUT);
      pinMode(fotobunka, INPUT);
      // vsechno vypni
      digitalWrite(davkovaniPelet, LOW); //vypni dávkování
      digitalWrite(spirala, LOW); //vypni žhavení
      digitalWrite(ventilator, LOW); //potom vypni ventilátor
    }
    
    void loop() {
      if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty
        if(digitalRead(kotlovyTermostat) == HIGH){ // kotlový termostat je zapnutý
          // start
          //------
          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í
          // proces zapálení
          //----------------
          for (smycka1 = 0;  smycka1 <= smycka1max; smycka1 ++){
            if(digitalRead(fotobunka) == HIGH){ //pokud fotobuňka vidí plamen
              digitalWrite(spirala, LOW); //vypni žhavení
              delay(5000); //čekej 5s
              smycka1 = smycka1max; // ukonči smyčku
            }
            delay(1000);
          }
          // udržení hoření
          //--------------
          for (smycka2 = 0;  smycka2 <= smycka2max; smycka2 ++){
            smycka2 = 0; // vynuluj smyčku
            if(digitalRead(prostorovyTermostat) == HIGH){ // prostorovy termostat je zapnuty
              if(digitalRead(kotlovyTermostat) == HIGH){ // kotlový termostat je zapnutý
                if(digitalRead(fotobunka) == HIGH){ //pokud fotobuňka vidí plamen
                  digitalWrite(davkovaniPelet, HIGH); //dávkuj pelety
                  delay(1000); //počkej 1s
                  digitalWrite(davkovaniPelet, LOW); //vypni dávkování
                  delay(1000); //počkej 1s
                } else {
                  smycka2 = smycka2max; // ukonči smyčku
                }
              } else {
                smycka2 = smycka2max; // ukonči smyčku
              }
            } else {
              smycka2 = smycka2max; // ukonči smyčku
            }  
          }
          // dohoření
          //---------
          digitalWrite(davkovaniPelet, LOW); //vypni dávkování pelet
          delay(84000); //počkej 84s
          digitalWrite(ventilator, LOW); //potom vypni ventilátor
        }
      }
    //  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
    //  }
    }
    odpověď na: Řídící jednotka pro peletový kotel #6352
    johnyhol
    Účastník

    Ten kód jsem zkoušel vkládat do „CODE“, ale bylo to stejný jako když jsem to dal bez nich. Nějak mně to blbne, vždycky když odesílám příspěvek tak se mi to na dlouhou dobu sekne. Jinak už jsem byl z toho zoufalej, tak jsem zkoušel všechny možný kombinace až z toho vzniklo to co jsem sem vložil.

    odpověď na: Řídící jednotka pro peletový kotel #6348
    posjirka
    Účastník

    nejedeš podle diagramu … je potřeba vložit jednu podmínku do druhé a když se poruší tak z ní hend vypadnout.
    Upravil jsem ti to podle se …. nezapomeň na verzování a kod vkládej buď jako soubor (díky moc admine) nebo do párových zanček CODE. Je to to tlačítko vedle UZAVŘÍT ZANČKY.

    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
    }
    }

    odpověď na: Řídící jednotka pro peletový kotel #6346
    posjirka
    Účastník

    ok … hlavně v klidu všechno rozmyslet, pořádně vyzkoušet, uložit novou revizi a pokračovat dál.
    držím palce …

    odpověď na: Řídící jednotka pro peletový kotel #6344
    johnyhol
    Účastník

    Jasně, chápu a ještě jednou děkuju za to cos pro mě do teď udělal. Spoustu věcí jsem si uvědomil(třeba s tím delay že to zastaví procesor-proto mě to pustilo k dalším povelům až po vypršení času) a jak mi vyjde čas (momentálně jsem na mateřský 🙂 – žena je po operaci) tak se na to zase vrhnu. Mám tu pořád hodně neznámých, ještě něco zkusím a pak napíšu výsledek.

    odpověď na: Řídící jednotka pro peletový kotel #6332
    posjirka
    Účastník

    mě to ani tak nechytlo, jako ti chci pomoct vyhnout se slepým uličkám.
    Nemám kotel na peletky a ani ho neplánuji …
    Nic méně, zkus se na to podívat sám. Z diagramu zjistíš, co vlastně potřebuješ.
    Funkce zapni, vypni a td jsou pouze digitalWrite(rele,1); nebo 0.
    kosočtverce jsou rozhodovací příkazy If(…).
    Pauza je vlastně delay(…) a smyčka je cyklus For(….);

    máš zadání, návod i princip. Já se jdu věnovat dalším věcem, ale rád ti pomůžu dál. jen čas na ostatní věci se mi trochu smrskl, tak musím pozornost na čas převést tam.
    Zkoušej ptej se, …. věřím že výsledek bude stát za to.

    jen drobná poznámka. Při delay(..); se ti na nastvenosu dobu „uspí“ procesor.
    proto je dobré řešit delší pauzy jäkou smyčka krátkých pauz. Máš totiž mezitím čas otestovat satv zařízení.
    navíc bude určitě nutné zapnout WATCHDOG na procesoru (hlídání zda se nezasekl).
    ten funguej tak, že nastavíš max. timeout a před vypršením tohoto času musíš resetovat jeho proměnnou. když to neuděláš, procesor je považován za zaseknutý a sám se resetuje. Jeho časy ovšem nejsou úplně variabilní a nejdelší timeout je tuším 8s. Při použití delay(..) délky třeba 10 minut ti ani deoběhne a sám procesor se resetuje. ještě můžeš použít externí obvod s delším časem, ale připadá mi to komplikované když máme all-in-one přímo od výrobce. Stačí to jen dobře uchopit.

    odpověď na: Řídící jednotka pro peletový kotel #6330
    johnyhol
    Účastník

    Moooc díky za snahu! Koukám že tě to taky chytlo 🙂
    Takže tady odpovědi:
    – Kdy sepne ventilátor? -> Momentálně spíná hned po startu hořáku, ale to je zbytečný, udělal bych to společně se spirálou
    – kdy sepne/vypne hořák? Nemáš jej na relé…. -> hořák spíná pokud je sepnutý prostorový termostat + kotlový termostat (teplota vody v kotli je menší než cca. 75°)
    – hlídání plamene má digitální nebo analogový výstup? -> analogový (je to fotobuňka – obyčejný fotorezistor), ale pro testování používám digitální (fotobuňku simuluju tlačítkem)
    – V popisu je … zapne kotlový termostat … a dál je řešeno hlídání teploty.
    Jak je hlídaná/měřená teplota? -> teplotu hlídá (řídí) kotlový termostat – pod 75°-> sepnutý, nad 85°-> vypnutý

    – Budeš tam mít LCD display? Pak by to chtělo nějáký rozvrh obrazovky …. -> momentálně ne, ale do budoucna možná bude, uvidím
    – Jak budeš signalizovat poruchu, jak jí budeš kvitovat a co má dělat při poruše? -> porucha se momentálně signalizuje pouze kontrolkou „ALARM“, ale do budoucna bych to chtěl vidět i na internetové stránce, kde bych chtěl kotel (hořák) i vzdáleně ovládat.
    Přikládám upravený diagram…

    Attachments:
    odpověď na: Řídící jednotka pro peletový kotel #6328
    posjirka
    Účastník

    ještě jsem to poupravil, jak si myslím, že to asi funguje i když těch šedých míst tam je pořád hodně.
    Ještě jsem to rozdělil na jednotlivé funkční celky (funkce), které se dají odladit samostatně a následně doplnit do celku. navíc bude lepší přehled o tom co která část dělá….
    I přes to potřebuji vědět odpovědi na předešlé otázky

    Attachments:
    odpověď na: Řídící jednotka pro peletový kotel #6326
    posjirka
    Účastník

    Tak jsem to hodil „na papír“ a je tam pár nejasností:
    Kdy sepne ventilátor?
    kdy sepne/vypne hořák? Nemáš jej na relé….
    hlídání plamene má digitální nebo analogový výstup?
    V popisu je … zapne kotlový termostat … a dál je řešeno hlídání teploty.
    Jak je hlídaná/měřená teplota?

    Budeš tam mít LCD display? Pak by to chtělo nějáký rozvrh obrazovky ….
    Jak budeš signalizovat poruchu, jak jí budeš kvitovat a co má dělat při poruše?

    určitě to bude chtít na začátku, při úplném zapnutí regulace, pauzu tak 10 minut ať má vše čas vychladnout. Resp. nevíš kdy ti vypnou elektriku, nebo se resetuje čip (přetížení, zasmyčkování ,…) tak ať neudělá nehodu.

    Attachments:
Aktuálně je na stránce zobrazeno 30 příspěvků - 2,131. až 2,160. (celkem z 2,760)