Pages: 1 ... 10 11 [12] 13 14 ... 17   Go Down
Author Topic: Sensore di temperatura collegato con 10m di filo  (Read 12882 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

io la pnso così, senza scervellarmi troppo, dopo aver fatto esperienza con le termocoppie. Quando facevamo ci circuiti basati sulle logiche e su uno stadio di ingresso analogico, c'era sempre un circuito di compensazione dello 0 o dell'offset, per compensare le differenze tra sensori IDENTICI ma con differenti comportamenti. Oggi tutto ciò si realizza via software, quindi l'nica verificada fare è quella della linearità delle misure nel range di temperatura, se da -5 a 40°C hai sempre 1,5 o 6°C in più li compensi via SOFTWARE e buonanotte.
Se invece vuoi proprio comprendere i motivi del comportamento del sensore rispetto al data-sheet, li devi ricercare nei numerosi grafici che di solito allegano, i fattori che influenzano un sensore sono tanti, basta che uno di questi sia "presente" ed ecco la differenza. Semmai dovresti provare 2-3 LM35 o 2-3 sensori I2C uguali per vedere se si comportano tutti allo stesso modo, ma confrontare un I2C con un LM35 è una prova inutile, purtroppo.
Logged

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

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, ho due sensori di temperatura un LM35DZ e un LM35CAZ,bene, tutte e due funzionano molto molto bene. Ma appena lo collego con un filo dove all'interno ci sono tre fili e una bella schermatura che protegge il tutto.
Il problema è che collegando il sensore con il filo 10m mi da una temperatura poco stabile cioè a quando ho 13 gradi poi mi da 30 ecco guardate anche voi, il delay è di 1000
Code:
Celsius, 30.27
 Celsius, 15.63
 Celsius, 19.04
 Celsius, 24.90
 Celsius, 20.02
 Celsius, 19.53
 Celsius, 19.53
 Celsius, 23.44
 Celsius, 15.63
 Celsius, 16.11
 Celsius, 15.14
 Celsius, 33.20
 Celsius, 31.74
 Celsius, 25.39
 Celsius, 31.25
 Celsius, 17.09
 Celsius, 21.00
 Celsius, 24.41
 Celsius, 21.00
 Celsius, 16.11
 Celsius, 20.51
 Celsius, 27.34
 Celsius, 16.11
 Celsius, 27.34
 Celsius, 21.00
 Celsius, 24.90
 Celsius, 17.09
 Celsius, 17.58
 Celsius, 24.41
 Celsius, 17.58
 Celsius, 18.55
 Celsius, 16.60
 Celsius, 16.11
 Celsius, 28.32
 Celsius, 20.51
 Celsius, 22.46
 Celsius, 23.44
 Celsius, 20.51
 Celsius, 16.60
 Celsius, 17.09
 Celsius, 21.48
 Celsius, 24.41
 Celsius, 23.93
 Celsius, 24.90
 Celsius, 18.07
 Celsius, 15.63
 Celsius, 22.46
 Celsius, 24.41
 Celsius, 16.11
 Celsius, 15.14
 Celsius, 30.76
 Celsius, 23.93
 Celsius, 21.00
 Celsius, 16.60
 Celsius, 19.53
 Celsius, 20.51
la domanda che vi voglio fare è perchè ho questi sbalzi di temperature?? e dovuto al filo o a che cosa?

Da quello che c'è nel datasheet il DZ non dovrebbe usarlo con le resistenze, perchè nasce per temperature che vanno da 0 a 100°C, invece il CAZ è adatto da -40 a 110 °C. Ora se alberto facesse la prova del circuito 8 usando il CAZ potremmo scoprire che lavora correttamente (potremmo???).

@qsecofr
Non ho avuto tempo per guardare il datasheet del tuo sensore che dovrebbe essere microchip. Nel mio c'è la possibilità di impostare la risoluzione mi pare anche 10 bit o meno,  ma a 13 bit cambia il modo di interpretare i dati. Io per sicurezza ho scritto codice per il se95, non mi sono voluto fidare di ciò che c'è in giro anche se devo dire che c'è molto poco.

Ciao.

Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mauro, qui dice chiaramente che sta usando il CAZ (mi viene da ridere con ste sigle smiley-yell), quindi il problema non si pone; ma tu come deduci da quel data-sheet se uno schema è per un sensore o per l'altro, solo dal range di temperatura che misura? Non potrbbe essere che il DZ riesca a misurare pochi gradi in negativo proprio in virtù di quel partitore che potrebbe agire sui riferimenti di tensione?
Logged

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

Offline Offline
God Member
*****
Karma: 2
Posts: 536
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ragazzi... non voglio essere un altro che entra in questo topic.. ma è da qualche giorno che seguo questa discussione e così questa sera guardando in internet ho trovato questo..
http://www.instructables.com/id/Waterproof-a-LM35-Temperature-Sensor/?ALLSTEPS
Ve lo posto così da come una pausa in attesa delle prossime ed ennesime prove, magari vi farà fare un sorriso  smiley-twist
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quel link replica un altro degli schemi del data-sheet (precisamente il la Fig. 3 sempre di pag. smiley-cool per circuiti ad alta impedenza, con una sola R in serie all'OUT...., il resto più o meno si è detto e fa parte dei perfezionamenti finali: completo isolamento del sensore con guaine termorestringenti e tubetto isolante, e la testa racchiusa in un materiale metallico (quello credo sia rame) per preservare il circuito da problemi di auto-riscaldamento. Però le immagini sono ben fatte, quindi avere un riferimento da "copiare alla fine è una cosa molto buona, grazie!
Logged

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

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mauro, qui dice chiaramente che sta usando il CAZ (mi viene da ridere con ste sigle smiley-yell), quindi il problema non si pone; ma tu come deduci da quel data-sheet se uno schema è per un sensore o per l'altro, solo dal range di temperatura che misura? Non potrbbe essere che il DZ riesca a misurare pochi gradi in negativo proprio in virtù di quel partitore che potrebbe agire sui riferimenti di tensione?

Ok, non ricordavo che stesse usando il CAZ smiley-grin ; chissa forse è per questo che escono misure a CAZ.

Nella pagina 3 c'è:

LM35, LM35A               -55°C to 150°C
LM35C, LM35CA           -40°C to 110°C
LM35D                           0°C to 100°C

L'ho scritto senza compiarlo dal datascheet, quindi sarà leggermente diverso.
Quindi io ho pensato che tutti quelli con C hanno.....quelli con la D non possono misurare temperature sotto lo 0.

Ciao.


Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Offline Offline
Sr. Member
****
Karma: 7
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@qsecofr
Non ho avuto tempo per guardare il datasheet del tuo sensore che dovrebbe essere microchip. Nel mio c'è la possibilità di impostare la risoluzione mi pare anche 10 bit o meno,  ma a 13 bit cambia il modo di interpretare i dati.

[/quote]
si anche il mio si può variare la risoluzione...l'interpretazione non più di tanto: c'è un bit in più o in meno nei decimali e siccome questi bit sono nella parte più significativa bisogna stare attenti a come li sposti a dx... ha anche un termostato interno che attiva eventualmente un pin.... sulla carta è abbastanza bello.
Magari provo a mettergli in qualche modo un'aletta decente che non subisca autoriscaldamento... solo che il coso è respirabile.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6572
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi è arrivato poco fa l'ultimo ordine: all'interno un DS18B20 e un LM35DZ.
Avevo già un termistore NTC 503. Domani li monto tutti e tre affiancati su una bread board e faccio un confronto.
Logged

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

Offline Offline
Full Member
***
Karma: 3
Posts: 133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho usato LM36 per monitorare la temperatura di un termosifone, massimo 50 - 60 gradi e dopo un po' di tempo il sensore non ha funzionato piu'. A qusto punto ho il dubbio che esistano in giro chip con specifiche fuori dei datasheet.
Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6572
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi è arrivato poco fa l'ultimo ordine: all'interno un DS18B20 e un LM35DZ.
Avevo già un termistore NTC 503. Domani li monto tutti e tre affiancati su una bread board e faccio un confronto.

Ecco qui:
Ho sulla breadboard un Dallas 18b20, un LM35DZ e un termistore 50K.
ho monitorato anche la temperatura interna del 328 (ma l'ho calibrata sulla media degli altri, quindi non fa testo)

Questo è quello che mi ha stampato:
Dallas: 22.12 C
Termistor: 23.44 C
LM35: 21.48 C
Internal Temperature: 22.7 C

Dallas: 22.12 C
Termistor: 23.44 C
LM35: 21.48 C
Internal Temperature: 22.7 C

Dallas: 22.12 C
Termistor: 23.44 C
LM35: 21.48 C
Internal Temperature: 22.7 C


Questo lo sketch:
Code:
#include <OneWire.h>
#include <DallasTemperature.h>

#define SENSORLM35 A0
#define THERMISTORPIN A1        
#define THERMISTORNOMINAL 50000      
#define TEMPERATURENOMINAL 25  
#define NUMSAMPLES 5
#define BCOEFFICIENT 3950
#define SERIESRESISTOR 8500    
int samples[NUMSAMPLES];

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  // locate devices on the bus
  Serial.print("Locating devices...");
  sensors.begin();
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
  // report parasite power requirements
  Serial.print("Parasite power is: ");

  if (sensors.isParasitePowerMode())
    Serial.println("ON");
  else
    Serial.println("OFF");

  if (!sensors.getAddress(insideThermometer, 0))
    Serial.println("Unable to find address for Device 0");

  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();
  sensors.setResolution(insideThermometer, 12);
  Serial.print("Device 0 Resolution: ");
  Serial.println(sensors.getResolution(insideThermometer), DEC);
  Serial.println();
}

void loop (void){
  analogReference(DEFAULT);
  Dallas();
  Termistor();
  LM35();
  InternalTemp();
  Serial.println();
  delay(3000);
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Dallas: ");
  Serial.print(tempC);
  Serial.println(" C");
}

void Dallas(void)
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  printTemperature(insideThermometer); // Use a simple function to print out the data
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

void Termistor(void) {
  uint8_t i;
  float average;
  float temp;

  // take N samples in a row, with a slight delay
  for (i=0; i< NUMSAMPLES; i++) {
    samples[i] = analogRead(THERMISTORPIN);
    delay(10);
  }

  // average all the samples out
  average = 0;
  for (i=0; i< NUMSAMPLES; i++) {
    average += samples[i];
  }
  average /= NUMSAMPLES;

  //  Serial.print("Average analog reading ");
  //  Serial.println(average);

  temp = temperature(average);
  Serial.print("Termistor: ");
  Serial.print(temp);
  Serial.println(" C");
}

float temperature (float reading)
{
  // convert the value to resistance
  reading = 1023 / reading - 1;
  reading = SERIESRESISTOR / reading;
  //  Serial.print("Thermistor resistance ");
  //  Serial.println(reading);

  float steinhart;
  steinhart = reading / THERMISTORNOMINAL;     // (R/Ro)
  steinhart = log(steinhart);                  // ln(R/Ro)
  steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart;                 // Invert
  steinhart -= 273.15;                        // convert to C
  return steinhart;
}

void InternalTemp()
{
  Serial.print("Internal Temperature: ");
  Serial.print(GetTemp(),1);
  Serial.println(" C");
}

double GetTemp(void)
{
  unsigned int wADC;
  double t;

  // The internal temperature has to be used
  // with the internal reference of 1.1V.
  // Channel 8 can not be selected with
  // the analogRead function yet.

  // Set the internal reference and mux.
  ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
  ADCSRA |= _BV(ADEN);  // enable the ADC
  delay(20);            // wait for voltages to become stable.
  ADCSRA |= _BV(ADSC);  // Start the ADC
  // Detect end-of-conversion
  while (bit_is_set(ADCSRA,ADSC));
  // Reading register "ADCW" takes care of how to read ADCL and ADCH.
  wADC = ADCW;
  // The offset of 324.31 could be wrong. It is just an indication.
  t = (wADC - 333.31 ) / 1.22;
  // The returned temperature is in degrees Celcius.
  return (t);
}

void LM35()                     // run over and over again
{
  analogRead(SENSORLM35);
  //getting the voltage reading from the temperature sensor
  int reading = analogRead(SENSORLM35);  
  float voltage = reading * 5.0;
  voltage /= 1024.0;
  float temperatureC = (voltage - 0) * 100 ;
  Serial.print("LM35: ");
  Serial.print(temperatureC);
  Serial.println(" C");
}

Ho unito più codici trovati in giro senza armonizzare costanti e stile di codifica.

EDIT: Si, a casa mia, senza riscaldamento acceso, ci sono al momento 21 °C  smiley-mr-green
I Love Sardinia!!  smiley-kiss
« Last Edit: January 08, 2013, 04:25:05 pm by PaoloP » Logged

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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo Paolo, ora sappiamo che questi sensori non sono una truffa ma funzionano smiley-grin
Scherzi a parte, stiamo cercando solo di risolvere il problema di Alberto, mentre tu hai solo dato risposta a qs, mi pare, che aveva fatto una prova simile ottenendo risultati strani.
Se vuoi essere utile a questo Topic dovresti usare il solo LM35, configurarlo come da famosa Fig. 8 e poi ripetere le prove alle varie temperature, ma usando il mio umilissimo sketch che si limita a rilevare i valori decimali senza alcuna conversione, ed eseguendo le rilevazioni come da mie indicazioni, così creo un file parallelo per te e vediamo come procede.
Se non ti va di fare queste prove sappi che altro non serve, quindi non te la prendere, però vista la problematica sollevata da qs e la tua dimostrazione si potrebbe aprire un altro Topic per fare altre verifiche.
Ah, Alberto ha avuto un piccolo problema personale che gli ha impedito di fare altre prove, ricominceremo quando sarà rientrato a Torino, credo, ecco perché se a te andasse di "prendere il suo posto" sarebbe cosa eccellente! smiley-wink
Logged

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6572
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok. Vado a comprare una vaschetta per creare cubetti di ghiaccio. Al momento non ne sono fornito.
Logged

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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non vale la pena, penso, Albero usava i bicchieri di carta, a meno che non ti serva comunque... invece sincerati di avere le 4 R che ti servono: dovrebbero essere 2 da 200 ohm e 2 da 2000 ohm, tutte all'1%; in alternativa replichi proprio la situazione di Alberto ed usi 2 da 220 e 2 da 2k2 al 5%; ricorda anche di prendere 10 mt di cavo twisted; riguardo il terminale del sensore lui ha usato la bread, se per te è uguale sarebbe decisamente meglio realizzare un microscopico PCB su millefori, col sensore sporgente in orizzontale su uno dei 4 lati, così sarà comodo sia per la prova ghiaccio che per quella coprporea.
Logged

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

Offline Offline
Sr. Member
****
Karma: 7
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scherzi a parte, stiamo cercando solo di risolvere il problema di Alberto, mentre tu hai solo dato risposta a qs, mi pare, che aveva fatto una prova simile ottenendo risultati strani.

ma strani... non più di tanto... però ho notato che tra sensori di diverse tipologie che dovrebbero essere tarati e sicuri eccetera ci sono gradi di differenza... il test di paolo lo conferma ulteriormente.
L'idea sui test di Michele non l'ho accantonata: ho anche tagliato i miei 10 metri di filo per vedere se ci sono differenze sulle lunghe distanze solo che sono "depresso" e "smotivato": questi sensori sono "belli" nel momento che tu li metti su e non serve correggere nulla... e già in configurazione tipica direi che la cosa non è confermata... in configurazione figura 8 ci sono (a memoria) 6-7 gradi di differenza e comunque diversi da quanto indicherebbe il datasheet... se ho da mettermi a tararli col ghiacchio tanto vale che compro una ntc qualsiasi.
Volevo però chiedere lumi a Michele: sul datasheet figura 8 si indica Tambiet +10 e 0.10Volt per grado... quel Tambient + 10 significa che io avrei da misurare 10 gradi più di quello che è? in pratica se ho una stanza da 20gradi misuro 30? Si però allora perchè il range è a -5 e non a -10?


Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 410
Posts: 11985
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, a questa cosa io ho dato una mia interpretazione e mi sto basando su quella, la prova contraria l'avremo SOLO a fine test.
Io interpreto che quei partitori "sfasano" la lettura standard, in base alla quale dovresti avere 0mV a 0°C; in base a ciò che scrivono il campo di misura parte da -5°C che però sono indicati (lo spiegano per capire come si arriva ai mV) con uno sfasamento di +10°C.
In pratica, TEORICAMENTE dovremmo avere 0mV quando la T ambiente è -5°C, DI FATTO abbiamo + 10°C, quindi 100mV a -5°C e quindi 0°C dovrebbero corrispondere a circa 150mV. Ora il ragionamento fila con le prove di Alberto, anche se c'è una sfasatura media di circa 2°C (quindi 20mV), però il riferimento che abbiamo è un termostato ambiente che ha già dimostrato di dare ±1-2°C, quindi i conti potrebbero tornare, però abbiamo il dubbio sul tipo di misura fatta da Alb a 0°C, ecco perché se vi metteste a replicare anche Voi due le stesse prove con lo stesso metodo e circuito, potremmo fare un lavoro quasi scientifico. Ma in aggiunta a quanto fatto da Alberto Voi dovreste:
1 - misurare OGNI VOLTA che fate una rilevazione ANCHE la tensione di alimentazione
2 - disporre di un termometro ambiente trasportabile e sufficientemente preciso (o almeno lineare)
Un errore grave che si fa è non tener conto della tensione di alimentazione, per noi ormai è tardi (dovremmo ricominciare daccapo!) usare l'INTERNAL a 1,1V, ma se volete possiamo farlo con noi tre, avendo così un riferimento certo; invece con DEFAULT il riferimento NON è 5V bensì la tensione di alimentazione, allora voi capite che 5/1024 non è uguale a 4,45/1024 o a 5,12/1024, per cui ogni step dell'ADC assume un valore diverso e bisogna tenerne conto, altrimenti si esce pazzi mentre il povero sensore sta facendo il suo lavoro come si deve.
Io sono a vostra disposizione, se avete dubbi chiedete e quando volete iniziamo.
Logged

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

Pages: 1 ... 10 11 [12] 13 14 ... 17   Go Up
Jump to: