Pages: 1 [2] 3   Go Down
Author Topic: Calcoli per temperatura con LM35DZ  (Read 2673 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Attualmente non ho niente da 5v da dargli al pin AREF.. In ogni caso ho settato l'analogReference ad INTERNAL, ed ovviamente dal punto AREF mi escono 1.1v.. Ho modificato la formula in modo che mi calcoli la temperatura basandosi sugli 1.1, misurando il punto AREF resta stabile sia che metto, sia che tolgo l'illuminazione all'lcd.. Ma la temperatura cambia lo stesso..

Mi sa che non ho capito bene come funziona sta analogReference  smiley-eek
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22804
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se imposti l'ADC per usare la tensione a 1,1V devi anche adattare la tensione in ingresso sui pin analogici affinché vari da 0 a 1,1V altrimenti non c'è proporzione fra il valore letto ed il riferimento.
Solo che perdi in range, come ti aveva detto anche Paolo.

Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se imposti l'ADC per usare la tensione a 1,1V devi anche adattare la tensione in ingresso sui pin analogici affinché vari da 0 a 1,1V altrimenti non c'è proporzione fra il valore letto ed il riferimento.
Solo che perdi in range, come ti aveva detto anche Paolo.


Ehm.. e come faccio ad adattarla sui pin..!? È una cosa software o hardware???

Comunque (se non sto sparando una cavolata) in uscita dal sensore leggo più o meno 0.2v stando a 20°C.. Anche se lo riduco a 1.1v penso di stare nel range che mi serve.. Se misuro delle temperature penso che mi servono al massimo tra i 10 e i 40°C..
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

LM35 se non sbaglio varia da 0 a 150°C ogni 10mv, quindi al massimo misuri 110°
Per la temperatura ambiente è sufficiente, ma non puoi andare sotto zero per le temperature invernali in nord italia.
Per adattare la tensione potresti usare un partitore resistivo, ma non hai questa necessità.

Controlla la tensione in entrata all'LM ed in uscita, dovrebbe rimanere stabile anche accendendo o spegnendo il display.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In uscita resta stabile, in entrata varia..
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se, a temperatura costante, l'uscita è stabile, ed il riferimento dell'ADC è interno, la temperatura non può variare.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse mi sto sbagliando io.. La tensione in entrata al sensore è quella che prendo da 5v di arduino, e quella in uscita è quella che mando al pin A0.. giusto?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Giusto.
Quindi se la tensione in uscita dal sensore, che è proporzionale alla temperatura non varia: come ti fa a variare la temperatura letta sul display?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

È quello che mi son chiesto anch'io ieri sera..
Comunque, ho misurato la tensione in uscita dal sensore.. sia con l'illuminazione che senza lui fa uscire sempre 0.25v.. Perchè poi arduino me lo legge diversamente se la tensione in uscita è sempre la stessa???
E la risposta di leo è stata
Perché cambia la tensione di riferimento, che normalmente è quella presente su VCC.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che sarebbe stato vero se tu non usassi l'AnalogReference(INTERNAL);
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oddio non saprei proprio cosa dirti.. Provo a postare il codice, magari ho sbagliato io a scrivere qualcosa.. Comunque ho roprovato, confermo che la tensione in uscita dal sensore è sempre 0.25v..

Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float val;

void setup(){
  pinMode(A0, INPUT);
  analogReference(INTERNAL);
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.print("Inizio...");
  delay(500);
}

void loop(){
  lcd.clear();
  val=0;
  
  //leggo valore pin A0
  for(int i=0;i<10;i++){
    val=val+analogRead(A0);
  }
  val=val/10;
  Serial.print("analogRead(A0): "); Serial.println(analogRead(A0)); //stampo analog A0
  
  //converto in temperatura 1.1v
  lcd.setCursor(0,0);
  lcd.print("Temp 1: ");
  lcd.print((1.1 * float(val) * 100.0) / 1024.0);
  lcd.print("^C");
  
  //converto in temperatura 5v
  lcd.setCursor(0,1);
  lcd.print("Temp 2: ");
  lcd.print((5.0 * float(val) * 100.0) / 1024.0);
  lcd.print("^C");
    
  delay(1000);
}
« Last Edit: April 11, 2013, 10:51:54 am by AleCune93 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sono messo a giocare col tuo codice
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  pinMode(A0, INPUT);
  analogReference(INTERNAL);
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.print("Inizio...");
  delay(500);
}

void loop(){
  lcd.clear();
  float temperature = LM35temp(A0, 1.1, 10);
  lcd.setCursor(0,0);
  lcd.print("Temp : ");
  lcd.print(temperature);
  lcd.print("^C");
  delay(1000);
}

float LM35temp(byte p, byte ref, byte cycle)
{
  float readed = 0;
  //leggo valore pin A0
  for(int i=0; i<cycle; i++){
    readed += analogRead(p);
  }
  readed /= cycle;
  Serial.print("analogRead(");
  Serial.print(p);
  Serial.print("): ");
  Serial.println(readed); //stampo la media della lettura
  return (ref * readed * 100.0) / 1024.0;
}

Ho messo una funzione dove gli passi il pin, il riferimento e il numero di letture e restituisce un float con la temperatura.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22804
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L'oscillazione data dall'accensione del display l'ho sperimentata anch'io tempo fa, secondo me se alimenti a parte il display risolvi i tuoi problemi, l'Arduino prende l'alimentazione dalla porta USB e può darsi che tra quello che consuma la scheda e quello che consuma il tuo display, l'assorbimento sia al limite e causi quel calo di tensione che misuri, che poi ti altera la lettura del sensore.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 180
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate il ritardo, ma ultimamente sono un pò incasinato con la scuola smiley-lol

Comunque, proverò quel codice.. Anche se odio le funzioni di questo tipo, non sono mai riuscito a capirle  smiley-cry

Leo, però se io alimento a parte il display, ci sarà sempre qualcosa che mi prenderà energia, anche un semplice led.. Quindi alla fine non risolvo nientre
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22804
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un led sono una decina di mA, la retroilluminazione di un display possono essere 100 mA come anche di più, a seconda del modello (io ne ho uno che "succhia" 240 mA!). Insomma, un display lo senti.
Prova mettendo il display alimentato a parte ed il C da 0.1uF ceramico tra Vin e Gnd dell'LM35 come ti avevo detto, che dovrebbe ovviare agli sbalzi di piccola entità.
Logged


Pages: 1 [2] 3   Go Up
Jump to: