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)
}
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
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?
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);
}