Minimalista hőmérő, fűtés és hűtés vezérlés Atmel ATTINY13 mikrokontrollerrel (5 diódás érzékelővel)Az akvárium fűtésének vezérlése kényes pont...(ok:). Adva volt a már korábban elkészített 12 voltos (max. 24V - a lényeg, hogy ne rázzon stb.) fűtő, amihez egy megbízható, olcsó vezérlést próbáltam kreálni.. lássuk mi jött össze:
tulajdonságok, elvárások
- kezelőgombok mellőzése: ne lehessen véletlen elállítani... tapasztalat, ha egy adott akváriumhoz a hőfokot egyszer belövi az ember, akkor többet nem kell hozzányúlni
- kijelző egyszerűsítése, azaz 1 LED-re redukálása, ami beállítás után - ügyesebbeknek előbb - el is hagyható (nincs fényszennyezés és energiatakarékos is:): az aktuális hőfokot kivillogja ill. ha hiba keletkezne azt is jelzi
- egyszerű, olcsó, diódás hőérzékelő: akváriumi hőmérséklet tartományon belül pontos, meghibásodása könnyen észlelhető
- hűtést is lehet vele kapcsolni: miért is ne....
- fűtés teljesítményének szabályozhatósága: így kisebb akváriumhoz is használhatunk nagyobb teljesítményű fűtőt anélkül, hogy a halak egészségét veszélyeztetnénk a gyors felfűtéssel
hozzávalók
Hozzávalók:
- érzékelő: 5db dióda (pl. 1N4148, lehet más hasonló is), üveg szemcseppentő (patikában beszerezhető)
- ész: Atmel ATTINY13 mikrokontroller (lehet okosabb típus is) felprogramozva, 8 lábú IC foglalattal
- hőfok- és hibajelző: 1db LED és 1db 10 KOhm-os ellenállás (elhagyható ha van külön hőmérőnk és bízunk a kütyüben)
- 12 Voltos üzemeléshez: 78L05 (5 Voltos stab. IC)
- 1db 100 nF kondenzátor (zavarszűrés) és 1db 10 KOhm-os ellenállás
- egy kevés szilikon ragasztó
- valamilyen doboz és vezeték (ha az érzékelő nagyobb távolságra lesz a kütyütől, akkor használj árnyékolt kábelt)
működés röviden
A hőérzékelő jelét (10 mV/Celsius) feldolgozza a kütyü ADC (10 bites) bemenete, melyet 2-es osztás és egy konstansból (ezzel lehet a hőérzékelőt pontosra beállítani; konstans neve Const Korrekcio) történő kivonás (dióda negatív karakterisztikáját fordítja meg) után Celsiusban kapunk meg (Hőfok). Ezt hasonlítja össze az általunk megadott Hofokkapcs és Huteskapcs értékekkel:
- ha kisebb mint a Hofokkapcs akkor bekapcsolja a fűtés kimenetet, ha nagyobb akkor lekapcsolja azt;
- ha nagyobb vagy egyenlő mint a Huteskapcs akkor bekapcsolja a hűtés kimenetet, ha kisebb akkor lekapcsolja azt;
- ha az érzékelő leszakadna, vagy meghibásodás miatt az akváriumi/tavi élettel összeegyeztethetetlen értéket mérne (3 Celsius fok alatt és 35 Celsius felett, szükség esetén ezek értéke is módosítható), akkor is lekapcsolja a fűtést/hűtést és folytonos hibajelzést ad a LED-en. Ellenkező esetben másodpercenként felvillanva kijelzi az aktuális hőmérsékletet, pl. 25 Celsiust eképpen: 2 villogás (ezek jelzik a tízes jegyeket) - majd 3 másodperc szünet - 5 villogás (ezek jelzik az egyeseket) - majd tíz másodperc szünet....... és kezdődik elölről a menet:)
A fűtőtest teljesítményét lehet korlátozni a Futoteljesitmeny (nem futóteljesítmény:) érték megadásával:
0-255-ig: 0 a 0%-nak (gyakorlatilag nincs fűtés), 255 a 100%-nak (teljes fűtőteljesítmény) felel meg. Ha a fűtés bekapcsol akkor az fokozatosan (kb. 2másodperc alatt) éri el 0-tól a beállított értékig a teljesítményét - ha lekapcsol akkor fordítva.
256: Teljes fűtőteljesítmény, de a be és kikapcsolás fokozatmentes (ez akkor lehet előny ha más típusú pl. bolti fűtőt vezérlünk és ezért relés a kapcsoló kimenetünk)
Az alább látható (program forrásából kiemelt) és fentebb említett értékeket szabad változtatni:
kapcsolási rajzok
A kütyü avagy minimalista akváriumi hőmérő, fűtés- és hűtéskapcsoló:
Fűtés (a már korábban megépített) és hűtés (a még meg nem épített, egyelőre nincs rá szükség..):
Relés kapcsolóelem rajza, más típusú fűtő- és hűtőtesthez történő illesztés estén (NE FELEDD!! Ebben az esetben a fűtőteljesítmény értéke 256 legyen):
elkészítés
Érzékelő:
Forraszd össze a diódákat a vezetékkel, majd helyezd a sapkájától megfosztott cseppentőbe majdnem ütközésig. Kend be szilikonragasztóval a vezeték felőli részt, majd tapadj 'arcoddal' a cseppentő másik végére és szívd meg úgy, hogy a ragasztó egyre beljebb csússzon - ismételd míg a megfelelő mennyiséget be nem szívtad... Ha megvagy, akkor zárd le ragasztóval a cseppentő másik végét és várj az előírt száradásig.
Kütyü:
Forraszd össze az alkatrészeket (ha lehet a fenti rajz szerint:). Építsd félig a dobozába - nálam ez egy 'telefonelosztó, beltéri, fali, külső' (no ebből nehéz lenne kitalálni, ezért mellékelek egy képet róla).
Élesztés, kalibrálás:
Mérd meg a szűkebben vett környezeted (szobád vagy ahol építed a kütyüt:) hőmérsékletét és jegyezd is meg vagy fel (továbbiakban HŐFOK; tételezzük fel, hogy pl. 22 Celsius fokot mértél). Égesd be a programot úgy az ATTINY13-ba (továbbiakban TINY), hogy a fűtés kapcsolási értéket magasabbra állítsd 3 fokkal mint a HŐFOK (Hofokkapcs = 25). Helyezd be a TINYt majd kapcsold be a kütyüt és várj... Ha minden oké, akkor 10 másodperc után villog vagy folyamatosan világít a LED - ha nem akkor keresd meg a hibát ami bárhol lehet (könnyebb leírni mint megtalálni).
Ha folyamatosan világít az azt jelenti hogy vagy 4 Celsius alattit mér vagy 35 Celsius felettit. Állítsd a Const Korrekcio értékét előbb le, majd fel irányba (5 fokonként 5 lépésben, nyilván újrafordítás és TINY égetés minden változtatásnál) amíg a villogás elő nem jön - ha így sem jársz sikerrel, akkor az érzékelő körben lehet valami hiba vagy a TINY rossz.
Ha villog, várj 5-10 hőfokkijelzést majd olvasd le a legutóbbit és vond ki a HŐFOK értékből - ha nulla az eredmény, akkor nyert ügyed van, azaz nem kell kalibrálni - ha nem nulla, akkor add hozzá a Const Korrekcio értékhez (újrafordítás, TINY égetés) és kész is a kalibrálás.
Példák (HOFOK 22 Celsius, Const Korrekcio = 297):
- villogott érték pl. 19, akkor 22-19 = 3, tehát a Const Korrekcio = 300
- villogott érték pl. 27, akkor 22-27 = -5, tehát a Const Korrekcio = 292
remélem érthető ....
Tesztelés/véglegesítés:
Mivel a Hofokkapcs értékét a HOFOK felé állítottuk 3 fokkal, így egyszerűen kezünkbe véve az érzékelőt az felmelegszik és előbb lekapcsolja a fűtés kapcsolójelet (példa szerint 25 foknál, TINY 5-ös láb), majd bekapcsolja a hűtés kapcsolójelet (31 foknál, TINY 3-as láb). Ha kellően meleg vagy, akkor 36 fok felett folytonos hibajelzést ad.
Véglegesítéshez döntsük el, hogy mekkora teljesítménnyel akarjuk járatni a fűtőtestet (Futoteljesitmeny), továbbá a fűtés lekapcsolási (Hofokkapcs) és a hűtés felkapcsolási (Huteskapcs) értékét. Írjuk át a programban, fordítsuk le, majd égessük be a TINY-be és jó nagy betűkkel írjuk fel a kütyü dobozára a korrekciós (Const Korrekcio) értékkel együtt. Pár napig teszteljük (pl. egy vödör vízben) a rendszert, majd építsük be végleges helyére..... remélhetőleg többet nem kell hozzányúlnunk.
program
A program Basic nyelven íródott - sok magyarázó szöveggel - (könnyebb érthetőség, módosíthatóság miatt) melyet a Bascom-avr (ingyenesen letölthető/használható demó) programmal fordíthatunk le és egy egyszerű házilag is megépíthető programozóval égethetünk be a kontrollerbe (részletesebb infó a http://avr.tavir.hu oldalon vagy gúgliban).
A program forráskódja: minimalista_akvarium_homero_futes_hutes_kapcsolo.bas letölthető ill. megtekinthető:
'minimalista akváriumi fűtés(PWM)/hűtés kapcsoló és hőmérő 5 diódás érzékelővel
$regfile = "ATtiny13.dat"
$crystal = 9600000 '9.6 MHz belső oszci. 8-as osztás nélkül.
$prog &HFF , &H3A , &HFF , &H00 'generated. Take care that the chip supports all fuse bytes.
'konfigok
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1 'időzítő PWM beállítása.
Tccr0a = &B10100001 ' PWM A beállítása
Set Ddrb.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC beállítása...
Config Portb.2 = Input 'adc1 - hőérzékelő IC 7-es láb
Config Portb.0 = Output 'PWM kapcsolt kimenet (ez kapcsolja a fűtőt) IC 5-ös láb
Config Portb.3 = Output 'ledes jelző kimenet IC 2-es láb
Config Portb.4 = Output 'kapcsolt kimenet (ez kapcsolja a hűtőegységet) IC 3-as láb
'változók
Dim Hofok As Word 'számított hőfok celsius
Dim Hofokkapcs As Byte 'ennél a hőfoknál kapcsol ki a fűtés
Dim Fut As Bit 'fűtést jelző bit
Dim Huteskapcs As Byte 'ennél a hőfoknál kapcsol be a hűtés
Dim Futoteljesitmeny As Word 'PWM értéke, azaz a fűtő teljesítménye
Dim N As Byte 'villogás szám
Dim X As Byte 'segédváltozó
'kezdőértékek megadása
Enable Interrupts ' megszakítások engedélyezése
Enable Timer0 ' Timer0 engedélyezése
Start Adc ' ADC índítása
Start Timer0 ' Timer0 indítása
Ocr0a = 0 'PWM érték beállítása azaz nincs fűtés
Futoteljesitmeny = 255 'fűtő teljesítménye (0-255), fel és lekapcsolás átmenettel
'0 nem fűt, 128 fél teljesítménnyel fűt,
'255 teljes erővel fűt ,
'ha 256 akkor teljes erővel fűt, fel és lekapcsolás átmenet nélküli
Const Korrekcio = 297 '5 diódás érzékelő korrekciós értéke
Hofokkapcs = 22 'ennél a hőfoknál kapcsol ki a fűtés
Huteskapcs = 31 'ennél a hőfoknál kapcsol be a hűtés
Reset Portb.4 'csak a biztonság kedvéért
Fut = 0 'csak a biztonság kedvéért
' főciklus
Do
Wait 10
'hőmérséklet lekérdezése
Hofok = Getadc(1) 'analóg feszültség lekérdezés
Shift Hofok , Right 'átszámítás celsiusra: 2-vel osztás
If Hofok <= Korrekcio Then Hofok = Korrekcio - Hofok 'szakadás ellenőrzés és konstansból kivonás
'fűtés/hűtés esedékesség eldöntése
'ill. ha szakadt a hőérzékelő akkor is lekapcsolja a fűtést/hűtést
If Fut = 0 And Hofok < Hofokkapcs And Hofok >= 1 Then
If Futoteljesitmeny > 255 Then
Ocr0a = 255 'fűtő bekapcsol
Else
For X = 0 To Futoteljesitmeny
Ocr0a = X 'fűtő fokozatosan bekapcsol
Waitms 20
Next
End If
Fut = 1
End If
If Fut = 1 And Hofok >= Hofokkapcs Then
If Futoteljesitmeny > 255 Then
Ocr0a = 0 'fűtő kikapcsol
Else
For X = Futoteljesitmeny To 0 Step -1
Ocr0a = X 'fűtő fokozatosan kikapcsol
Waitms 20
Next
End If
Fut = 0
End If
If Hofok >= Huteskapcs And Hofok < 50 Then Set Portb.4 Else Reset Portb.4
'életjel küldése a működésről és a mért hőfok értékének kijelzése is egyben
N = 0
If Hofok > 29 And Hofok < 36 Then
N = 3
Gosub Villog
N = Hofok - 30
End If
If Hofok > 19 And Hofok < 30 Then
N = 2
Gosub Villog
N = Hofok - 20
End If
If Hofok > 9 And Hofok < 20 Then
N = 1
Gosub Villog
N = Hofok - 10
End If
If Hofok > 3 And Hofok < 10 Then N = Hofok
Gosub Villog
Loop
End
Villog:
If N = 0 Then 'ha a hőfokérték akváriumi értékhatáron (4-35 Celsius) kívüli
Set Portb.3 'akkor (folytonos) hibajelzés
Return
Else
Reset Portb.3
End If
Wait 2
Do
Set Portb.3
Waitms 500
Reset Portb.3
Waitms 500
Decr N
Loop Until N = 0
Return
|