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