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:
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:
inoltre non mi è chiara questa linea di codice:
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:
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
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.
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:
ciao uwe
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
Post a Comment