Azt terveztem, hogy mérni fogom az elektromos bojlerünk víz hőmérsékletét egy Arduino-val és a mért adatokat egy diagramon meg tudom majd nézni. Csak azért gondoltam ezt, mert kíváncsi voltam, mennyi idő alatt hány fokot hűl vagy melegszik a víz hőmérséklete.
Sajnos a bojleren nincsen olyan pont ahová a termisztort (Egy olyan ellenállás aminek a hőmérséklettől függően változik az értéke. Én az enyémet a laptop akkumulátorból szedtem ki) ragaszthattam volna, hogy mérjem a hőmérsékletet. A bojler teljesen körbe van szigetelve és az alsó részén pedig a fém lap amire a fűtőszál is van erősítve jóval hidegebb mint a víz. Sajnos egyelőre ezt a projektet el kell halasszam. De az Arduino áramkört megcsináltam, megvan a kód is hozzá, azt megosztom az olvasóimmal. A kód tetszőleges időközönként méri a hőmérsékletet, majd azt a belső memóriájában eltárolja. Sajnos a felhasználható memória mérete az én Arduinomon 1024 Byte, így csak 1024 darab 0-256 közötti számot tud tárolni. De ha fél percenként veszek csak mintát így is 8 órányi adatot tud tárolni. Ha kikapcsoljuk az Arduino-t az adatok akkor is tárolva maradnak.
Egy 10000 OHM-os ellenállás és egy termisztor kell csak hozzá. A képen látszik, hogyan kell bekötni.
A termisztorra hosszabb kábelt forrasztottam az egyszerűbb kezelhetőség miatt:
A hőmérséklet mérő:
#include <EEPROM.h> // itt kell megadni, hogy melyik analóg bemenetet használjuk #define THERMISTORPIN A0 // a memória címzése 0-ról indul int addr = 0; void setup(void) { Serial.begin(9600); pinMode(13, OUTPUT); } void loop(void) { float reading; //leolvasunk egy értéket reading = analogRead(THERMISTORPIN); //elosztjuk 4-el mert csak 0-256 közötti számot tudunk elmenteni int val = analogRead(THERMISTORPIN) / 4; // elmentjük egy adott címre EEPROM.write(addr, val); //egyel növeljük a cím számát addr = addr + 1; if (addr == EEPROM.length()) { addr = 0; } //várunk fél percet delay(30000); }
A memória kiolvasó:
/* * EEPROM olvasó * * kiolvassa az EEPROM-ot byte-onként * * */ #include <EEPROM.h> // elkezdjük kiolvani a memóriát a 0-dik helyrol int address = 0; int value; double Temp; void setup() { // megnyitjuk a serial kapcsolatot a számítógéppel Serial.begin(9600); while (!Serial) { ; // várunk a kapcsolat létrejöttére } } void loop() { float reading; // kiolvassuk az értéket a memóriából value = EEPROM.read(address); Serial.print(address); Serial.print("\t"); Serial.print(value, DEC); Serial.print(" "); //néggyel meg kell szorozzuk a kiolvasott értéket mert mielott elmentettük, 4-el elosztottuk value=value*4; Serial.print(value); //a képlet ami alapján kiszámítjuk a homérsékletet a mért értékbol a képletet innen vettem: https://en.wikipedia.org/wiki/Thermistor Temp = log(((10240000/value) - 10000)); Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); Temp = Temp - 273.15; // Convert Kelvin to Celcius Serial.print(" Temperature "); Serial.print(Temp); Serial.println(" *C"); /*** továbblépünk a következo memóriacímre, ha végigértünk az 1024-en akkor elölrol kezdjük a kiolvasást A nagyobb mikrokontrollereknek több belso memóriája van pl: - Arduno Duemilanove: 512byte EEPROM storage. - Arduino Uno: 1kbyte EEPROM storage. - Arduino Mega: 4kbyte EEPROM storage. a következo paranccsal az elérheto maximum memórianagyságig olvasunk ***/ address = address + 1; if (address == EEPROM.length()) { address = 0; } //várunk 50 mikomásodperced kiolvasásonként delay(50); }
Először a mérő kódot kell lefuttatni és várni, hogy elmentse az adatokat, majd feltölthetjük a kiolvasó kódot, hogy kinyerjük az adatokat. Én próbából megmértem a radiátor hőmérséklet változását. Majdnem 6 órán át gyűjtötte az adatokat. A kinti hőmérséklet 6-ról közben 3-ra csökkent.
Jól látható, hogy a radiátor hőmérséklete rohamosan emelkedik amikor bekapcsol a fűtés, majd mikor kikapcsol, egyre lassabban hűl le, míg végül el nem éri a szoba hőmérsékletét. A második és harmadik csúcsnál a kis visszaesés a keringető szivattyú vezérlése miatt van, mert ha a termosztát eléri az elvárt hőmérsékletet akkor lekapcsolja a fűtést, de a szivattyú később még egy kicsit visszakapcsol, hogy kivigye még a meleget a kazánból.
Nincsenek megjegyzések:
Megjegyzés küldése