Praćenje stanja i regulacija u sustavu centralnog grijanja

Kao nastavak serije članaka o sustavu centralnog grijanja opisanom ovdje, sljedeći je korak bio složiti nekakav način praćenja temperatura u cijelome sustavu na daljinu, da ne moram svako malo trčati u podrum i gledati što se događa. Kako sam se u to vrijeme počeo baviti Arduinom, odabir je pao na Atmelove mikrokontrolere zbog popularnosti i činjenice da vrlo lako možete naći pomoć s bilo kojom idejom. Cijeli sustav ću uglavnom opisati tekstualno i pustiti vas da sami istražite detaljnije sheme spajanja, ne samo zato što sam prelijen crtati sheme.

1. Praćenje i snimanje temperatura

Kako mi je trebalo više od 6 temperaturnih senzora u sustavu, odabir je pao na jeftine Dallasove DS18B20 digitalne One-wire senzore koji omogućuju spajanje “velikog broja” senzora na samo jednu (1) ulazno-izlaznu nožicu mikrokontrolera, te podržavaju temperature do +125 stupnjeva. Za te senzore, naravno, postoji i kvalitetna podrška za Arduino. Postavio sam 8 senzora – 4 komada na spremnik na četiri razine, jedan na odlaz u radijatore, dva na povrat iz radijatora (ispred i iza miš-ventila), te jedan na mjesto za temperaturni osjetnik u kotlu. Podatke sam odlučio logirati na server u LAN-u i za to mi je trebao ethernet modul. Prvih godinu dana, dok je cijeli sklop bio na pravoj Arduino pločici, koristio sam skupi Arduino Ethernet Shield s Wiznet 5100 čipom, ali za trajniju primjenu preradio sam kod i prešao na mnogo jeftinije ethernet module bazirane na Microchipovom ENC28J60 čipu (trenutno gotovi moduli koštaju ispod 4 dolara). Potonji su također izvrsno neslužbeno podržani kroz EtherCard library. Program je svakih desetak sekundi očitavao temperature sa svih osam senzora i serveru slao HTTP GET zahtjev u obliku:

 http://192.168.1.10/tlog/post.php?t0=57.56&t1=43.13&t2=34.31&t3=30.69&t4=56.13&t5=26.31&6=60.13&t7=34.31

PHP skripta post.php te podatke potom sprema u MySQL bazu. Za prikaz podataka koristim linijske grafove pomoću Google Charts , što izgleda ovako: glinechart

2. Upravljanje optočnom crpkom

 Kad već u svakom trenutku znam kolika je temperatura na kojem mjestu u sustavu, zaključio sam da bi bilo zgodno uključiti optočnu crpku čim je spremnik zadovoljavajuće pun (npr. na četvrtinu), te isključiti je čim se dogodi da se vatra u kotlu ne može održavati minimalnu razinu temperature. Iako mi je za to trebao samo jedan relej, kupio sam shield s 4 releja odvojena optokaplerima. Taj detalj s optokaplerima je prilično važan jer releji prekidaju izmjenične motore i nakon što je napravljena finalna tiskana pločica za gotovi sklop bez električkog odvajanja, cijela stvar je misteriozno prestajala raditi kod uključivanja i isključivanja motora i nijedna količina TVS dioda, filtera i koječega nije uspjela potpuno elimitirati sve probleme.

relay-shield-4

Vratimo se na releje. Za crpku je dovoljan jedan, dva sam planirao za regulaciju, jedan je ostao neiskorišten. Kada bi crpku postavio u stanje “uključeno”, pumpa bi se uključila samo ako je temperatura na senzoru na vrhu spremnika preko 60 stupnjeva, te isključila ako bi temperatura pala ispod te vrijednosti (da očuvam uslojenost vruće vode u spremniku i usporim pražnjenje koje je stabilnije prirodnim optokom bez crpke).

3. Regulacija

Ovaj dio je bio nešto složeniji, kako s električke i elektroničke strane, tako i s programerske. Odlučio sam upravljati miješajućim ventilom kako bih održavao stalnu temperaturu odlaza, a samim time i stalnu temperaturu povrata. Iskreno, u ovome dijelu nisam imao pojma što i kako trebam napraviti, ali namjeravao sam eksperimentirati. Nabavio sam “glupi” servo-motor prikladan za moj miješajući ventil.

actuator_label actuator

Kao što sama etiketa kaže, motor nema mogućnost automatskog upravljanja u koracima ili slanja na određeni položaj, već radi na 230V i ima samo tri voda, dvije faze za dva smjera vrtnje, te jednu nulu. Poznato je jedino da put od jednog do drugog krajnjeg položaja traje cca 140 sekundi.

Izmjerio sam preciznije koliki je hod servo motora, to podijelio s 10 i dobio 10 koraka u koji motor mogu postaviti. Naravno, bez načina dobivanja povratne informacije je li motor doista u određenom položaju ovo bilo iznimno netočno i neprecizno, ali upotrebljivo ako se oslonite na granične prekidače koji se nalaze u servu. Pretpostavljeni položaj servo motora upisivao sam u eeprom kako bih i nakon reseta mikrokontrolera znao gdje se nalazi.

Regulacija je aktivirala svakih nekoliko minuta, uspoređivala je temperature i po potrebi otvarala i zatvarala ventil.

4. Impulsno upravljanje optočnom crpkom

Prije svega, moram napomenuti da je moja optočna crpka kupljena 1986. godine i svojoj originalnoj ambalaži je stajala do 2010. kada je montirana, što znači da nije baš najfunkcionalnija. I ona je, naravno, “glupa” jer ima samo tri brzine rada koje se biraju sklopkom i nema regulaciju brzine. Regulacija brzine vrtnje bi mi bila korisna jer se većina problema opisana u prethodnim člancima događala zbog prebrzog protoka. Problem je postao još gori nakon godinu dana kada mi je crpka jednostavno prestala raditi na najnižoj brzini, pa sam je morao prebaciti na srednju brzinu.

Tada sam odlučio uvesti neku vrstu modulacije širinom impulsa za optočnu crpku, ali u jako sporoj varijanti – konkretno, crpka trenutno radi 30 sekundi, što je dovoljno da napuni radijatore vrućom vodom, i nakon toga miruje 60 sekundi, što radijatorima daje priliku da ohlade vodu prije no što je vrate u spremnik. Graf sustava u tom slučaju izgleda ovako:

pulse2

Miješajući ventil je otvoren na 80-ak posto što objašnjava razliku između temperature povrata (tamnoplava) i povrata u spremnik iza ventila (svjetloplava). U radijatore odlazi voda temperature oko 60 stupnjeva, a vraća se znatno hladnija.  Ovaj sustav koristim već drugu sezonu i do sada mi ni jednom nije zatrebalo stalno uključiti crpku.

5. Kôd i shema

Kao što sam već napomenuo, finalni proizvod u obliku tiskane pločice s napajanjem, relejima, OneWire sabirnicom, serijskim LCD-om, Ethernet modulom, pa čak i RTC čipom (DS1307) pokazao se nepouzdanijim od prototipa pobockanom na Arduino pločici, tako da vam shemu ne mogu dati. Nemojte napraviti istu pogrešku kao i ja – releje OBAVEZNO optički odvojite od MCU-a, a ako u blizini imate četiri izmjenična motora kao u mom slučaju (ventilator u kotlu, optočna crpka za radijatore, optočna crpka u punjaču spremnika, te servo-motor za mišventil), računajte da će sve otići dovraga ako ih zaboravite.

Izvorni kôd u Arduinu, iskomentiran na engleskom jeziku, naći ćete na Githubu. Autor se odriče bilo kakve odgovornosti za korištenje tog koda, niti daje ikakva jamstva o njegovoj ispravnosti ili prikladnosti za bilo kakvu namjenu. Lako moguće da se i neće dati kompilirati, ali možda u njemu nađete nešto što će vam pomoći u radu.