Go Down

Topic: sensore di temperatura LM335z (Read 422 times) previous topic - next topic

amedeodivito

Salve a tutti
Ho un problema con il sensore di temperatura LM335z
Ho eseguito (correttamente) i collegamenti come da schema allegato ma non riesco a capire perchè i valori sono invertiti, nel senso che se scaldo il sensore la temperatura diminuisce e viceversa.
nel codice che allego si può notare come ho risolto con una if e la funzione abs però credo che il problema sia altro.
uso un arduino uno e alimento il sensore con i 5V di arduino stesso.
questo è il semplice codice:
Code: [Select]
float kelvin;
float celsius;

void setup()
{ Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP);
}
void loop()
{ float lettura = analogRead(A0);
  kelvin = ((lettura / 1023) * 500);
  celsius = kelvin - 273.15;
  Serial.print("Lettura analogica: ");
  Serial.print(lettura);
  Serial.print("  -  ");
  Serial.print("Gradi Kelvin: ");
  Serial.print(kelvin);
  Serial.print("  -  Gradi Celsius: ");

  // invertendo i commenti e regolando il potenziometro, visualizza correttamente
  Serial.println(celsius);
  // if(celsius > 0) Serial.print("-"); else Serial.print("+");
  // Serial.println(abs(celsius));
  delay(2000);
}

Qualcuno mi può aiutare?
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

uwefed

Se non hai messo una resistenza pullup esterna temo che la resistenza pullup interna non basta. È troppo alta. Inoltre un entrata analogiva non ha bisogno di un pinMode().

Code: [Select]
float lettura = analogRead(A0);
  kelvin = ((lettura / 1023) * 500);
  celsius = kelvin - 273.15;

L' uso dei tipi di variabili é errato.
Amalog read Ti da un int. non serve una float, anzu peggora la precisione.
Poi per fare il calcolo in float devi dare le costanti in float
percui ((lettura / 1023.0) * 500.0)

Ciao Uwe

amedeodivito

Grazie per la risposta
ho modificato lo sketch ma il risultato non cambia, il valore ottenuto è rovesciato e poi volevo chiedere: ma la resistenza R1 non funge da pullup?
Code: [Select]
float kelvin;
float celsius;
int lettura = 0;

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  lettura = analogRead(A0);
  kelvin = ((lettura / 1023.0) * 500.0);
  celsius = kelvin - 273.15;
  Serial.print("Lettura analogica: ");
  Serial.print(lettura);
  Serial.print("  -  ");
  Serial.print("Gradi Kelvin: ");
  Serial.print(kelvin);
  Serial.print("  -  Gradi Celsius: ");

  // invertendo i commenti e regolando il potenziometro, visualizza correttamente
  Serial.println(celsius);
  // if(celsius > 0) Serial.print("-"); else Serial.print("+");
  // Serial.println(abs(celsius));
  delay(2000);
}
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

uwefed

ma la resistenza R1 non funge da pullup?
Ma Tu quella resistenza l'hai messa? che valore hai scelto?

amedeodivito

certo che si, ho fatto varie prove: da 2k a quella attuale da 6.8k
comunque pensavo fosse chiaro perchè nella foto allegata al primo post c'è
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

uwefed

Hai un tester? misura la tensione che sul pin A0 dove é collegato il sensore.
Ciao Uwe

amedeodivito

Lettura analogica: 603  -  Gradi Kelvin: 294.72  -  Gradi Celsius: 21.57
Lettura analogica: 603  -  Gradi Kelvin: 294.72  -  Gradi Celsius: 21.57
Lettura analogica: 603  -  Gradi Kelvin: 294.72  -  Gradi Celsius: 21.57
il tester segna: 2.84V

tenuto 10 sec. tra le dita il sensore
Lettura analogica: 600  -  Gradi Kelvin: 293.26  -  Gradi Celsius: 20.11
Lettura analogica: 600  -  Gradi Kelvin: 293.26  -  Gradi Celsius: 20.11
Lettura analogica: 600  -  Gradi Kelvin: 293.26  -  Gradi Celsius: 20.11
il tester segna: 2.82V
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

Standardoil

C'è qualcosa che non torna
il sistema non può comportarsi in questa maniera, la mia è una affermazione, non una ipotesi
c'è un errore di cablaggio e/o un guasto da qualche parte, propendo per il primo
ricontrolla, a partire da zero, tutto il cablaggio, controlla anche la bread-board,
visto che hai un potenziometro usalo da solo per provare l'ingresso analogico di Arduino
così ci togliamo anche il dubbio che il potenziometro abbia falsi contatti e "stari a intermittenza" il sensore
comunque togli il potenziometro e usa il sensore senza correzione, per prova va bene, la misura esatta la faremo dopo
in particolare controlla la tensione sul piedino del sensore "e" sul piedino di Arduino
fai casomai una bella foto al tutto....
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

amedeodivito

Allora, in verità sto perdendo le speranze  :smiley-confuse:
il potenziometro da solo funziona perfettamente e sul pin A0 leggo da 0 a 1023
quindi escludiamo sia il clone di arduino che il potenziometro.
allego le foto del cablaggio con e senza potenziometro e dei sensori (comprati in Cina in 2 acquisti separati e da 2 venditori differenti)
in una foto si vede il monitor seriale (sballato) e il sensore non reagisce alla temperatura mentre nel cablaggio con il potenziometro reagisce seppur in maniera rovesciata.
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

amedeodivito

...oops ho dimenticato di allegare le foto
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

Standardoil

A prima vista hai messo il sensore rovescio
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

amedeodivito

Oddio, a me non sembra.
Tieni presente che nella foto con il potenziometro dove il lm335 era al contrario, i cavetti erano invertiti
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

Datman

#12
Apr 23, 2019, 01:01 pm Last Edit: Apr 23, 2019, 01:11 pm by Datman
Ciao, Amedeo
Prova a collegare solo l'anodo (il terminale a destra, con l'LM335 in piedi visto dal lato della sigla) a massa e il catodo (il terminale centrale) attraverso 1kOhm a +5V: che leggi con il tester tra il catodo (resistenza) e massa?
2,84V sono pochini: 284K-273K=11°C!
A 20°C dovresti avere 2,93V.

Inoltre, è alquanto critico un termometro fatto con quella sonda e il convertitore A/D del 328p a 10 bit: hai una risoluzione teorica massima di 5mV, pari a 0,5 gradi (che sarebbe accettabile, se fosse reale), ma devi considerare anche la non linearità del convertitore (su cui bisognerebbe approfondire) e il rumore. L'escursione del convertitore va da 0K (-273°C) a 500K (227°C) a passi di 0,5°C!

Insomma: per fare un termometro ti consiglio di giocare con una sonda DS18B20, che esce in digitale 1-wire senza necessità di un convertitore A/D esterno. :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

amedeodivito

dunque;
mi sono scollegato da arduino
piedino a destra (leggendo la sigla) a massa
piedino centrale resistenza da 1k
altro capo resistenza a +5.07V
tra massa e piedino centrale leggo la stessa tensione = 5.07V
Ci sono solo 10 tipi di persone: quelle che conoscono la numerazione binaria e quelle che non la capiscono.

Datman

#14
Apr 23, 2019, 01:13 pm Last Edit: Apr 23, 2019, 01:15 pm by Datman
L'anodo è collegato a massa?
Che leggi direttamente tra K e A?
Se leggi 5,07V, significa che si è interrotto l'LM335Z.

Rileggi il mio messaggio precedente che ho completato e passa al DS18B20! :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up