termometro lcd lm35

salve, ho trovato questo sketch su internet e volevo dei chiarimenti:
-nella riga: temp += (analogRead(pin_temp) / 9.31) perche si utilizza "temp+" e perche si divide per "9.31"?
inoltre ho notato che la gradazione è più alta di qualche grado, da cosa dipende?

#include <LiquidCrystal.h> //Libreria per pilotare il display LCD

#define pin_temp A0 //Pin di collegamento del piedino Vout del sensore di temperatura

double temp = 0; //Variabile in cui verrà memorizzata la temperatura rilevata
int i = 0; //Variabile contatore per il ciclo for

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Inizializzazione della libreria con i pin del display LCD

void setup()
{
  lcd.begin(16, 2); //Impostazione del numero di colonne e righe del display LCD 
  lcd.setCursor(0,0); //Sposto il cursore sulla prima riga (riga 0) e sulla prima colonna
  lcd.print("Temperatura:"); //Stampo il messaggio 'Temperatura:' sulla prima riga
  analogReference(INTERNAL);
}

void loop()
{
  
  for(i=0; i<5; i++) //Esegue l'istruzione successiva 5 volte
    temp += (analogRead(pin_temp)  / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
  
  temp = temp/5; //Calcola la media matematica dei  valori di temperatura

  lcd.setCursor(0,1); //Sposto il cursore sulla prima colonna e sulla seconda riga
  lcd.print(temp); //Stampo sul display LCD la temperatura
  lcd.print(" C"); //Stampo uno spazio e il carattere 'C' sul display
  
  delay(1000); //Ritardo di un secondo (può essere modificato)
}

ciao
è tutto spiegato nel reference:
http://playground.arduino.cc/Main/LM35HigherResolution
:wink:

ok ma perche la gradazione è più alta? lo sketch mi sembra corretto

Giusto per fare l'avvocato del diavolo: con cosa lo confronti? Utilizzi un altro termometro immagino... E' un termometro certificato? Puoi essere certo che la temperatura non sia proprio quella indicata dal sensore lm35?

Prova mettendo solo LM35 senza display e senza led nelle altre uscite con questo sketch e verifica i valori se sono ancora sballati nel serial monitor, solo 1 LM35 poichè con 2 analog già complichi le cose

void setup(){
  delay(1000);
  Serial.begin(9600);
}

void loop(){ 
   double temp = 0; //Variabile in cui verrà memorizzata la temperatura rilevata
   for(byte i=0; i<10; i++) //Esegue l'istruzione successiva 5 volte
    temp += (analogRead(A0)  / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
    temp = temp/10; //Calcola la media matematica dei  valori di temperatura
    	Serial.println(temp);
    delay(1000);
}

oltre tutto nel tuo sketch non vedo un azzeramento di temp all'uscita del ciclo, in pratica continua a fare somme e medie su valori dei cicli precedenti

nonloso95:
'serial was not declared in this scope'.

... Serial ... con la S maiuscola ... ]:smiley: ]:smiley: ]:smiley:

Guglielmo

:sweat_smile:

pablos ho scritto bene il tuo sketch, ma la temperatura sale costantemente e toccando l'lm35 era caldissimo e si sentiva puzza di bruciato, sul datasheet c'è scritto che opera dai 4 ai 30v, io gli ho messo i 5 v di arduino. cosa può essere successo?

... che lo hai montato al contrario ... :roll_eyes:

GUARDA BENE IL DATASHEET ... che sbagliate sempre tutti li !!!

Guglielmo

no mi sembra di averlo montato bene, può essere perche non ho messo una resistenza al VOUT?

nonloso95:
no mi sembra di averlo montato bene ...

... ti sembra ... ma per avere conferma, metti una foto (cortesemente, nitida) indicandoci esattamente i collegamenti :wink:

Guglielmo

Guardandolo di fronte le connessioni sono identiche a questo.

PaoloP:
Guardandolo di fronte le connessioni sono identiche a questo ...

Paolo, sei sempre il solito ... :roll_eyes:
... in questo modo, secodo te, quando mai la gente imparerà a leggere i datasheet ??? ]:smiley: ]:smiley: ]:smiley:

Guglielmo

oddio non riesco a capire perchè non funziona ora mi segna sui 5 gradi. ho provato con piu lm35

void setup(){
  delay(1000);
  Serial.begin(9600);
}

void loop(){ 
   double temp = 0; //Variabile in cui verrà memorizzata la temperatura rilevata
   for(byte i=0; i<10; i++) //Esegue l'istruzione successiva 5 volte
    temp += (analogRead(A0)  / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
    temp = temp/10; //Calcola la media matematica dei  valori di temperatura
    	Serial.println(temp);
    delay(1000);
}

come è possibileee??

In QUESTO post, tapirinho ti ha linkato un articolo in cui sono ben spiegate alcune cose che ... non vedo nel tuo codice ... ]:smiley:

Studiati quel link e applicalo ... poi ne riparliamo ....

Guglielmo

l'avevo studiato! mi ero solo scordato del analogReference(INTERNAL);
ora funziona grazie :smiley: :smiley: :smiley:

... visto che era facile :grin: :grin: :grin:

Guglielmo