Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #165 on: January 03, 2013, 04:41:45 pm » |
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
|
|
|
|
|
0
Offline
Edison Member
Karma: 7
Posts: 2164
Arduino rocks
|
 |
« Reply #166 on: January 03, 2013, 05:59:22 pm » |
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 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
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #167 on: January 03, 2013, 06:20:00 pm » |
Mauro, qui dice chiaramente che sta usando il CAZ (mi viene da ridere con ste sigle  ), 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
|
|
|
|
|
Offline
Sr. Member
Karma: 2
Posts: 465
|
 |
« Reply #168 on: January 03, 2013, 06:21:04 pm » |
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/?ALLSTEPSVe lo posto così da come una pausa in attesa delle prossime ed ennesime prove, magari vi farà fare un sorriso 
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #169 on: January 03, 2013, 06:29:06 pm » |
Quel link replica un altro degli schemi del data-sheet (precisamente il la Fig. 3 sempre di pag.  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
|
|
|
|
|
0
Offline
Edison Member
Karma: 7
Posts: 2164
Arduino rocks
|
 |
« Reply #170 on: January 03, 2013, 06:53:45 pm » |
Mauro, qui dice chiaramente che sta usando il CAZ (mi viene da ridere con ste sigle  ), 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  ; 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
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #171 on: January 04, 2013, 02:40:17 am » |
@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
Offline
Faraday Member
Karma: 49
Posts: 3001
|
 |
« Reply #172 on: January 04, 2013, 09:26:15 am » |
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
|
IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85 Ultimi acquisti: CodeBender: http://codebender.cc/register/?referrer=PaoloP
|
|
|
|
Offline
Jr. Member
Karma: 1
Posts: 70
|
 |
« Reply #173 on: January 05, 2013, 04:46:10 am » |
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
Offline
Faraday Member
Karma: 49
Posts: 3001
|
 |
« Reply #174 on: January 08, 2013, 04:17:35 pm » |
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 CQuesto lo sketch: #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  I Love Sardinia!! 
|
|
|
|
« Last Edit: January 08, 2013, 04:25:05 pm by PaoloP »
|
Logged
|
IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85 Ultimi acquisti: CodeBender: http://codebender.cc/register/?referrer=PaoloP
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #175 on: January 08, 2013, 05:56:18 pm » |
Ottimo Paolo, ora sappiamo che questi sensori non sono una truffa ma funzionano  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! 
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3001
|
 |
« Reply #176 on: January 09, 2013, 05:22:43 am » |
Ok. Vado a comprare una vaschetta per creare cubetti di ghiaccio. Al momento non ne sono fornito.
|
|
|
|
|
Logged
|
IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85 Ultimi acquisti: CodeBender: http://codebender.cc/register/?referrer=PaoloP
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #177 on: January 09, 2013, 05:43:18 am » |
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
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #178 on: January 09, 2013, 05:44:17 am » |
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
Shannon Member
Karma: 386
Posts: 10240
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #179 on: January 09, 2013, 06:16:08 am » |
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
|
|
|
|
|
|