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