Sensore di temperatura collegato con 10m di filo

Che non possa dare tensioni negative senza avere un riferimento negativo è certo. Difatti in caso di alimentazione solo positiva il range del sensore credo diventi 0°C-150°C, correggetemi se sbaglio.

leo72:
Che non possa dare tensioni negative senza avere un riferimento negativo è certo. Difatti in caso di alimentazione solo positiva il range del sensore credo diventi 0°C-150°C, correggetemi se sbaglio.

Hai guardato la figura del data-sheet a cui facevo riferimento nei primi post di questa discussione, a cui Alberto dovrebbe esssersi attenuto?

Sì, ho visto.
Se sta usando quello schema, allora anche secondo me dovrebbe leggere Tamb+10°C. Però a questo punto sarebbe utile un multimetro e leggere la tensione sul pin Vout e confrontarla con quanto legge sul pin analogico.

MauroTec:
Scusate, io l'ho buttata li e sono andato via, ora sono tornato e ho letto tutto. Grazie Menniti per la fiducia ricambiata di sicuro.
Però c'è un però, forse più di uno, vediamone alcuni:
Però 10mt di filo sono tanti, se ho esperienza mi devo porre il problema prima ancora di cominciare. Se quello che voglio fare è andare al sodo nel più breve tempo possibile e in modo affidabile, devo documentarmi al meglio circa il miglior sistema conosciuto per ottenere il risultato che mi necessita. Ora io penso che non è questo il caso, ma si tratta di qualcosa di simile a; ho questo sensore lo devo usare con 10mt di cavo, punto..... e basta.

Sicuramente c'è un modo più affidabile , preciso e di sicuro funzionamento che mettere un LM35 collegato a 10mt di cavo, ma noi abbiamo assunto come imperativo l'uso di LM35 + 10mt di cavo. Allora l'obiettivo deve cambiare, passando da "devo andare al sodo" a vediamo come lavora LM35.

Però, fare funzionare il sensore direttamente collegato ad arduino tramite uno spezzone di cavo di 10 cm, mi permette di verificare il funzionamente del sensore, la sua precisione ecc. Dopo questo risultato si passa ad incrementare la capacità di pilotaggio del sensore, aggiungendo dei condensatori di capacità circa equivalente a quella che avremmo con 10mt di filo, oppure ancora meglio si fanno delle prove con 1mt, poi con 2 e via di seguito. Se lavora male già con 2mt di filo, inutile incrementare la lunghezza.

Però il datasheet potrebbe non essere sufficiente per ottenere il risultato sperato, cercare altro è d'obbligo. In particolare ci sono dei documenti che si chiamano genericamente AN (application note) i quali contengono preziose informazioni e alle volte si ha la fortuna di trovare il circuito pronto alle nostre esigenze e/o le formule per adattarlo.
Io ho trovato questo:
http://www.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=snoa748b&fileType=pdf
Overview | TMP36 Temperature Sensor | Adafruit Learning System

Allora prima metti appunto il software e l'hardware come se non avessi bisogno di 10mt di filo, fallo funzionare con buona precisione e poi si passa oltre.

Tanto per dire, c'è anche la possibilità di creare un circutito convertitore temperatura/frequenza, se l'uscita viene bufferizzata a bassa impedenza, probabilmente anche con 10mt di filo comune si riesce ad ottenere una buona precisione e affidabilità, ma tutto è da verificare. E se non dovesse bastare si può amplificare il segnale e poi attenuarlo con un altro buffer seguito da un partitore resistivo.

PS: non ho dentro quel sensore.

Saluti e buone feste.

allora io ho aperto questa discussione per capire se il sensore che ho può essere usato con 10m di filo.Quindi se non si può fare ditemelo, che chiudiamo la discussione.

ho dato queste misurazione perchè ho letto non mi ricordo dove, che a un tot di mv dovevo avere una certa temperatura, se non sbaglio
mi sembra di aver letto che a 150mv dovevo avere 0°, cosi ho messo il sensore nel congelatore,per verificarlo, ma non ho controllato il tempo trascorso perchè pensavo che fosse inutile,e pensavo che fosse utile capire la quantità di mv per capire la temperatura.[quote author=Michele Menniti link=topic=137489.msg1043454#msg1043454 date=1356367487]
inoltre non si capisce come escono fuori quei mV e quella conversione in temperatura che, ovviamente è sballata, dubito che tu abbia -50°C nel congelatore e -35°C all'aria aperta, in Sicilia quella temperatura non c'è mai stata nemmeno ai tempi dell'Era Glaciale :smiley:
[/quote]

PaoloP:
Potresti postare lo sketch che utilizzi? E' uguale a quello che ho messo io?

si le misure che avete visto escono dal sketch che a messo PaoloP. Fino a quando non mi dite un altro sketch da utilizzare io uso questo

grazie per gentile attenzione datami, spero essere stato chiaro, se non è cosi ditelo, buonnatale

si io ho cercato di fare la figura 8. ho messo una foto per avere la conferma che quando fatto fosse giusto!!

Alberto, la verità non la possiede nessuno, Mauro ti ha dato un suggerimento con un link e lo stiamo seguendo e pare dare qualche frutto, poi lui stesso è un po' scettico e ti ha dato un consiglio importante, fare una prova con pochissimo filo (20-30cm max) per vedere i valori reali che ottieni, e io sono d'accordo, Moreno è intervenuto dicendo che l'ha usato a 15mt e ti ha dato un altro sano consiglio, quindi dobbiamo restare fiduciosi, ma così stiamo solo facendo casino. Allora a mio parere dovremmo ricominciare come facemmo con sensore IR, un passo alla volta, e con molta pazienza arriveremo ad una risposta e possibilmente alla soluzione. QUindi io direi:
1 - Usando gli stessi collegamenti attuali, accorcia il cavo a 30cm
2 - Un riferimento certo è FONDAMENTALE, la storia del ghiaccio andrà bene in un secondo momento, quindi PROCURA un termometro digitale per ambienti
3 - Collega il sensore ad Arduino ed esegui questo semplice sketch (il minimo che serve per ora):

int tempPin = A0; //inizializzazione del pin di Arduino
float lettura = 0; // impostazione valore iniziale della variabile
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 = 0; //azzera il totalizzatore
for (int i = 0; i < media; i++) {
lettura += analogRead(tempPin); //totalizza tutti i valori letti dall’ADC
}

lettura = lettura / media; //calcolo del valore medio di lettura
Serial.println(lettura); //lettura valore ADC
delay(1000); //pausa
}

4 - Accendi tutto e metti l'LM35 accanto al sensore del termomentro digitale ambiente
5 - Fai funzionare tutto per 5 minuti, poi resetta Arduino e rileva le letture di una trentina di secondi circa, in pratica da quando apri il serial monitor conta le prime trenta letture, le copi e le incolli nel tuo post, in modo che possiamo vedere una situazione certa e stabile e possiamo stabilire più o meno come si sta comportando il sensore, altrimenti qui ci impantaniamo.
Se sei d'accordo su queste prove procedi, se non sei d'accordo allora devi aspettare altri consigli.

Michele vanno bene i Ponticelli flessibili per breadboard da 20cm, ho devo tagliare il cavo lan?

per quelle lunghezze va bene qualsiasi cosa, ma devi comunque "emulare" il circuito lungo, per cui i cavetti jumper li attorcigli tra loro ed il sensore lo devi sempre collegare come nella famosa figura 8.

Menniti ha interpretato correttamente il mio post, per cui io non ho la soluzione in tasca, anche perchè non ho mai posseduto quel sensore e in genere non ho mai avuto la necessità di collegare un sensore di temperatura con 10mt di filo. Se avessi avuto la soluzione pronta e sperimentata l'avrei postata.

Riguardo al circuito e allo sketch credo sia meglio far funzionare il tutto seguendo il tutorial di ladyada, facendo uso dei ponticelli su bread bord o spezzoni di cavo, insomma evitando cavi lunghi.

Mentre per i vari circuiti proposti nel datasheet è da scartare di sicuro quello che fa uso di una tensione negativa, che sarebbe utile solo con un tester posti in VDC dove verrà visualizzata direttamente il valore della temperatura, perchè in tal caso 10mV dovrebbero corrispondere a 1°C e -10mV a -1°C e così via.

Tensioni negative non devono essere applicate ad un pin analogico di arduino, per cui dobbiamo trovare il modo di intepretare valori positivo come negativi. Cosa accade se alziamo di 10mV la tensione di GND tramite una R? Accade che una tensione di -10mV salirà 0mV, quindi 0mV equivale a -1 grado.

Se solleviamo il riferimento GND di 50mV, 0mV li dobbiamo interpretare come una temperatura di -5 °C (5°C x 10mV = 50mV), mentre la temperatura di 0°C sarà 50mV.

Il post di morenov dice che lo ha collegato ad un voltmetro attraverso 15 mt di filo, ma in questo caso penso che abbia usato il circuito con tensione
negativa visibile in Fig.2.

[Tanto per sapere]
Il circuito di Fig.7 richiede un amplificatore differenziale il quale uscirà con una tensione sempre positiva coprendo comunque tutto il range. Questo circuito è quello che permette almeno in teoria l'abbassamento della impedenza di uscita e che ha come conseguenza anche un'incremento della capacità di pilotaggio di cavi lunghi.

Ciao.

Menniti mi ha anticipato: va anche bene fare come dice tu, ma se fallisce e si confonde meglio ripartire dal tutorial di ladyada.

non ho a disposizione il termometro digitale per ambienti =( però ho un LM35dz li posso collegare tutte e due con arduino?

Alberto, non quotare ogni volta gli interventi, riempi inutilmente il Topic di informazioni che chiunque può leggere nel post originale; basta scrivere @ Michele: ...... e diventa ovvio che stai rispondendo a me e non, p.es., a Mauro.
Il problema è semplice: se ricordi abbiamo risolto la questione del PIR solo dopo che hai procurato il multimetro; qui è una storia simile, se non abbiamo un riferimento certo non sapremo mai da cosa stiamo partendo; anche la storia del ghiaccio va bene, ma considera che tu hai postato risultati con una variazione di ben 8°C misurando sul ghiaccio, chiaro che qualcosa non andava in quella misura, ecco perché ti chiedevo il tempo, comunque quello è un discorso chiuso.
Allora se non riesci a procurare un termometro di riferimento noi possiamo fare solo la prima fase di prove e poi dovremo comunque fermarci o procedere "a occhio" o meglio "a pelle" :wink:
Quindi fai tutto ciò che ti ho consigliato e poi posta i risultati e vediamo che ne esce....

@ Mauro, ora non ricordo, ma mi pare che il circuito adottato sia quello di Fig. 8 che, se ben interpreto, fa combaciare 0mV con -5°C; a tale proposito devo chiedere ad Alberto: ma hai usato le R del valore originale dello schema o hai messo quelle più vicine possibile? La cosa è importante in quanto se hai usato R simili non possiamo aspettarci precisione, quindi a questo punto sarebbe il caso di attenersi scrupolosamente allo schema (dato che non abbiamo il termometro).

allora non ho a disposizione il termometro di riferimento per ambienti , ma ho un lm35dz, allora per fare quello che ha detto michele ho scritto questo codice dove un sensore il lm35caz serve per la nostra prova, e il sensore lm35dz server per capire la temperatura dell'ambiente, ditemi se il codice è giusto e se va bene

float tempC=0;      //dichiarazione di variabile lm35dz 
float lettura = 0; //lm35caz
int tempPin = 1;  //inizializzazione del pin di Arduino lm35dz
int media = 30;

void setup()
{
Serial.begin(9600); //apertura porta seriale, set della velocità a 9600 bps
}

void loop()
{
tempC = analogRead(tempPin);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
Serial.println(tempC);             //invia i dati alla seriale
Serial.print(" Celsius, ");
lettura = 0; //azzera il totalizzatore
for (int i = 0; i < media; i++) {
lettura += analogRead(tempPin); //totalizza tutti i valori letti dall’ADC
}

lettura = lettura / media; //calcolo del valore medio di lettura
  Serial.println(lettura); //lettura valore ADC

delay(1000);                           //aspetta 1 secondo prima di ripetere
}

Alberto, scusa ma non riesco a seguirti, io cerco di semplificarci la vita e tu ce la complichi inutilmente. Fai quello che ti ho detto e fammi avere i risultati e gentilmente NON modificare il codice che ti ho fornito; io seguo una mia idea, se introduci elementi tuoi non ci capisco più nulla; ti assicuro che non è per niente facile sperimentare con le mani e gli occhi di un altro a centinaia di km di distanza, se poi ci metti pure la mente è la fine.

@alberto39
Il calcolo va bene solo se il circuito ha il pin GND direttamente collegato al negativo di Arduino.
Supponiamo che tempC = 41, facendo il calcolo esce fuori questo:

5.0 * 41 * 100 = 20500
20500 / 1024 = 20.019 °C

Mentre se il circuito è quello con GND sollevato da 0V di 50mV la formula va bene ma dobbiamo sottrarre 5 °C al risultato che sarebbe:

5.0 * 51 * 100 = 25500
25500 / 1024 = 24.90 °C

24.90 - 5 = 19.90 °C

La formula potrebbe essere cambiata con la seguente:

#define ADC_OFFSET 10 // 10 corrisponde a 50mV
tempC = (5.0 * (tempC - ADC_OFFSET) * 100.0)/1024.0;

Quindi riscrivendo il codice lo scriverei così:

#define ADC_OFFSET          10          // 10 corrisponde a 50mV
#define ADC_PIN                   1          // PIN analogico numero 1 
#define N_SAMPLES              6          // Numero di letture consecutive
#define SAMPLE_DELAY      10          // ms di ritardo tra letture ADC consecutive 

float tempC = 0.0;                            // Contiene il valore della temperatura in °C, ma viene usata anche per altro

unsigned int samples[N_SAMPLES]; // conterrà N_SAMPLES valori letti dal pin analogico 1


void setup()
{ 
delay(2000)                                    // attende 2 secondi 
Serial.begin(9600);                        //apertura porta seriale, set della velocità a 9600 bps
}

void loop()
{
    byte i;
    tempC = 0;                                                                                   // azzera tempC variabile multifunzione
    // salva in samples[i] N_SAMPLES valori 
    for (i=0; i< N_SAMPLES; i++) {
        samples[i] = analogRead(ADC_PIN);                                        // lettura ADC 
        delay(SAMPLE_DELAY);
    }
    
    for(i=0; i<N_SAMPLES; i++) {
        tempC = tempC + samples[i];                          // somma i campioni in tempC
        Serial.println(samples[i]);                                  //invia i singoli campioni alla seriale
    }
    tempC = tempC / N_SAMPLES;                       // calcola la media

    tempC = (5.0 * (tempC - ADC_OFFSET) * 100.0)/1024.0;  // Calcola la temperatura 
    Serial.println(tempC);                                                         // invia la temperatura alla seriale
    
    delay(1000);                           //aspetta 1 secondo prima di ripetere
}

Il codice l'ho scritto direttamente nel forum, quindi non è detto che non necessiti di modifche.

Ciao.

Anticipato da Menniti; Si conviene prende un codice di riferimento.

allora ho fatto quello che ha detto michele, michele scusami se ti ho fatto perdere la pazienza ma volevo aiutarvi, e siccome non avendo un termometro per ambiente ho pensato di usare altro sensore che cosi si poteva avere sia la temperatura dell'ambiente che il dato che usciva dal programma che hai fatto tu.
ho fatto ho caricato il programma che hai fatto tu e ho aspetto 5 minuti e poi ho resettato e poi ho preso le misurazioni

68.53
68.53
68.53
68.43
68.60
68.60
68.63
68.53
68.50
68.50
68.47
68.60
68.67
68.67
68.57
68.57
68.63
68.60
68.67
68.47
68.43
68.63
68.60
68.60
68.53
68.53
68.63
68.70
68.60
68.63

non ho perso la pazienza, solo che se divaghiamo arriviamo a Natale 2013 :D.
Bene la situazione è stabile, quelli sono 68,5 punti su 1023; non vorrei sbagliarmi ma dovrebbero equivalere a circa 334mV, quindi a 33,4-5 = 28,4°C, che mi sembrano eccessivi, ma per ora non ci interessa. Andiamo per gradi (domande e azioni):

1 - non mi hai risposto: hai usato nello schema le resistenze coi valori indicati lì o hai messo solo valori similari?

2 - ora scollega il sensore da Arduino e collegagli il multimetro sulla portata 200mV DC e vedi che valore (all'incirca...) leggi

3 - quindi ripeti la prova ma questa volta con i dieci metri di cavo, stesso sketch, stessi tempi di attesa e di misura.

ho usato le R che ci sono nel kit workshop livello base cioè ho due da 2.2K e due da 220 ohm

non ho capito.Allora prendo il filo di 10 metri faccio il collegamento, non ho capito dove devo mettere i poli del multimetro!!
cioè il polo positivo va messo nel filo out o nel filo della corrente del sensore.

Le R poi (quando avremo finito la sperimentazione) le dovrai mettere esate, diciamo che per ora probabilmente giustificano l'errore.

Il multimetro è una prova a se stante, lo devi usare al post di Arduino per leggere direttamente i mV e vedere se tornano con i nostri calcoli

Anche la prova del cavo lungo è a se stante, in pratica ripeti la prima prova che hai fatto prima solo che ora colleghi il sensore con i 10mt invece che con i cavetti jumper da 20cm.

michele scusami ma non ho capito che devo fare.Arduino lo tolgo questo lo ho capito e uso il tester su scala 200m ma non ho capito come devo fare le misurazioni cioè se tolgo arduino come faccio funzionare il sensore i 5volt per frallo funzionare dove li prendo, e poi dove li metto i due poli del multimetro.

Per il pir mi dicevi che dovevo mettere il positivo del multimetro ---> sul filo di allarme del pir e il negativo del multimetro sul gnd del pir.
qua non mi hai detto niente.

azz, pensavo che avessi già finito le prove....però hai ragione, sono stato troppo sintetico.

Allora non devi eliminare Arduino, giustamente ti serve l'alimentazione per il sensore; devi SOLO scollegare il filo che va su A0 (l'uscita del sensore) e lo colleghi al puntale rosso (ricorda scala 200mV), mentre il puntale nero lo colleghi al GND di Arduino, quindi mentre prima leggevamo la tensione con Arduino che la convertiva in un valore decimale, ora leggiamo direttamente i mV provenienti dal sensore, ma siccoem intanto hai fatto passare 2-3 ore, non so che è successo in casa tua a livello di temperatura, quindi PRIMA ripeti la misura fatta nel primo pomeriggio con Arduino e rileva i nuovi valori, subito dopo scolleghi A0 e colleghi il multimetro e mi dai il valore medio che più o meno leggi nell'arco di un paio di minuti.