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

Buongiorno a tutti.

Mi chiamo Antonio, ho acquistato da poche settimane lo starter kit di Arduino Uno e ho incominciato a fare i primi esperimenti.

Il mio esperimento attuale consiste nel rilevare la temperatura con un sensore TMP36 e mostrarla sul display LCD incluso nel kit. I piedini esterni del sensore sono collegati all'alimentazione e a 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:

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:

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 a +125C. Quindi 0V corrisponderà a -40C e 5V a +125C, giusto? Poi, stando all'asserzione di sopra, 0.01V corrisponderà a -39C, 0.02V a -38C, e così via fino a 1.66, a cui corrisponderà +125C... e gli altri valori di tensione fino a 5V?

Inoltre non mi è chiara questa linea di codice:

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

Abbiamo detto che la tensione va da 0V a 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:

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 a soli due secondi di distanza l'uno dall'altro? E tutti quei valori pari a zero 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.

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 a 0°C
e ogni 0,01V in piú o in meno sono un grado in piú o in meno.
Da questo deriva la formula:

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

Ciao Uwe

talete:
Buongiorno a tutti.

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

uwefed:
Se guardi bene il datasheet é anche scritto che ha un offset di 0,5V

Hai ragione, non avevo notato l'offset, sorry...

Per quanto riguarda i valori letti col monitor seriale sai darmi un parere? Il sensore è collegato bene, o almeno corrisponde allo schema trovato su ELSE, il motore di ricerca linkato nella pagina ABC segnalata da nid69ita. Ho provato anche a sostituirlo con un altro TMP36 presente nello stesso kit, ma il risultato è analogo.

Ciao e grazie,
Antonio