ho trovato un altro tutorial http://cinquetau.altervista.org/blog/2010/02/28/usare-un-lm35-per-misurare-temperature-negative-con-arduino/
/* ----------------LM35 per tutta la scala centigrada---------------
Questo codice consente di usare un LM35 per misurare anche
temperature negative.
La configurazione usata è quella con due diodi tra il pin GND
del sensore e il GND dell'alimentazione.
Vengono prelevati due segnali che andranno a due ingressi
analogici di Arduino:
- il primo dal pin GND del LM35 chiamato "ref"
- il secondo dal pin OUT del LM35 chiamato "sensoreTemperatura"
La differenza tra "sensoreTemperatura" e "ref" contiene
l'informazione della temperatura che il sensore ha misurato
creato il 27 Febbraio 2010
da Federico Vanzati
*/
#define LM35_TEMP 0 // Pin analogico 0
#define LM35_REF 1 // Pin analogico 1
float temperatura; // variabile in cui viene salvata la temperatura in gradi centigradi
float prev_temperatura = 0; // temperatura precendente
int ref; // valore della tensione di riferimento dei due diodi
int ref_medio = 0; // valore della tensione di riferimento medio
int sensoreTemperatura; // valore di tensione letto dal pin OUT del sensore
int sensoreTemperatura_medio = 0; // valore sensoreTemperatura medio
int cont; //contatore usato per ottenere un valore medio
void setup()
{
Serial.begin(9600); //inizializzazione della comunicazione seriale
}
void loop()
{
// vengono sommati 10 valori di temperatura per poi farne la media
for( cont = 0; cont < 10; cont++)
{
sensoreTemperatura = analogRead(LM35_TEMP); // lettura della tensione del pin OUT LM35
sensoreTemperatura_medio += sensoreTemperatura; //sommatoria dei valori
ref = analogRead(LM35_REF); // lettura della tensione di riferimento
ref_medio += ref; // sommatoria dei valori
delay(500); // intervallo di campionamento
//la lettura durera' 10 (numero di camoioni) x 500ms (intervallo tra due campioni) = 5000ms
}
if(cont == 10) // quando ho sommato i dieci valori campionati si esegue:
{
cont = 0; // azzeramento contatore, per far ripartire il successivo campionamento
// media della sommatoria dei dieci valori campionati di ref e sensoreTemperatura
sensoreTemperatura_medio = sensoreTemperatura_medio / 10;
ref_medio = ref_medio / 10;
// conversione dei valori medi misurati in una temperatura in gradi centigradi
temperatura = (sensoreTemperatura_medio - ref_medio) * 100/2.56;
temperatura = temperatura * 5/1024;
// valore di temperatura che verra' mostrato quando si e' in fase di campionamento
//e non c'e' una temperatura disponibile
prev_temperatura = temperatura;
// stampa su seriale dei due valori medi
Serial.print(" ref_medio: ");
Serial.print(ref_medio);
Serial.print(" temp_medio: ");
Serial.print(sensoreTemperatura_medio);
// prima di un successiva acquisizione e media questi valori vanno azzerati
sensoreTemperatura_medio = 0;
ref_medio = 0;
}
else{
temperatura = prev_temperatura;
}
// stampa su seriale della temperatura ottenuta in gradi centigradi
Serial.print(" gradi: ");
Serial.println(temperatura);
}
ma è uguale mi da valori assurdi 360 gradi