Kazán szivattyúk vezérlése

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
ymola
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2015. szeptember 28. hétfő, 8:32

Kazán szivattyúk vezérlése

Hozzászólás Szerző: ymola »

Sziasztok!

Egy kis segítséget szeretnék kérni Tőletek, hogy minél jobb legyen a kazán-puffer és puffer-fűtéskör közötti szivattyúink vezérlése. Nagyon kezdőként indultam el az arduino világában és összehoztam egy programot, ami működteti az arduino-nkat azzal az áramkörrel, amit párom készített hozzá. Az áramkörről nem tudok sokat, csak annyit, hogy hova minek a bemenete van kötve és hova mit kell nekem kiküldeni. Csatolnám ide a kis programot is, ami most így szépen vezérli is a mi rendszerünket, viszont biztos vagyok benne, hogy bőven lehetne mit szépíteni rajta, pláne, hogy nem használok EEPROM memória területet, és ahogy én gondolom, nálunk ez fontos lenne, különben nem sokáig fog működni az arduino-nk.

Van egy AVR-Duino / Mega 2560 UNO (CH340) panelünk és ahhoz van kötve egy két soros LCD kijelző a két szivattyú és 3 db LM35-ös hőmérséklet szenzor és van egy termosztát, ami ha kéri a fűtést, akkor %V-4,99V közötti értéket ad, ha nem kéri, akkor meg össze-vissza 3V és 0V között dobál mindenfélét. Első gondom az volt, hogy nem tudtam folyamatosan mérni egy jelet - pl hogy a termosztát 5 másodpercig adja-e az 5V-ot, így ezt több leolvasás átlagolásával értem el. A második gondom, meg hogy most minden a program memória területén van, amit ha jól gondolok egy címet max 10.000-szer lehet írni és annyi neki...ennyi méréssel gyorsan tönkre mehet a panel, ha jól sejtem, tehát ezt is szeretném valahogy orvosolni...Ha van valakinek kedve hozzá, kérem nézze meg a programot és adjon némi útmutatást, ha nem nagy kérés!
Köszönöm előre is!

A kód teljes egészében:

Kód: Egész kijelölése

#include "LiquidCrystal.h"

int KF_sensorPin = A0; //kazan felso reszenek merese
int PF_sensorPin = A1; //puffer felso reszenek merese
int PA_sensorPin = A2; //puffer also reszenek merese
int puf_szivPin = 40; //puffer-kazan kozotti szivattyu laba
int rad_szivPin = 42; //radiator szivattyu laba

int TermostatPin = A8; //termosztat jele

int ciklus_hossz = 10;
int szam_atlag = 3;

float KF_osszeg = 0.0;
float KF_atlag = 0.0;
float PF_osszeg = 0.0;
float PF_atlag = 0.0;
float PA_osszeg = 0.0;
float PA_atlag = 0.0;
float TP_osszeg = 0.0;
float TP_atlag = 0.0;

float TP_voltage = 0.0;

//LCD
LiquidCrystal lcd(31, 33, 35, 37, 39, 41);
//RS(31), E(33), D4(35), D5(37), D6(39), D7(41)


void setup()
{
	lcd.begin(16, 2);
	pinMode(puf_szivPin, OUTPUT);
	pinMode(rad_szivPin, OUTPUT);
	digitalWrite(puf_szivPin, LOW);
	digitalWrite(rad_szivPin, LOW);
}
 
void loop()
{
	//elozo meres atlagainak kiszamitasa
	KF_atlag = (KF_osszeg / szam_atlag)+4;
	PF_atlag = (PF_osszeg / szam_atlag)+1;
	PA_atlag = (PA_osszeg / szam_atlag)-4;
	TP_atlag = (TP_osszeg / (ciklus_hossz));

	//digitalWrite(rad_szivPin,HIGH);
  
	//Futeskor es Puffer kozotti szivattyu vezerlese
	if(digitalRead(rad_szivPin) == LOW){
		if((TP_atlag > 4.9)&&(PF_atlag > 40.5)){
			digitalWrite(rad_szivPin, HIGH);
		}
	}else if((PF_atlag < 39.5)||(TP_atlag < 4.0)){
		digitalWrite(rad_szivPin, LOW);
	}
  
	//Kazan es Puffer kozotti szivattyu vezerlese
	if((digitalRead(puf_szivPin) == LOW)&&(KF_atlag > 50)){
		if(digitalRead(rad_szivPin) == HIGH){
			if(KF_atlag > PF_atlag+10){
				digitalWrite(puf_szivPin, HIGH);
			}
		}
		if(digitalRead(rad_szivPin) == LOW){
			if(KF_atlag > PA_atlag+10){
				digitalWrite(puf_szivPin, HIGH);
			}
		}    
	}
  
	if(digitalRead(puf_szivPin) == HIGH){
		if(digitalRead(rad_szivPin)== LOW){
			if(KF_atlag < PA_atlag+5){
				digitalWrite(puf_szivPin, LOW);
			}
		}else if((KF_atlag < 49)||(KF_atlag <= PF_atlag)){
			digitalWrite(puf_szivPin, LOW);
		}
	}else if((digitalRead(puf_szivPin) == LOW)&&(KF_atlag >= 70)){
		digitalWrite(puf_szivPin, HIGH);
	}
 
	//LCD-re kiiras
	//lcd.clear();
	lcd.setCursor(0,0);
	lcd.write("KF:");lcd.print(KF_atlag);
	lcd.write("PF:");lcd.print(PF_atlag);
	lcd.setCursor(0,1);
	lcd.print(TP_atlag);lcd.write(" V");  
	lcd.setCursor(8,1);
	lcd.write("PA:");lcd.print(PA_atlag);
  
	//Osszegek nullazasa
	KF_osszeg=0;
	PF_osszeg=0;
	PA_osszeg=0;
	TP_osszeg=0;

	//Atlag homersekletekhez szukseges osszegek szamitasa
  
	for(int i=0; i < ciklus_hossz; i++){
		int KF_reading = analogRead(KF_sensorPin);
		int PF_reading = analogRead(PF_sensorPin);
		int PA_reading = analogRead(PA_sensorPin);
		int TP_reading = analogRead(TermostatPin);
		
		float KF_voltage = KF_reading * 5.0 / 1024;
		float PF_voltage = PF_reading * 5.0 / 1024;
		float PA_voltage = PA_reading * 5.0 / 1024;
		TP_voltage = TP_reading * 5.0 / 1024;    

		float KF_temperatureC = (KF_voltage ) * 100 ;  
		float PF_temperatureC = (PF_voltage ) * 100 ;  
		float PA_temperatureC = (PA_voltage ) * 100 ;  

		if(i>(ciklus_hossz-szam_atlag-1))
		{
			KF_osszeg = KF_osszeg + KF_temperatureC;
			PF_osszeg = PF_osszeg + PF_temperatureC;
			PA_osszeg = PA_osszeg + PA_temperatureC;
		}	
		TP_osszeg = TP_osszeg + TP_voltage;

		//Kesleltetes
		delay(300);
	}
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: Robert »

Ugráló 5V termosztátjel : kapcsolási hiba!
A termosztát kontaktot ad: kell fűtés vagy sem.
Azaz mintha egy nyomógomb lenne.

A leírás alapján hiányzik a fel/lehúzó ellenállás, hogy korrekt kapcsoló legyen.

Műszaki kérdés:
- Miért LM35 amit hazsnálsz? Analóg jel és mindenféle zajt összeszed.
- DS18x20 miért nem volt jó (digitális hőmérő, 0,1fok pontos, egyszerű kezelni)?
- SD kártyára eseménylogolás miért nincs? A kiértékeléshez sokat segítene.
- LCD alatt LEDet raknék hogy melyik szivattyú mit csinál. Gyors leolvasást segíti
- Mi van ha áramszünet van? Mi van ha visszajön az áram?
- Hogyan finomhangolod?
- Vészüzemmód? Pl. leszakad valamelyik hőmérő...
- Mi van ha a szivattyú túlmelegszik, megszorul? Árammérés illetve teljesítményszabályozás hogyan működik?
- a vízhőfokokat mit mérsz? a termosztát mellett a fűtőtesteken hőfokszabályzós a szelep?
- Termosztát felülbírálása? Éjjeli/vészüzemmód/nem vagyunk úgyse otthon üzemmód


A 60+15 nap alatt tanfolyamra feliratkozás megvolt?
-> SRAM terület írásszáma végtelen.
-> Programmamória ~10.000x
-> EEPROM minden egyes celláka külön-külön 100.000 írás
-> Programozási alapelvek, adatgyűjtés ott van benne!
Avatar
ymola
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2015. szeptember 28. hétfő, 8:32

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: ymola »

Kedves Róbert!

Köszönöm a kérdéseket. Java része azért nincs, mert kezdő vagyok és sürgetett az idő.
A kapcsolási hibát jelzem a páromnak, mert azért ő a felelős.
Az áramkörben vannak ellenállások, azokat érted fel/lehúzó ellenállás alatt?
LM35 adott volt, nem én választottam. Meg fogom kérdezni a férjem, hogy miért és ha neki mindegy, akkor áttérünk DS18x20-ra, ha ezt javaslod.
SD kártyás logolás lesz a következő nagy falat, amit meg szeretnék oldani. LCD-n látjuk az aktuális hőmérsékleteket, könnyű így figyelni egyenlőre, hogy mikor is kellene bekapcsoljon/kikapcsoljon valamelyik szivattyú.
Ha áramszünet van, minden leáll, mert az arduino is kikapcsol, hálózatról kapja a tápot. A kazán pedig addig fűt, míg le nem ég a fa...valószínű ha visszajön az áram, egyből elkezd mérni és vezérelni.
Finomhangoláson mit értesz pontosan?
Sajnos vészüzemet még nem kezel a program, megvallom őszintén, hogy nem is gondoltam ebbe még bele...
Árammérés és teljesítményszabályozás sincsen, ezt a részt egyenlőre még nem is értem igazán...
A vízhőfokok: Kazán felső részén levő víz (KF_osszeg, KF_atlag), Puffer felső részén levő víz (PF_osszeg, PF_atlag) és Puffer alsó részén levő víz (PF_osszeg, PF_atlag). A termosztát mellett minden radiátoron manuálisan lehet állítani, hogy mennyi víz keringjen rajta, de az manuális. A termosztátot pedig szintén manuálisan állítgatjuk egyenlőre (éjjeli és nappali üzem).

60+15 tanfolyam tanulmányozása folyamatban...
Tényleg igyekszem mindent jól megírni és mindent megérteni, és előre is köszönöm, ha ebben a segítségetekre számíthatok...ha értetlenkedek, az azért van, mert az áramkör részéhez nem értek...de remélem belerázódok.
Azt megkérdezhetem még, hogy van-e olyan lehetőség/függvény, hogy pár másodpercig folyamatosan figyelek egy jelet és ha végig mondjuk 5V, akkor true, egyébként false eredményt ad vissza?
Avatar
ymola
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2015. szeptember 28. hétfő, 8:32

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: ymola »

Van pár kérdésem még, amit feltettem, abból a legfontosabb számomra ez volt:
"Azt megkérdezhetem még, hogy van-e olyan lehetőség/függvény, hogy pár másodpercig folyamatosan figyelek egy jelet és ha végig mondjuk 5V, akkor true, egyébként false eredményt ad vissza?"
Ha másra nem is, de erre szeretnék kapni választ.
Köszönöm előre is!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: Robert »

Az áramkörben vannak ellenállások, azokat érted fel/lehúzó ellenállás alatt?
Kapcsolási rajz nélküli válasz: Talán, esetleg, az is lehet.....
LM35 adott volt, nem én választottam. Meg fogom kérdezni a férjem, hogy miért és ha neki mindegy, akkor áttérünk DS18x20-ra, ha ezt javaslod.
Ha működik az LM35, akkor maradjon. Csak fura volt látni.
Finomhangoláson mit értesz pontosan?
- Be/eltáv. hőfok,
-visszatérő ág hőfok,
- bufferelés szabályai,
- melyik fűtőkör preferráltabb (mikor?),
- fűtök vagy puffert melegítek,
- padlófűtés vagy radiátor...
Árammérés és teljesítményszabályozás sincsen, ezt a részt egyenlőre még nem is értem igazán...
Keringtetőrendszer költsége számolható és/vagy fűtőkör hatásfokának monitorozása (hasznos, vesztességhő...)
Azt megkérdezhetem még, hogy van-e olyan lehetőség/függvény, hogy pár másodpercig folyamatosan figyelek egy jelet és ha végig mondjuk 5V, akkor true, egyébként false eredményt ad vissza?
Nincs. Le kell programozni.
Pszeudokód:

Kód: Egész kijelölése

mi_a_jel=0;
do
if bemenet=LOW LEDen jelzem, hogy OK, figyelek
if bemenet = High -> felugrott -> mi_a_jel=1 , exit while
while millis eltelt 5sec
print mi_a_jel
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: csegebiga »

Azt megkérdezhetem még, hogy van-e olyan lehetőség/függvény, hogy pár másodpercig folyamatosan figyelek egy jelet és ha végig mondjuk 5V, akkor true, egyébként false eredményt ad vissza?
szia!
természetesen van.
csak meg kell írnod :)

többféle megoldást is választhatsz
első körben nézd át itt a 60 napos háifeladatok forumból közül a prell szekciót
a probléma hasonló, csak az időfaktor más kissé.
nálad nem várakozhat a program perceket egy helyben ácsorogva, ezért az érték eltárolásos, idő múlás figyelős módszert javasolnám
thehát valahogy így (folyamatábra helyett)
(két függvénybe szétdobva)

Kód: Egész kijelölése

figyelés indul{
 kezdő időpont  eltárolása, 
 kezdő érték eltárolása
 mérési intervallum beállítása
}

figyelő{
 ha idő < kezdő időpont+figyelési intervallum{
  // még nem telt le a mérési intervallum (5 perc)
  bekérek egy értéket a szenzortól
  megvizsgálom, hogy benne van e a tűréshatárban (pl +-10%)
     ha igen, visszatérek egy minden ok jellel, 
     ha nem, resetelem a mérést,(figyelés indul) és visszatérek egy hibajellel
  }
 ha letellt az idő, és mindig ok volt a mérés, visszatérek egy mérés vége, minden ok jellel
}
ez pl nálad úgy működne, hogy a setup()ban indítod a figyelés indul függvénnyel a méréseket,
a loop()ban meghívódna a figyelő minden körben, és nézed a visszatérő értékét
ha megvan a mérés vége és minden ok, akkor volt eredményes az 5percig 5V vizsgálat.
ha az 5V jobban elkóborol a vizsgált alatt, mint a tűréshatár, a vizsgálati idő újraindul, és hibajelet küld
(meg lehet úgy is csinálni, hogy 5 percig figyelje bármelyik állapotát és akkor szóljon, ha 5 perce stabil)

de ez csak egy variáció (és nem biztos, hogy néked a legmegfelelőbb)

felhúzó- lehúzó ellenállásról röviden:
egy bemenet legtöbbször nagy bemenő impedanciával(egyszerűsítve ellenállással) rendelkezik, hogy ne terhelje azt a kimenetet, amit rákötöttek.(vagyis ne függjön a kimenet értéke a rákötött bemenetek számától)
ez a nagyimpedanciás bemenet, ha szabadon lóg, úgy működik, mint egy detektoros rádióvevő plusz egy antenna. összeszed mindenféle jelet a levegőből.
(ez ugyanaz a zaj, mint a tv-k hangyafoci jele)
mivel mi nem a véletlenszerű zajjal szeretnénk dolgozni, ezért a bemenetet egy ellenállással vagy a tápfeszültség felé (felhúzó), vagy a 0V felé (lehúzó) bekötjük, így elvezetjük a "lefolyóba".
a termosztátod esetében a szerkezet egy záróérintkezőt mutat a külvilág felé
ha párod úgy döntött, hogy a termosztát 5V-ot adjon ki a bekapcsolt állapotban, akkor valahogy így néz ki a bekötés:
5V rákötve a termosztát egyik sarkára, a másik sarok (kapcsolt jel) megy az áramkör bemenetére, ÉS egy a föld felé bekötött lehúzó ellenállás lábára
ez esetben, ha bekapcsol a termosztát, a bemenet 5v-ra kerül, (high)
kikapcsolt állapotban pedig a lehúzó ellenálláson keresztül a földre (low)
ha nincs lehúzó ellenállásod, akkor a nyitott érintkezőtől a bemenetig az egész vezeték egy nagy antennaként fog működni
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: csegebiga »

OFF
ez az átka, ha valaki lassan gépel:
megelőzik :)
ON
Avatar
ymola
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2015. szeptember 28. hétfő, 8:32

Re: Kazán szivattyúk vezérlése

Hozzászólás Szerző: ymola »

Bocsánat a késői válaszért, de munka, gyermek és háztartás mellett sajnos nem volt eddig időm jelentkezni. Köszönöm szépen a válaszokat, sokat segített...ahogy látom mintavételezések sorával lehet megoldani, ez menni fog. Most átlagolással oldottam meg, eddig úgy tűnik, így is működik.
Finomhangolás a szükséges mértékben megvan, a kezdeti finomhangolások szerepelnek is a feltöltött kódban:
- Be/eltáv. hőfok, - puffer felső részén mért hő megy a radiátorokba, ha a szabályzás kéri, puffer alsót és kazán hőt nézünk még a szabályozáshoz
- visszatérő ág hőfok, - Visszatérő ágat nem mérünk, mert nincs értelme fatüzelés esetén háromállású szeleppel keverni a visszatérővel a kimenő víz hőmérsékletét.
- bufferelés szabályai, - megoldott
- melyik fűtőkör preferráltabb (mikor?), - szabályozva
- fűtök vagy puffert melegítek, - szabályozva
- padlófűtés vagy radiátor... - csak radiátor van
A lehúzó ellenállás tiszta, köszönöm!
Válasz küldése