sensore di temperatura lm36

ciao ragazzi,
premetto che sono alle prime armi su arduino; da internet ho scaricato un codice per far si che attraverso un display e un sensore di temperatura lm36, arduino mi restituisse la temperatura e che impostando una soglia di temperatura, mi accendesse un led oppure me lo spegnesse.
Però il codice era errato, sono riuscito a correggerlo, ma il sensore mi restituisce una temperatura di 76023.0 °C, un po calduccio :sweat_smile: .
quindi vorrei chiedervi cosa potrebbe esserci che non va…
vi lascio lo sketch:

#include <LiquidCrystal.h>
#define outPin 10
#define tempP 7
#define tempM 8
#define LM35 A1
 
float vref = 1.1; // Vref dell'ADC (quell'interno è di 1,1V)
int tempSoglia = 23;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 'lcd' è una variabile di tipo LiquidCrystal
 
void setup()
{
 analogReference(INTERNAL); // per l'ADC usiamo il Vref interno da 1,1V (migliore precisione)
 analogRead(LM35); // Prima lettura "a vuoto" (serve per l'assestamento dell'ADC)
 pinMode(outPin,OUTPUT);
 pinMode(tempP,INPUT);
 pinMode(tempM,INPUT);
 
 lcd.begin(16,2);
 lcd.setCursor(3,0);
 lcd.print("TERMOSTATO");
 lcd.setCursor(4,1);
 lcd.print("DIGITALE");
 delay(4000);
}
 
void loop()
{
 float temp = readTemp(); // legge il valore della temperatura e la memorizza nella var. temp.
 LCD(temp); // invia il valore al LCD
 
 if(digitalRead(tempM) == LOW){ tempSoglia--; } // decrementa il valore di tempSoglia
 if(digitalRead(tempP) == LOW){ tempSoglia++; } // incrementa il valore di tempSoglia
}
 
/* Legge la temperatura */
 
float readTemp()
{
 float temp = 0.0; // valore convertito in temperatura (°C)
 int val = 0; // valore quantizzato dall'ADC [0..1023]
 int nread = 5; // numero di letture (da 5 a 8)
 float somma = 0.0; // somma delle letture
 for (int i=0; i<nread; i++)
 {
 val = analogRead(LM35); // legge il dato della tensione sul pin 'LM35'
 temp = (100.0 * vref * val); // converte la temperatura in °C
 somma += temp; // aggiunge alla somma delle temperature lette
 }
 return ( somma / nread ); // calcola il valore medio
}
 
/* scrive i valori di temperatura su LCD */
 
void LCD( float temp )
{
 lcd.clear(); // pulisce lo schermo LCD
 lcd.setCursor(0,0); // cursore in posizione di home: colonna 1, riga 1
 lcd.print("Temp: ");
 lcd.print(temp,1); // Stampa la parte intera e un decimale della temp
 lcd.print(' '); // Stampa uno spazio
 lcd.print((char)223); // Stampa '°'
 lcd.print('C');
 
 lcd.setCursor(0,2); // cursore in posizione: colonna 1, riga 2
 lcd.print("Soglia: ");
 lcd.print(' '); // Stampa uno spazio
 lcd.print(tempSoglia); // Stampa il valore di tempSoglia sullo schermo
 
 /* accensione del relè con isteresi */
 
 if(temp < tempSoglia-2)
 {
 digitalWrite(outPin, LOW);
 }
 if(temp > tempSoglia+2)
 {
 digitalWrite(outPin, HIGH);
 }
 delay(1000); // attende 1 secondo
 }

Hai considerato che il sensore di temperatura fosse in kelvin o in fahrenheit?

considera che:

celsius = kelvin - 273.15

fahrenheit = ((kelvin - 2.5) * 9 / 5) - 459.67 (non mi chiedere da dove l'ho presa l'avevo in un vecchio progetto che avevo fatto ed era abbastanza attendibile tieni presente che il mio termometro era in kelvin.)

Ciao G.

P.s.: presentati prima di postare. :smiley:

Non trovo datasheet del LM36. Solo LM35 o TMP36.
Il TMP36 da 10mV per °C con un offset di 0,5V ( a 0°C misura 0,5V a 25°C 0,750V ecc).
Ma questo non giustifica una lettura di temperatura cosí alta.
Prova a stampare sulla seriale le singoli variabili.

Ciao Uwe

Ho risolto ho provato tutto il pomeriggio e non so come ce l'abbia fatta :fearful: ...
Grazie mille Uwe grazie al tuo consiglio son riuscito a vedere il valore della variabile, grazie a quella facendo dei calcoli con la calcolatrice ci sono riuscito.

Ciao Ale

ok, bene, gratulazioni!
Ciao Uwe