Interpretazione dei dati letti da sensore TMP36 e conversione in gradi Celsius


buongiorno tutti.

mi chiamo antonio, ho acquistato da poche settimane lo starter kit di arduino uno e ho incominciato fare primi esperimenti.

il mio esperimento attuale consiste nel rilevare la temperatura con un sensore tmp36 e mostrarla sul display lcd incluso nel kit. piedini esterni del sensore sono collegati all'alimentazione e massa; quello centrale è collegato al pin a0 di arduino. quindi ho usato lo sketch descritto nel manualetto che sto leggendo, di cui riporto la parte saliente:

code: [select]

int temp = analogread(a0);

serial.print("valore sensore: ");
serial.print(temp);

float volt = (temp / 1024.0) * 5.0;

serial.print(", tensione: ");
serial.print(volt);

float temperatura = (volt - .5) * 100;

serial.print(", gradi c: ");
serial.print(temperatura);
serial.print("\n");

delay(2000);


per prima cosa non mi è chiara la conversione dal valore letto dal pin a0 alla temperatura finale. mi spiego: a0 legge un valore compreso tra 0 e 1023, quindi devo dividere tale valore per 1023 e moltiplicarlo per 5 per ottenere la corrispondente tensione (tra 0 e 5v). poi il manuale dice:

quote
una variazione di tensione di 10 millivolt corrisponde ad un cambio di temperatura di 1 grado celsius.
sul datasheet del sensore è riportato che esso può rilevare temperature che vanno da -40c +125c. quindi 0v corrisponderà -40c e 5v +125c, giusto? poi, stando all'asserzione di sopra, 0.01v corrisponderà -39c, 0.02v -38c, e così via fino 1.66, cui corrisponderà +125c... e gli altri valori di tensione fino 5v?

inoltre non mi è chiara questa linea di codice:

code: [select]

float temperatura = (volt - .5) * 100;


abbiamo detto che la tensione va da 0v 5v. se sottraggo 0.5 (come indicato nella formula) otterrò un valore compreso tra -0.5v e 4.5v. poi lo moltiplico per 100, per cui alla fine avrò un valore compreso tra -50c e +450c. non capisco.

infine riporto l'output del monitor seriale:

code: [select]

valore sensore: 104, tensione: 0.51, gradi c: 0.78
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 90, tensione: 0.44, gradi c: -6.05
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 62, tensione: 0.30, gradi c: -19.73
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 73, tensione: 0.36, gradi c: -14.36
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 86, tensione: 0.42, gradi c: -8.01
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 17, tensione: 0.08, gradi c: -41.70
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 72, tensione: 0.35, gradi c: -14.84
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 87, tensione: 0.42, gradi c: -7.52
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 79, tensione: 0.39, gradi c: -11.43
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 31, tensione: 0.15, gradi c: -34.86
valore sensore: 11, tensione: 0.05, gradi c: -44.63
valore sensore: 0, tensione: 0.00, gradi c: -50.00
valore sensore: 70, tensione: 0.34, gradi c: -15.82
valore sensore: 7, tensione: 0.03, gradi c: -46.58
valore sensore: 82, tensione: 0.40, gradi c: -9.96
valore sensore: 10, tensione: 0.05, gradi c: -45.12
valore sensore: 57, tensione: 0.28, gradi c: -22.17
valore sensore: 11, tensione: 0.05, gradi c: -44.63


per cui mi si aggiunge un altro dubbio: è possibile che il sensore rilevi valori così differenti tra loro soli due secondi di distanza l'uno dall'altro? e tutti quei valori pari 0 non sono sospetti?

scusatemi se mi sono dilungato molto, ma ci tenevo ad essere quanto più esauriente possibile. e vi ringrazio anticipatamente se vorrete dedicare qualche minuto al mio problema.

ciao e grazie,
antonio

presentati nella discussione apposita.

quote
una variazione di tensione di 10 millivolt corrisponde ad un cambio di temperatura di 1 grado celsius.
se guardi bene il datasheet é anche scritto che ha un offset di 0,5v

percui
0,5v corrispondono 0°c
e ogni 0,01v in piú o in meno sono un grado in piú o in meno.
da questo deriva la formula:

code: [select]
float temperatura = (volt - .5) * 100;
ciao uwe


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Interpretazione dei dati letti da sensore TMP36 e conversione in gradi Celsius


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor