Seguimi su Youtubue
Iscriviti
Se desideri, puoi effettuare un'iscrizione gratuita al forum per entrare nella nostra community.
Ricerca Avanzata
Pubblicità Google AdSense
Answers
Se necessiti di aiuto, clicca il pulsante "Cerco Aiuto" (disponibile anche per i non iscritti).
I postatori più attivi del mese
Poderak
 
Ilfalco78
 
Lorenzo lollo
 
fulvio
 

Come posso fare la media della temperatura con LM35?

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso

Come posso fare la media della temperatura con LM35?

Messaggio Da Guido Laferrari il Dom Lug 10, 2016 12:01 pm

Ciao a tutti
Avendo a disposizione un  display 1602 e un sensore di temperatura LM35 ,ho provato leggere sul display la temperatura di casa confrontandola con alcuni termometri digitali in mio possesso. Tutti i termometri rilevano la stessa temperatura con uno scarto di due decimi di grado,purtroppo il mio LM35 mi fornisce una temperatura superiore di un grado e tre decimi. Dopo essermi informato mi suggeriscono di sommare la lettura del sensore per 10 volte per poi dividere per 10 e poi applicare la formula,vorrei sapere anche il vostro parere. Leggere per 10 volte e dividere per 10 penso si saperlo fare ma non riesco a sommare ogni lettura su una variabile, qualcuno mi può dare una dritta?
Vi ringrazio in anticipo.

Guido

Codice:

/*
 Questo sketch stampa sul display LCD il valore di temperatura misurata dal sensore LM35

  The circuit:
 * LCD        pin 1   GND
 * LCD        pin 2   +5v
 * LCD        pin 3   potenziometro 10k
 * LCD RS     pin 4   pin 12 arduino
 * LCD R/W    pin 5   GND
 * LCD Enable pin 6   pin 11 arduino
 * LCD D4     pin 11  pin 5  arduino
 * LCD D5     pin 12  pin 4  arduino
 * LCD D6     pin 13  pin 3  arduino
 * LCD D7     pin 14  pin 2  arduino
 * LCD        pin 15  220 homm +5v
 * LCD        pin 16  GND
 */
int sensore     = A0;                                // sensore LM35 collegato al pin analogico A0
int sensorValue = 0;                                 // variabile per lettura sensore
float celsius   = 0;                                 // temperatura variabile
float millivolt = 0;                                 // dichiarazione di variabile tensione (float è per i numeri con la virgola)                           

#include <LiquidCrystal.h>                           // Includo il codice della libreria :

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);               // Inizializzo la libreria con i numeri dei pin dell'interfaccia

void setup() {
  lcd.begin(16, 2);                                  // Imposto il numero del display LCD di colonne e righe :
  lcd.print("TEMPERATURA");                          // visualizzo il messaggio TEMPERATURA sul display
}
void loop() {
  sensorValue=analogRead(sensore);                   // lettura valore del sensore LM35 messo sull'ingresso analogico A0
  millivolt=(sensorValue/1024.0)*5000;               // formula per ottenere la tensione di uscita dell'LM35 in millivolts
  celsius = millivolt/10;                            // valore espresso in gradi Celsius (l'out del sensore è 10mv per grado)
  lcd.setCursor(0,1);                                // Imposto il cursore sulla colonna 0  , linea 1
  lcd.print("C.");                                   // stampa sul display C.
  lcd.setCursor(2,1);                                // Imposto il cursore sulla colonna 2  , linea 1
  lcd.print(celsius);                                // stampa sul display il valore di temperatura in gradi Celsius
  delay(1000);
 }




avatar
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Vedere il profilo dell'utente

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Poderak il Dom Lug 10, 2016 4:25 pm

Ciao Guido,

il suggerimento che ti propongono è una buona scelta per avere una migliore precisione. Per fare questa media hai la possibilità di utilizzare gli array oppure una semplice variabile. Quest'ultima scelta a mio parere è la più semplice da comprendere.

Per fare la somma di 10 valori all'interno di una variabile, ti basta fare in questo modo. Ovviamente te lo propongo in modo generale per cercarti di far comprendere il ragionamento:
Codice:
int val=0; //variabile che legge il sensore
float tot=0; //variabile che servirà per la media

void setup() {
pinMode(A0, INPUT); //il sensore lo imposto come INPUT
}

void loop() {
for (int i=0; i<10; i++) { //ripeto x 10 volte..
val=analogRead(A0); //.. la lettura dal sensore

//qui faccio calcoli per la conversione di val in gradi

tot=tot+val; //aggiungo questa lettura al totale
}

tot=tot/10; //alla fine delle 10 letture, faccio la media
}

Facciamo un test:
Al primo ciclo del loop, si entra nel "for" e nel primo ciclo del "for" si legge dal sensore "5", quindi "val" varrà 5. Aggiungo nel totale il valore di "val", quindi tot=0+5 e "tot" varrà anche lui "5". Nel secondo ciclo del "for", viene letto "6" quindi "val" varrà 6. Ora si aggiunge questo valore in "tot" quindi tot=5+6 e "tot" varrà 11. Alla fine del ciclo for farà la media di "tot" facendo, come indicato "tot=tot/10;". Trattandosi di una variabile float, ci restituirà un valore con la virgola.

Spero di essere stato chiaro. Fammi sapere Very Happy

Saluti Ciao!
avatar
Poderak
♔ Amministratore

Messaggi Messaggi : 4147
Crediti Crediti : 11648
Reputazione Reputazione : 185
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 18
Località Località : Brescia

Vedere il profilo dell'utente http://www.wikiinfo.net

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Guido Laferrari il Dom Lug 10, 2016 5:55 pm

Ciao , il test che hai fatto è chiarissimo e l'ho capito , ho solo una piccolo chiarimento: nel "for" ho visto che non hai dichiarato la variabile " int i " è giusto così?
Guido
avatar
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Vedere il profilo dell'utente

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Poderak il Dom Lug 10, 2016 7:25 pm

Scritto in quel modo è dichiarato mentre se avessi messo semplicemente "i=0" ti avrebbe dato errore (fai un piccolo test Wink ). Mettendo invece "int i=0" o sopra o in mezzo al codice, è indifferente Ciao!
avatar
Poderak
♔ Amministratore

Messaggi Messaggi : 4147
Crediti Crediti : 11648
Reputazione Reputazione : 185
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 18
Località Località : Brescia

Vedere il profilo dell'utente http://www.wikiinfo.net

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Guido Laferrari il Dom Lug 10, 2016 9:17 pm

Grazie mille , durante la elaborazione del codice mi sono domandato: alla fine del ciclo "for" fa la media di "tot", mà quando si resettano le variabili "tot" e "val" per ricominciare da zero il ciclo "for" ? si resettano in automatico? grazie ancora.
Guido
avatar
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Vedere il profilo dell'utente

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Poderak il Lun Lug 11, 2016 12:04 am

No, non si resettano da soli. In realtà ti interessa solo che "tot" si resetti dopo la media. Razz
Penso ti basti impostare "tot=0;" dopo che hai stampato sul display LCD (o Serial Monitor) il valore della temperatura Very Happy.

avatar
Poderak
♔ Amministratore

Messaggi Messaggi : 4147
Crediti Crediti : 11648
Reputazione Reputazione : 185
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 18
Località Località : Brescia

Vedere il profilo dell'utente http://www.wikiinfo.net

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Guido Laferrari il Lun Lug 11, 2016 4:58 pm

OK questo è il mio codice definitivo, dimmi cosa ne pensi. grazie ancora.

Codice:

/*
 Questo sketch stampa sul display LCD il valore di temperatura misurata dal sensore LM35

  The circuit:
 * LCD        pin 1   GND
 * LCD        pin 2   +5v
 * LCD        pin 3   potenziometro 10k
 * LCD RS     pin 4   pin 12 arduino
 * LCD R/W    pin 5   GND
 * LCD Enable pin 6   pin 11 arduino
 * LCD D4     pin 11  pin 5  arduino
 * LCD D5     pin 12  pin 4  arduino
 * LCD D6     pin 13  pin 3  arduino
 * LCD D7     pin 14  pin 2  arduino
 * LCD        pin 15  220 homm +5v
 * LCD        pin 16  GND
 */
int sensore       = A0;                              // sensore LM35 collegato al pin analogico A0
int sensorValue   = 0;                               // variabile per lettura sensore
float totalValue  = 0;                               // totale di 10 letture del sensore
float celsius     = 0;                               // temperatura celsius
float millivolt   = 0;                               // dichiarazione di variabile tensione (float è per i numeri con la virgola)                           

#include <LiquidCrystal.h>                           // Includo il codice della libreria :

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);               // Inizializzo la libreria con i numeri dei pin dell'interfaccia

void setup() {
  lcd.begin(16, 2);                                  // Imposto il numero del display LCD di colonne e righe :
  lcd.print("TEMPERATURA");                          // visualizzo il messaggio TEMPERATURA sul display
}
void loop() {
  for (int i = 0;i < 10 ; i ++){
  sensorValue=analogRead(sensore);                   // lettura valore del sensore LM35 messo sull'ingresso analogico A0 
  totalValue = totalValue + sensorValue;             // sommo per 10 volte la letura del sensore
  }
  totalValue = totalValue / 10;                      // divido per 10 
  millivolt=(totalValue/1024.0)*5000;                // formula per ottenere la tensione di uscita dell'LM35 in millivolts
  celsius = millivolt/10;                            // valore espresso in gradi Celsius (l'out del sensore è 10mv per grado)
  lcd.setCursor(0,1);                                // Imposto il cursore sulla colonna 0  , linea 1
  lcd.print("C.");                                   // stampa sul display C.
  lcd.setCursor(2,1);                                // Imposto il cursore sulla colonna 2  , linea 1
  lcd.print(celsius);                                // stampa sul display il valore di temperatura in gradi Celsius
  delay(100);                                        // tempo ciclo
  totalValue = 0;                                    // resetto la variabile
  }



avatar
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Vedere il profilo dell'utente

Tornare in alto Andare in basso

Re: Come posso fare la media della temperatura con LM35?

Messaggio Da Poderak il Lun Lug 11, 2016 7:35 pm

Eccellente cheers
avatar
Poderak
♔ Amministratore

Messaggi Messaggi : 4147
Crediti Crediti : 11648
Reputazione Reputazione : 185
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 18
Località Località : Brescia

Vedere il profilo dell'utente http://www.wikiinfo.net

Tornare in alto Andare in basso

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto


 
Permesso di questo forum:
Non puoi rispondere agli argomenti in questo forum