První krůčky
Zde popisuji svoje pokusy o vytvoreni regulace pro rizeni domaciho slolarniho systemu a topeni.
Cilem je vytvoreni digitalni regulace, ktera by byla pouzitelna i pro jine ucely domaci automatizace
nez je jen regulace topeni.
Na pocatku jsem mnel nasledujici pozadavky:
- Co nejmensi prikon.
- Moznost ethrnetu a owladani pres web.
- Cenova dostupnost
- univerzalnost
Rozhodl jsem se pro platformu firmy DIGI (www.digi.com) a jejich modul DIGI Connect ME 9210.
To proto ze ve sve dobe (r. 2010) to bylo to nejlevnejsi a nejdostupnejsi co jsem nasel.
Jde o modul s ARM procesorem 75MHz, 8MB rom a 16MB ram s moznosti behu operacniho systemu LINUX.
Modul je pripraven k osazeni do desky plosneho spoje.
Popis regulace solarniho systemu a topeni pro rodinny dum:
Solarni system se sklada ze dvou sestav slunecnich teplovodnich kolektoru jedna orientovana na JV
a druha na JZ, bojleru na teplou vodu 200l, akumulacni nadoby 800l. K topeni je k dispozici plynovy kotel
a kotel na tuha paliva.
Slunickem se ohriva boiler (tepla uzitkova voda) a akumuacni nadoba. Boiler muze byt take horivam
plynovym kotlem, nebo pomoci akumulacni nadoby.
Topeni muze byt realizovano bud pomoci plynoveho kotle , nebo akumulacni nadoby. Akumulacni nadoba
muze byt ohrivana bud slunecni energii nebo kotlem na tuha paliva.
V teto konfiguraci vznika pomerne mnoho kombinaci zapojeni a regulace cele soustavy neni nikterak jednoducha.
Abych si situaci zjednodusil rozdelil jsem regulaci na jednotlive dilci regulacni celky, jako napr. regulace solrniho okruhu,
ohrev TUV, kotel na tuha paliva, dohrev akumulacni nodoby, vychlazovani akumulacni nadoby, topeni, cirkulace TUV, topeni.
Pro samotne ovladni jsem zvolil 1-wire sbernici pro mereni teploty cidla dallas MAXIM 18B20, a pro ovladani elektroventilu
relatkova pole taktez ovladane pres 1-wire sbernici.
HW:
pro
jednoduchou montaz jsem zvolil krabicky na dim listu do jedne jsem
umistil ridici modul jehoz jadro tvori zminovany modul DIGI
connect me9210 a do dalsich jsem umistil relatkova pole.
Ridici modul:
K
modulu digi connect me9210 jsem pripojil prevodnik na rs232 (seriovy
port), jeden I2C 8bit expander portu pro ovladani tlacitek,
bzucaku a jedno rele. Druhy 8bit I2C expander portu jsem pouzil pro ovladani alfanumerickeho displaye. Na I2C jsem jeste napojil
hodiny
relaneho casu zalohovane baterii a prevodnik z I2C na 1-wire
sbernici.Na desku jsem rovnez umistil jednoduche stabilizatory
napeti
na 5 a 3,3V (jak se pozdeji ukazalo moc vhodne to neni, protoze
jednoduche stabilizatory srazeji napeti prevodem do tepla,
a pri vyssich proudech se docela zahrivaji, lepsi ale slozitejsi by byl nejaky spinany regulator).
Vyjimecne je to v tom, ze veskere zapojeni je na desce jednostrannneho plosneho spoje.
Modul 1-wire releove pole 6xrele + 2x input
releove pole s pouzitim obvodu DS2408 (8bit expander pro 1-wire sbernici).
6bitu je pouzito na ovladani relatek a zbyle dva je mozne pouzivat jako digitalni vstup.
Zajimavosti zapojeni ze ze i prvnich 6 bitu lze pouzit take i jako vstup avsak na jejich stav reagujou pripojena relatka, tj
relatka lze ovladat TTL urovni na jednostlivych vstupech (0- rele sepne) nebo pomoci 1-wire sbernice.
Ve vychozim stavu jsou relatka vypla. Relatka snessou 8A/250V avsak v seplem stavu maji pomerne velky odber
0.5W jedno. K modul je potreba dovest napajeni 5V pri vsech sesti seplych relatkach ma modul prikon cca 3 W.
Poznamka:
ridici modul obsahuje stabilizator 5V/1A. Toto napeti je pres pojistu
vyvedeno na svorkovnici a urceno i pro napajeni relatkovych poli.
Ridici
modul tedy bezpecne utahne napajeni pouze jedno relatkoveho pole. Muj
system obsahuje tri relakova pole (3x6=18 relatek), tudiz si musim
zajitit dodatecny zdroj.SW:
BASH
prvni krok bylo zprovozneni HW v linuxu. I2C sbernice stejne jako 1-wire sbernice nebyla problem stacilo vybrat podporu v jadre.
Stejne tak I2C expandery portu. Trochu potrapily hodiny relaneho casu (neprisel jsem na to jak linuxovemu modulu ric
na jake I2C adrese se hodiny nalezaji, vyresil rucnim zasahem do zdrojovych kodu linuxoveho jadra. S teplotnimi cidly DS18B20
nebyly v linuxovem jadre problemy, zato podporu pro expander portu DS2408 a DS2413 jsem v jadre vubec nenasel, proto jsem
si
pro tyto obvody musel napsat vlastni ovladace. Jinou moznosti by bylo
pouzit projekt 1-wire, jenze po prelozeni zdrojovych kodu
byl vysdek
tak velky, ze by se do omezene pameti modulu nevesel, tim netvrdim, ze
by to neslo nejak osekat, ale nemnel jsem naladu se
v cizich zdrojacich hrabat.
druhy krok -napsani samotneho programu pro regulaci.
Abych menl vyvoj co nejjednodusi napsal jsem vse v programovacim jazyce prikazoveho radku (bash). Jednotlive casti regulace
jsem
naprogramoval jako samostane programy, veskere parametry se ukladaji do
konfiguracnich souboru odkud si je program za letu cte.
stejne tak je zde zte i zapisuje webova zprava. Pri ladeni po jednotlivych programech vse krasne fungovalo, ale kdyz jsem
spustil
vse na jenou, tak nestacila pamet ani rychlost procesoru. Zkratka
provadeni prikazu z davky (bataku je systemove hodne narocne
z kazdym
rikazem se spusti a ukoncuje nejaky program (co prikaz to samostany
program a to si sebou v linuxu bere vysokou reziji).
Resenim je vse prepsat nejlepe do C jako jeden jediny program.
No tim jsem zatim skoncil momentalne se bashove programky snazim rozumne prepsat do C.
C
Po
nekolika mesicich jsem regulaci uspesne prepsal do C. Program ted
spotrebuje tak cca 20% casu procesoru, takze program se chova velice
svizne.
Pro zajimavost jednotlive regulace jsem rozdelil do
samostatnych vlaken. O web se stara somostany webovy server s cgi
rozhranim. Cele program po prelozeni
ma cca 400KB. Oproti BASHove
verzi ma mnoho vychytavek, napr. konfiguraci cidel pres web, pri mreni
teplot ukladni max., min, a prumernych hodnot, moznost zapnot
logovani,
u swithu citace poctu prepnuti, atd. .vis. screenshoty. Nejvice
limitujicim faktorem je pocet teplotnich cidel, protoze precteni jejich
teplty trva cca 3/4 sec. a po tu dobu je zaplokovana jakakoliv dalsi komunikace po 1w sbernici.