Arduino Forum

International => Italiano => Generale => Topic started by: amedeodivito on Apr 22, 2019, 08:54 pm

Title: sensore di temperatura LM335z
Post by: amedeodivito on Apr 22, 2019, 08:54 pm
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?
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 22, 2019, 09:56 pm
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
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 22, 2019, 10:53 pm
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);
}
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 22, 2019, 11:30 pm
ma la resistenza R1 non funge da pullup?
Ma Tu quella resistenza l'hai messa? che valore hai scelto?
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 22, 2019, 11:35 pm
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'è
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 23, 2019, 12:10 am
Hai un tester? misura la tensione che sul pin A0 dove é collegato il sensore.
Ciao Uwe
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 12:15 am
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
Title: Re: sensore di temperatura LM335z
Post by: Standardoil on Apr 23, 2019, 07:03 am
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....
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 12:15 pm
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.
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 12:23 pm
...oops ho dimenticato di allegare le foto
Title: Re: sensore di temperatura LM335z
Post by: Standardoil on Apr 23, 2019, 12:28 pm
A prima vista hai messo il sensore rovescio
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 12:43 pm
Oddio, a me non sembra.
Tieni presente che nella foto con il potenziometro dove il lm335 era al contrario, i cavetti erano invertiti
Title: Re: sensore di temperatura LM335z
Post by: Datman on Apr 23, 2019, 01:01 pm
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. :-)
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 01:11 pm
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
Title: Re: sensore di temperatura LM335z
Post by: Datman on Apr 23, 2019, 01:13 pm
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! :-)
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 23, 2019, 01:28 pm
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
1) hai le mani fredde  ;)  ;)  ;)  ;)
2) i 5V non sono perfettamente 5V ma un po di meno. Su una foto ho visto 4,89V.

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
3) prova di girare il LM335. sembra messo al rovescio.

Ciao Uwe
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 23, 2019, 01:35 pm
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.
Giusto

[quote author=Datman }
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!
[/quote]
Un po meno giusto.
Non consideri la precisione del LM335 che é data dal produttore come 1°C se non calibrato e 0,5°C se hai calibrato il LM335 col entrata adjust.
Per questo l' errore della temperatura é maggiore perché devi sommare l' errore del LM335 con quella del convertitore ADC e con la precisione della tesione di alimentazione 5V che prendi come riferimento.

Ciao Uwe
Title: Re: sensore di temperatura LM335z
Post by: Datman on Apr 23, 2019, 01:36 pm
Ovviamente, ma mi stavo limitando a considerare la conversione.

Dalle curve si vede che la corrente deve essere almeno 0,7mA. Perciò, con Vcc=5V e circa 3V sulla sonda, la resistenza massima utilizzabile risulta: 2/0,7=3kOhm circa
Title: Re: sensore di temperatura LM335z
Post by: uwefed on Apr 23, 2019, 01:39 pm
Dalle curve si vede che la corrente deve essere almeno 0,7mA. Perciò, con Vcc=5V e circa 3V sulla sonda, la resistenza massima utilizzabile risulta: 2/0,7=3kOhm.
Considerazione giusta che avevo fatto giá all inizio. Vito che il To usa una 1kOhm dovremmo stare nel range.
Il datasheed dice che la corrente deve essere tra 0,45mA e 5mA.

Ciao Uwe
Title: Re: sensore di temperatura LM335z
Post by: Standardoil on Apr 23, 2019, 01:40 pm
Per lo op, hai ragione, ho preso una cantonata, scusami
Comunque quei numeri si spiegano solo con un errato collegamento, o sensore guasto
Facendo riferimento alla foto col tester, in quelle condizioni cosa misuri direttamente al pin centrale del sensore?
Title: Re: sensore di temperatura LM335z
Post by: Datman on Apr 23, 2019, 01:42 pm
>> Il datasheet dice che la corrente deve essere tra 0,45mA e 5mA.

Uh, è vero. Il grafico logaritmico va a passi di 2, non di 1! Quindi non è 0,7, ma 0,4 (secondo il grafico) e la resistenza massima sarà 4k7 (valore commerciale).
Title: Re: sensore di temperatura LM335z
Post by: amedeodivito on Apr 23, 2019, 02:23 pm
purtroppo si sta creando un po di confusione
io faccio le prove a seconda dei consigli che mi state gentilmente dando
quando il tester misurava 4.87 ero collegato ai 5V di arduino, successivamente per rendere più stabile la tensione ho collegato il sensore all'alimentatore e per questo segnava +5.07V.
ricomincio da capo.
sensore collegato ad arduino + monitor seriale e resistenza 2.2K tra catodo (piedino centrale) a VCC arduino.

ho acquistato 4 sensori una volta e poi avendo avuto il dubbio che non funzionassero li ho riacquistati da un altro venditore, ora capisco che la qualità cinese potrebbe essere scarsa ma devo dire che di componenti ne ho acquistati tantissimi e non ho mai avuto un problema.
premesso questo ho provato tutti e 8 i sensori in mio possesso e tutti hanno lo stesso risultato.
...che avessero sbagliato a scrivere la sigla sul sensore???????
allego le foto delle ultime prove effettuate.
e grazie per la pazienza.