Go Down

Topic: Sensore di temperatura collegato con 10m di filo (Read 19 times) previous topic - next topic

Michele Menniti

è un modo di dire :smiley-sweat: cioè ti sto dicendo fai quello che vuoi purché tu riesca ad ottenere una lettura compatibile con la temperatura reale che misuri. Alla fine mi dirai qual 'è la temperatura che legge il termometro al mercurio e qual è il valore che legge Arduino, che dovrebbe essere tra 110 e 150, ma molto dipende dalla teperatura reale dell'acqua.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

qsecofr

ho fatto qualche test.
come dicevo ora ho 2 lm35dz probabilmente di marche diverse... quindi la prima parte dei dati riguarda un confronto tra questi due sensori. per la seconda parte dei test invece ho realizzato figura 8 prima con filo corto e poi con filo lungo (una decina di metri... non di più). Purtroppo il filo lungo non era ne twistato ne nulla: solo 3 fili di rame da mezzo mm buttati sul pavimento.

lo sketch è quello di Michele però modificato
... perchè se non faccio di testa mia non sono contento...  :smiley-mr-green:
scherzi a parte ho solo aggiunto un calcolo della temperatura  ed adattato lo sketch a fare una doppia misurazione su A0 ed A1.... lo riporterò in calce ma il primo valore è il valore assoluto chiesto da Michele, il secondo è la temperatura calcolata con internal reference... di LEONARDO a 2.56.

Quello che evinco da questi test è:
- gli lm anche identici danno temperature diverse di circa 1 grado.
- attorno allo 0 termico questa differenza può essere anche di 1.5 gradi per via che siamo vicini al  valore limite del sensore
- lo schema di figura 8 funziona: bisogna però usare le resistenze giuste altrimenti il conto temperatura = temperaturaLM -10gradi non risulta.
- sono sensori a risposta piuttosto rettilinea (e ci mancherebbe altro).


Code: [Select]

Temperature ambientali. 2 lm identici con configurazione di default, 20cm di filo.
Pin A0:#87.00#21.75
Pin A1:#91.03#22.76
Pin A0:#86.97#21.74
Pin A1:#91.03#22.76
Pin A0:#86.87#21.72
Pin A1:#91.17#22.79
Pin A0:#86.90#21.72
Pin A1:#91.20#22.80
Pin A0:#86.93#21.73
Pin A1:#91.03#22.76
Pin A0:#86.97#21.74
Pin A1:#91.10#22.77
Pin A0:#86.97#21.74
Pin A1:#91.07#22.77
Pin A0:#86.90#21.72
Pin A1:#91.03#22.76
Pin A0:#86.93#21.73
Pin A1:#91.03#22.76
Pin A0:#86.93#21.73
Pin A1:#91.00#22.75
Pin A0:#86.87#21.72
Pin A1:#91.00#22.75
Pin A0:#86.93#21.73
Pin A1:#91.00#22.75
Pin A0:#87.00#21.75
Pin A1:#91.00#22.75



dopo ventilconvettore.
Pin A0:#93.30#23.32
Pin A1:#97.00#24.25
Pin A0:#93.07#23.27
Pin A1:#97.03#24.26
Pin A0:#93.20#23.30
Pin A1:#97.00#24.25
Pin A0:#93.13#23.28
Pin A1:#97.03#24.26
Pin A0:#93.00#23.25
Pin A1:#96.80#24.20
Pin A0:#93.03#23.26
Pin A1:#97.00#24.25
Pin A0:#93.03#23.26
Pin A1:#96.77#24.19
Pin A0:#93.17#23.29
Pin A1:#96.90#24.22
Pin A0:#93.00#23.25
Pin A1:#96.83#24.21
Pin A0:#92.97#23.24
Pin A1:#96.90#24.22
Pin A0:#92.93#23.23
Pin A1:#96.77#24.19
Pin A0:#93.00#23.25
Pin A1:#96.57#24.14
Pin A0:#92.90#23.22
Pin A1:#96.70#24.17
Pin A0:#92.83#23.21
Pin A1:#96.73#24.18



nel ghiaccio.

Pin A0:#8.40#2.10
Pin A1:#13.87#3.47
Pin A0:#8.47#2.12
Pin A1:#14.00#3.50
Pin A0:#8.67#2.17
Pin A1:#13.93#3.48
Pin A0:#8.63#2.16
Pin A1:#14.00#3.50
Pin A0:#8.53#2.13
Pin A1:#14.00#3.50
Pin A0:#8.73#2.18
Pin A1:#13.97#3.49
Pin A0:#8.77#2.19
Pin A1:#13.93#3.48
Pin A0:#8.87#2.22
Pin A1:#13.93#3.48
Pin A0:#8.83#2.21
Pin A1:#13.87#3.47
Pin A0:#8.97#2.24
Pin A1:#13.90#3.48
Pin A0:#8.90#2.23
Pin A1:#13.80#3.45
Pin A0:#8.97#2.24
Pin A1:#13.83#3.46
Pin A0:#8.90#2.23
Pin A1:#13.87#3.47
Pin A0:#9.00#2.25
Pin A1:#13.73#3.43
Pin A0:#9.10#2.28
Pin A1:#13.80#3.45


figura 8 su a1 a0 standard
Pin A0:#80.70#20.17
Pin A1:#120.37#30.09
Pin A0:#80.73#20.18
Pin A1:#120.47#30.12
Pin A0:#80.70#20.17
Pin A1:#120.70#30.17
Pin A0:#80.80#20.20
Pin A1:#120.60#30.15
Pin A0:#80.80#20.20
Pin A1:#120.57#30.14
Pin A0:#80.73#20.18
Pin A1:#120.73#30.18
Pin A0:#80.77#20.19
Pin A1:#120.73#30.18
Pin A0:#80.77#20.19
Pin A1:#120.80#30.20
Pin A0:#80.83#20.21
Pin A1:#120.87#30.22
Pin A0:#80.87#20.22
Pin A1:#120.63#30.16
Pin A0:#80.63#20.16
Pin A1:#120.70#30.17
Pin A0:#80.90#20.22
Pin A1:#120.73#30.18
Pin A0:#80.73#20.18
Pin A1:#120.70#30.17
Pin A0:#80.83#20.21
Pin A1:#120.73#30.18
Pin A0:#80.97#20.24
Pin A1:#120.83#30.21
Pin A0:#80.87#20.22
Pin A1:#120.83#30.21
Pin A0:#80.80#20.20
Pin A1:#120.90#30.22


ghiaccio.

Pin A0:#5.60#1.40
Pin A1:#48.03#12.01
Pin A0:#5.83#1.46
Pin A1:#48.13#12.03
Pin A0:#5.67#1.42
Pin A1:#48.03#12.01
Pin A0:#5.60#1.40
Pin A1:#48.03#12.01
Pin A0:#5.67#1.42
Pin A1:#48.07#12.02
Pin A0:#5.60#1.40
Pin A1:#48.10#12.02
Pin A0:#5.63#1.41
Pin A1:#48.07#12.02
Pin A0:#5.77#1.44
Pin A1:#48.17#12.04
Pin A0:#5.50#1.37
Pin A1:#48.03#12.01
Pin A0:#5.60#1.40
Pin A1:#48.07#12.02
Pin A0:#5.50#1.37
Pin A1:#48.00#12.00
Pin A0:#5.70#1.42
Pin A1:#48.03#12.01
Pin A0:#5.57#1.39
Pin A1:#48.03#12.01
Pin A0:#5.47#1.37
Pin A1:#48.10#12.02



ghiaccio + 10 metri di filo

A1:#52.20#13.05
Pin A0:#8.57#2.14
Pin A1:#52.13#13.03
Pin A0:#9.07#2.27
Pin A1:#52.20#13.05
Pin A0:#8.83#2.21
Pin A1:#52.30#13.07
Pin A0:#8.83#2.21
Pin A1:#52.43#13.11
Pin A0:#9.00#2.25
Pin A1:#52.43#13.11
Pin A0:#9.03#2.26
Pin A1:#52.73#13.18
Pin A0:#9.33#2.33
Pin A1:#52.73#13.18
Pin A0:#9.23#2.31
Pin A1:#52.83#13.21
Pin A0:#9.60#2.40
Pin A1:#52.73#13.18
Pin A0:#9.57#2.39
Pin A1:#52.73#13.18
Pin A0:#9.67#2.42
Pin A1:#52.97#13.24


Ambient + 10 metri di filo

Pin A1:#122.07#30.52
Pin A0:#82.23#20.56
Pin A1:#122.03#30.51
Pin A0:#82.57#20.64
Pin A1:#122.23#30.56
Pin A0:#82.30#20.57
Pin A1:#121.97#30.49
Pin A0:#82.17#20.54
Pin A1:#122.13#30.53
Pin A0:#82.17#20.54
Pin A1:#122.20#30.55
Pin A0:#82.40#20.60
Pin A1:#122.10#30.52
Pin A0:#82.40#20.60
Pin A1:#122.07#30.52
Pin A0:#82.03#20.51
Pin A1:#122.03#30.51
Pin A0:#82.40#20.60
Pin A1:#122.00#30.50
Pin A0:#82.40#20.60
Pin A1:#122.10#30.52
Pin A0:#82.37#20.59
Pin A1:#121.77#30.44
Pin A0:#82.50#20.62
Pin A1:#122.17#30.54
Pin A0:#82.33#20.58
Pin A1:#122.03#30.51
Pin A0:#82.40#20.60
Pin A1:#122.00#30.50
Pin A0:#82.30#20.57
Pin A1:#122.10#30.52

corporea
Pin A0:#142.47#35.62
Pin A1:#181.87#45.47
Pin A0:#142.27#35.57
Pin A1:#181.80#45.45
Pin A0:#142.10#35.53
Pin A1:#181.93#45.48
Pin A0:#142.13#35.53
Pin A1:#181.83#45.46
Pin A0:#142.03#35.51
Pin A1:#181.70#45.43
Pin A0:#142.10#35.53
Pin A1:#181.67#45.42
Pin A0:#142.00#35.50
Pin A1:#181.77#45.44
Pin A0:#142.07#35.52
Pin A1:#181.83#45.46
Pin A0:#141.97#35.49
Pin A1:#181.80#45.45
Pin A0:#142.10#35.53
Pin A1:#181.63#45.41


Code: [Select]
int tempPin = A0;  //inizializzazione del pin di Arduino
int tempPin2 = A1;

float lettura = 0; // impostazione valore iniziale della variabile
const int media = 30; //n° letture per calcolo media
void setup()
{
  Serial.begin(9600); //apertura porta seriale, set della velocità a 9600 bps
  analogReference(INTERNAL); //setta il riferimento interno a 1,1V
}

void loop()
{
  lettura = leggiPin(A0);
Scrivi (0, lettura);
lettura = leggiPin(A1);
Scrivi (1, lettura); 
 
delay(1000); //pausa
}




float leggiPin(byte pin)
{
  float lettura = 0;
  lettura = 0; //azzera il totalizzatore
  for (int i = 0; i < media; i++) {
      lettura += analogRead(pin); //totalizza tutti i valori letti dall'ADC
    }
  lettura = lettura / media; //calcolo del valore medio di lettura
  return (lettura);
  digitalWrite(pin, LOW);
  delay(10);
  }
 
void Scrivi(byte pin, float lettura)
{
  Serial.print ("Pin A");
  Serial.print (pin);
  Serial.print (":#");
  Serial.print(lettura); //lettura valore ADC
  float voltage = (lettura * 2560 /1024 );  // /100;


  Serial.print ("#");
  Serial.println(voltage /10); //lettura valore ADC

   
   
   
   }


Michele Menniti

#212
Jan 12, 2013, 02:23 pm Last Edit: Jan 12, 2013, 02:30 pm by Michele Menniti Reason: 1
che bordello :smiley-eek-blue: meno male che tu ti capisci :D
Se vuoi che possa fare una veloce analisi di questi dati, mi dovresti estrapolare SOLO quelli fatti con cavo 10mt e fig. 8, e per ogni misura fatta mi dovresti dire:
1 - Misura REALE dell'ARef (da multimetro, tra ARef e GND, basta una, tanto quella tensione è fissa)
2 - Temperatura presunta (fornita da altro termometro e NON da altro LM)
3 - Media aritmetica delle letture dell'ADC

La temperatura presunta è fondamentale, già vedi una differenza di 10mV tra i due LM, come fai a sapere quale dei due è più vicino alla realtà o se entrambi non sono sballati? Serve per forza un riferimento esterno, come un termostato, mentre per la temperatira corporea va bene il valore dato da un termometro specifico

Perché parli ti temperatura LM - 10gradi? Secondo me le cose non stanno così. Il data-sheet parla di una differenza Tamb/Tmis di 10°C ma sembra far partire i -5°C da 0mV, di conseguenza non puoi pensare che 200mV siano 20° a cui devi toglierne 10, bensi che siano 15° dai quali poi togliere i 10. Ma se hai altre interpretazioni spiega pure, io per il momento non ho approfondito, sto solo facendo la scala di linearità su misure relative.

EDIT: il mio piccolo sketch mi permetteva di fare copia/incolla dei valori reali per poter fare subito media ed altri calcoli; col tuo non lo posso fare perché se copio, prendo tutto ciò che hai fatto uscire sul SM :(
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

qsecofr


che bordello :smiley-eek-blue: meno male che tu ti capisci :D
Se vuoi che possa fare una veloce analisi di questi dati, mi dovresti estrapolare SOLO quelli fatti con cavo 10mt e fig. 8, e per ogni misura fatta mi dovresti dire:
1 - Misura REALE dell'ARef (da multimetro, tra ARef e GND, basta una, tanto quella tensione è fissa)
2 - Temperatura presunta (fornita da altro termometro e NON da altro LM)
3 - Media aritmetica delle letture dell'ADC

La temperatura presunta è fondamentale, già vedi una differenza di 10mV tra i due LM, come fai a sapere quale dei due è più vicino alla realtà o se entrambi non sono sballati? Serve per forza un riferimento esterno, come un termostato, mentre per la temperatira corporea va bene il valore dato da un termometro specifico

Perché parli ti temperatura LM - 10gradi? Secondo me le cose non stanno così. Il data-sheet parla di una differenza Tamb/Tmis di 10°C ma sembra far partire i -5°C da 0mV, di conseguenza non puoi pensare che 200mV siano 20° a cui devi toglierne 10, bensi che siano 15° dai quali poi togliere i 10. Ma se hai altre interpretazioni spiega pure, io per il momento non ho approfondito, sto solo facendo la scala di linearità su misure relative.

EDIT: il mio piccolo sketch mi permetteva di fare copia/incolla dei valori reali per poter fare subito media ed altri calcoli; col tuo non lo posso fare perché se copio, prendo tutto ciò che hai fatto uscire sul SM :(


Allora probabilmente non ho capito come o cosa vuoi misurare... non chiedermi di rileggere per l'ennesima volta queste 13 pagine perchè cedo (la tachipirina in tal senso mi mette ancora più sonnolenza)  :smiley-red:
Non mi interessa sapere quale dei due LM è più giusto dell'altro... almeno per me non è assolutamente interessante: o questi sensori sono tutti tarati uguali o non lo sono----> non lo sono: i primi 2 gruppi di dati ne danno chiara testimonianza: c'è un grado di differenza. Però sono rettilinei e quindi se riesci a tararli puoi ottenere buone precisioni. In teoria visti i test degli altri giorni con l'i2c il sensore montato su A1 è un po' più vicino all'i2c quindi da un lato potrei dire che è più vicino ma siccome A1 misura sempre 1 grado di più ed il ghiaccio per definizione si scioglie a 0 gradi possiamo concludere che A0 si avvicina maggiormente allo 0 e quindi è più giusto A0....ma ripeto: stabilire se l'lm di destra o quello di sinistra sia più preciso non credo sia di interesse.

Il Vref non te l'ho misurato.... ma ho usato quello interno dell'arduino leonardo a 2.56 per fare i conteggi.

Se vuoi estrappolare il valore crudo che stampavi tu ti basta copiare il primo numero: non potevo fare diversamente senza leggere affidabilmente A1 ed A0: ho messo un # per separare i dati in caso uno interessi tirarseli dentro su excel però alla fine sono 10 numeri in croce e sono anche tutti piuttosto stabili ed uguali (differenze inferiori al decimo di grado) pertanto trovo poco sensato fare medie.

La temperatura corporea non l'ho riportata ma era di 36.2 gradi: però qui hai la comparazione diretta tra due lm appaiati corpo a corpo che hanno 2 configurazioni dietro differenti e vedi molto molto chiaramente il comportamento.... forse non mi sono spiegato bene di come ho fatto il confronto... ho 2 lm35 appaiati inseriti in un palloncino isolante e sono attacccati con 20 cm di filo rigido ad una basetta. Dalla basetta prendo le due configurazioni: una configurazione è attaccata standard e così rimane dall'inizio alla fine mentre l'altra prima è standard poi ha la figura 8, prima con filo corto poi attaccando 10 metri di filo che fa andata e ritorno alla basetta... ma 1 LM rimane sempre in configurazione standard a misurare la vera temperatura.
I 10 gradi tornano con quanto riferito dal datasheet e sono ben visibili appena ho attaccato un lm in configurazione figura 8: l'altra sera avevo approntato la prova così così ma avevo sbagliato di brutto le resistenze da 2k denunciando variazioni rispetto all'i2c di 7 gradi... era colpa mia. Ora uso tutte resistenze con errore 2%.

in sunto quello che ho ricavato dalle mie prove è che:
il datasheet di figura 8 è proprio giusto...funziona e funziona bene almeno nei 10 metri di filo buttato sul pavimento che ho usato  io...
se non rispetti le resistenze ci sono degli offset diversi.








Michele Menniti

Certo che non ti chiedo di rileggere tutto, ed il tuo ultimo intervento mi convince....dal tuo punto di vista; quindi inutile prendere i tuoi dati, visto che possiamo dire di aver appurato che lo schema di Fig. 8 funziona. A questo punto non mi servono nemmeno i dati di Paolo, ma solo quelli di Alberto, al fine di tarare il software per il SUO sensore.
Ti chiedo solo di spiegarmi con una maggiore chiarezza cosa hai usato in precedenza come partitori e cosa stai usando ora, a parte il "2%" non dici se i valori sono 2k/200 o sempe 2k2/220.
Visto che hai appurato con certezza questa cosa ti chiedo di dirmi in che termini secondo te Alberto si sta discostando dal valore reale, considerando che usa delle 2k2/220 al 5% invece di 2k/200 all'1%, puoi anche ignorare le tolleranze, parliamo solo di quel circa 10% di differenza dei valori; se riesci a darmi una costante posso inserirla nel conteggio e fare anche la previsione per il circuito definitivo.
Grazie.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up