Hőmérséklet mérés
Hőmérséklet mérés
Sziasztok,
adva van egy arduino uno. Ma vettem egy olcsó MCP9700 termométert. A három láb közül az egyik a +5V, a középső (nálam) A4-en, a harmadik a 0-n van. Nem ördöngösség az analóg porton lekérdezni, de rossz eredményeket kapok. A kódot nem én találtam ki, a következő lenne:
float temp;
temp = analogRead(A4)*5.0/1024.0;
temp = temp - 0.5;
temp = temp / 0.01;
És az eredmény:
34.47
34.47
35.94
35.45
34.96
34.96
34.96
35.94
35.45
34.96
34.96
35.94
Itt van az orrom előtt, a termisztor nem ér semmihez, kábeleken himbálózik a levegőben. Ha megfogom, és kézrátételt alkalmazok, akkor az eredmények így változnak:
40.82
41.80
41.80
43.26
42.29
42.29
42.29
42.77
41.31
41.80
42.29
40.82
41.80
41.80
Ugye több kérdés merül fel:
1. Jól alkalmazom-e az eszközt?
2. Ha minden ok, akkor hogyan lehet ezt bekalibrálni, hogy tényleg használni lehessen az eredményeket?
3. Van-e tapasztalat, hogy mennyire térnek el ugyanazon típusok működése? Tehát kell-e újrakalibrálni egy esetleges cserénél?
Előre is köszönöm
Gábor
Ps: az ember nem bíz semmit a véletlenre, így nem egyet, hanem 2-t vettem, de mindkettőnél ugyanaz az eredmény...
adva van egy arduino uno. Ma vettem egy olcsó MCP9700 termométert. A három láb közül az egyik a +5V, a középső (nálam) A4-en, a harmadik a 0-n van. Nem ördöngösség az analóg porton lekérdezni, de rossz eredményeket kapok. A kódot nem én találtam ki, a következő lenne:
float temp;
temp = analogRead(A4)*5.0/1024.0;
temp = temp - 0.5;
temp = temp / 0.01;
És az eredmény:
34.47
34.47
35.94
35.45
34.96
34.96
34.96
35.94
35.45
34.96
34.96
35.94
Itt van az orrom előtt, a termisztor nem ér semmihez, kábeleken himbálózik a levegőben. Ha megfogom, és kézrátételt alkalmazok, akkor az eredmények így változnak:
40.82
41.80
41.80
43.26
42.29
42.29
42.29
42.77
41.31
41.80
42.29
40.82
41.80
41.80
Ugye több kérdés merül fel:
1. Jól alkalmazom-e az eszközt?
2. Ha minden ok, akkor hogyan lehet ezt bekalibrálni, hogy tényleg használni lehessen az eredményeket?
3. Van-e tapasztalat, hogy mennyire térnek el ugyanazon típusok működése? Tehát kell-e újrakalibrálni egy esetleges cserénél?
Előre is köszönöm
Gábor
Ps: az ember nem bíz semmit a véletlenre, így nem egyet, hanem 2-t vettem, de mindkettőnél ugyanaz az eredmény...
Re: Hőmérséklet mérés
Tedbe a setupba :
És próbáld ezt a projectet:
https://books.google.hu/books?id=-304-N ... no&f=false
És ne várj pontos eredményt az Ardunio-tol!
Kód: Egész kijelölése
analogReference (EXTERNAL) // the voltage applied to the AREF pin (0 to 5V only) is used as the reference.
https://books.google.hu/books?id=-304-N ... no&f=false
És ne várj pontos eredményt az Ardunio-tol!
Re: Hőmérséklet mérés
Köszönöm,
tulajdonképpen megelégednék azzal, ha már fél fokos pontosság lenne.
Végeztem teszteket a javaslatod alapján. Nem voltam biztos benne, hogy az AREF lábat lehet-e direktben csatlakoztatni az 5 V-ra, ezért egy 680 ohm-os ellenálláson keresztül húztam fel. Ezek után is hasonló az eredmény:
analogReference(EXTERNAL)
Üres AREF
449.51
449.51
449.51
680 ohm Vref
35.45
35.94
35.45
35.94
35.94
analogReference(DEFAULT)
33.98
34.47
34.47
34.47
Közben kíváncsiságból kicseréltem az Atmega328p-t is, de bármit csinálok vele, ezek az eredmények maradnak.
A könyvben lévő projekt, amit írtál nagyon hasonlít az enyémhez. Ő egy egyenes képletéből indul ki és mV-okban számol, az én pedig a gyártói doksiból indultam ki és először egy konkrét feszültség egységet számolok ki és utána a helyiértékeknek megfelelően kapom meg az eredményt. Mind a két eset nagyon hasonló eredményű.
Itt az eredménye a második megoldásnak:
External
37.89
38.38
38.38
37.89
37.89
Default
35.45
34.96
34.96
34.96
34.96
De lehet hogy így kell elfogadni
Csak az gyanús, hogy mindkét hőmérséklet érzékelőnél teljesen hasonló értékeket kapok.
Egyébként a kalibrálást roppant egyszerűen intézi el egy összeadással. Lehet hogy én is így fogom csinálni és kettévágom a gordiuszi csomót...
tulajdonképpen megelégednék azzal, ha már fél fokos pontosság lenne.
Végeztem teszteket a javaslatod alapján. Nem voltam biztos benne, hogy az AREF lábat lehet-e direktben csatlakoztatni az 5 V-ra, ezért egy 680 ohm-os ellenálláson keresztül húztam fel. Ezek után is hasonló az eredmény:
analogReference(EXTERNAL)
Üres AREF
449.51
449.51
449.51
680 ohm Vref
35.45
35.94
35.45
35.94
35.94
analogReference(DEFAULT)
33.98
34.47
34.47
34.47
Közben kíváncsiságból kicseréltem az Atmega328p-t is, de bármit csinálok vele, ezek az eredmények maradnak.
A könyvben lévő projekt, amit írtál nagyon hasonlít az enyémhez. Ő egy egyenes képletéből indul ki és mV-okban számol, az én pedig a gyártói doksiból indultam ki és először egy konkrét feszültség egységet számolok ki és utána a helyiértékeknek megfelelően kapom meg az eredményt. Mind a két eset nagyon hasonló eredményű.
Itt az eredménye a második megoldásnak:
External
37.89
38.38
38.38
37.89
37.89
Default
35.45
34.96
34.96
34.96
34.96
De lehet hogy így kell elfogadni
Egyébként a kalibrálást roppant egyszerűen intézi el egy összeadással. Lehet hogy én is így fogom csinálni és kettévágom a gordiuszi csomót...
Re: Hőmérséklet mérés
De az AREF-en van legalább 10uF + 100n (Tantál) szűrés? 1V ingadozás sok!
És az eredmény sem helyes?
És az eredmény sem helyes?
Re: Hőmérséklet mérés
Mérd meg az AREF-et, és a képletben a valódi értékkel számolj:
temp = analogRead(A4)*AREF V/1024.0;
temp = analogRead(A4)*AREF V/1024.0;
Re: Hőmérséklet mérés
Gondolkoztam én is azon, hogy a referenciának elég stabilnak kell lennie. A tápot a laptopom usb-jéről kapja, de ha ez nem elég stabil, érünk-e valamit azzal, ha csak a referenciát stabilizáljuk? De tény, hogy most nincs szűrés, csak egy ellenállás.
A feszültséget megmérem és módosítom a képletet. De már csak holnap...
A feszültséget megmérem és módosítom a képletet. De már csak holnap...
Re: Hőmérséklet mérés
Igen érdemes!
A legjobb példa ezen a kapcsoláson levő: 4,7uF 100uH 4,7uF AVCC – AREF Szűrést is beépíteném.
http://cryptomys.de/horo/V-USB-MIDI/V-U ... B-MIDI.png
A legjobb példa ezen a kapcsoláson levő: 4,7uF 100uH 4,7uF AVCC – AREF Szűrést is beépíteném.
http://cryptomys.de/horo/V-USB-MIDI/V-U ... B-MIDI.png
Re: Hőmérséklet mérés
Tekercs nincs itthon, ezért még el kell ugranom megvenni, azután kipróbálom a szűrt referenciával is.
Találtam olyan oldalt, ahol direktben kötötték a 3.3 V-ra az AREF lábat. Én is kipróbáltam az 5 V-on és úgy néz ki, hogy működik, de ugyanúgy nagyobb értéket mutat, mint kellene.
Egy másik oldalon 10-es ciklusokban mértek és azt átlagolták. Ezt én is beépítettem és így csökkenthető az eredmény ingadozása. Bár továbbra sem értem, hogy ha 1024 bit az AD átalakító felbontása és 5 V-tal dolgozunk és a termisztor lineáris karakterisztikájú, miért jön ki rossz eredmény.
Ami szintén elgondolkodtat, hogy rámértem a termisztor kimenetére és stabil 0,74 V-ot mértem. Ezzel szemben a programban a számított "fesz" értéke 0,86 volt. Itt is van már eltérés.
Megköszönöm, ha megnézitek a sketch-et, hátha találtok benne hibát:
// Hány cikluson keresztül átlagoljuk
int meresciklus = 10;
// Pillanatnyi feszültség
float fesz = 0.0;
// Pillanatnyi hőmérséklet
float temp = 0.0;
// Átlagok
float tempavg, feszavg;
// Korrekció - ez az érthetetlen tényező
float corr = -13.0;
void setup()
{
Serial.begin(9600);
analogReference(EXTERNAL);
}
void loop()
{
tempavg = 0.0;
feszavg = 0.0;
for(int i=0; i<meresciklus; i++)
{
// Pillanatnyi feszültség kiszámítása
fesz = analogRead(A5)*(5.0/1024.0);
// (Vout - 500mV) / 10 mV/C = eredmény C
temp = fesz - 0.5;
temp /= 0.01;
tempavg += temp;
feszavg += fesz;
delay(100);
}
// átlagolunk
feszavg /= (meresciklus * 1.0);
tempavg /= (meresciklus * 1.0);
// Korrekció a pontatlan eredmény miatt
tempavg += corr;
Serial.print(feszavg);
Serial.print("\t");
Serial.println(tempavg);
delay(500);
}
Találtam olyan oldalt, ahol direktben kötötték a 3.3 V-ra az AREF lábat. Én is kipróbáltam az 5 V-on és úgy néz ki, hogy működik, de ugyanúgy nagyobb értéket mutat, mint kellene.
Egy másik oldalon 10-es ciklusokban mértek és azt átlagolták. Ezt én is beépítettem és így csökkenthető az eredmény ingadozása. Bár továbbra sem értem, hogy ha 1024 bit az AD átalakító felbontása és 5 V-tal dolgozunk és a termisztor lineáris karakterisztikájú, miért jön ki rossz eredmény.
Ami szintén elgondolkodtat, hogy rámértem a termisztor kimenetére és stabil 0,74 V-ot mértem. Ezzel szemben a programban a számított "fesz" értéke 0,86 volt. Itt is van már eltérés.
Megköszönöm, ha megnézitek a sketch-et, hátha találtok benne hibát:
// Hány cikluson keresztül átlagoljuk
int meresciklus = 10;
// Pillanatnyi feszültség
float fesz = 0.0;
// Pillanatnyi hőmérséklet
float temp = 0.0;
// Átlagok
float tempavg, feszavg;
// Korrekció - ez az érthetetlen tényező
float corr = -13.0;
void setup()
{
Serial.begin(9600);
analogReference(EXTERNAL);
}
void loop()
{
tempavg = 0.0;
feszavg = 0.0;
for(int i=0; i<meresciklus; i++)
{
// Pillanatnyi feszültség kiszámítása
fesz = analogRead(A5)*(5.0/1024.0);
// (Vout - 500mV) / 10 mV/C = eredmény C
temp = fesz - 0.5;
temp /= 0.01;
tempavg += temp;
feszavg += fesz;
delay(100);
}
// átlagolunk
feszavg /= (meresciklus * 1.0);
tempavg /= (meresciklus * 1.0);
// Korrekció a pontatlan eredmény miatt
tempavg += corr;
Serial.print(feszavg);
Serial.print("\t");
Serial.println(tempavg);
delay(500);
}
