Salve, innanzi tutto mi presento.
Mi chiamo Francesco e da pochissimo tempo mi sono affacciato ad Arduino, dopo averne scoperto le funzionalità e la scalabilità ( senza contare la facilità di programmazione). Da sempre sono appassionato di elettromeccanica ed elettronica. Con Arduino ho iniziato i primi progetti di rito per prendere confidenza con la piattaforma e dopo aver fatto un piccolo web server che comanda un paio di led, un circuito per comandare un relè, un botta e risposta da seriale, mi son detto, andiamo avanti ed esploriamo i sensori.
Ho deciso quindi di iniziare con un sensore di temperatura. La scelta dell' LM335Z tarato in gradi Kelvin è stata forzata dalla mancanza di un LM35, ma ciò non pregiudica l'esperimento, giusto?
Bene, dopo la piccola parentesi, veniamo al problemino.
Premetto che la mia configurazione attuale è la seguente:
- Arduino UNO
- Ethernet Shield +microSD v3 originale
- Sensore LM335Z
- Breadboard + cavetti vari
- MacBookPro con SnowLeopard per la programmazione
e che in uscita dal pin vcc non ho una tensione di 5V, ma di 4,68V poichè l'Arduino è alimentato da USB
Il sensore è montato sulla breadboard e con i cavetti all'arduino
Con un altro termometro digitale posto affianco al sensore, misuro una temperatura di 26.8 gradi Celsius pari a 299.95 gradi Kelvin
Con il tester, misuro una tensione in uscita al sensore pari a circa 3.86V
Con questi valori di tensione, al pin A5 leggo un valore di 844 bit.
Converto quindi il valore letto in millivolt moltiplicando il valore per la costante data da tensioneMassima/1024 e moltiplicando per 1000.
A questo punto, sapendo che il sensore ha uno sbalzo di 1K ogni 10mV, divido il valore ottenuto per 10 per ottenere la temperatura in gradi Kelvin
Successivamente sottraggo la costante di conversione pari a 273.15 per ottenere i gradi Celsius.
Bene, questo in teoria dovrebbe essere corretto, vero?
Il problema è che ottengo a video i seguenti risultati:
844 bit | 3861.11 mV | 386.11 K | 112.96 C |
Un valore di 86,16 unità in più rispetto al reale ( di certo non ci sono più di 100°C in stanza)!!!
Di seguito il codice usato per il test:
int LM335Z = A5; //collego il sensore al pin A5
void setup()
{
Serial.begin(9600); //stabilisco una connessione seriale
}
void loop ()
{
int leggo = analogRead(LM335Z); //leggo i bit in ingresso
float rapporto = 4.68/1024.0; //ottengo il rapporto di conversione bit to volt
float voltage =leggo*rapporto*1000; //valore in millivolt in ingresso
float kelvin = voltage/10; //valore temperatura in kelvin
float celsius = kelvin-273.15; //valore temperatura in celsius
// Stampo a video le letture[
Serial.print(reading);
Serial.print(" bit |attachment](upload://cYYPjTwjT24K6yQXqklvLAbXpxP.pdf) (539 KB)