Come funziona sensore DS18B20

Ho il sensore temperatura DS18B20 che ha tre terminali: massa, alimentazione e un'uscita seriale. Vorrei cercare di capire la lettura della temperatura esaminando il segnale con un oscilloscopio. Me lo dareste un aiutino? Grazie in anticipo.

prima da un oghiata qui, dovresti trovare cose interessanti ;)

http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

in modo particolare paina 4

Si l'avevo letto, troppo tecnico, non ho capito un gran che. Quali sarebbero le cose interessanti, spiegami come ad una principiante.

la cosa interessante sono i bit o i byte che lui manda, quindi sull'oscilloscopio in funziona della temperatura che ce nell'ambiente vedrai tanti bit (alti o bassi) come nella tabella riportata per alcune temperature. se per ipotesi tu fossi a 0 gradi invece vedresti una bella linea piatta a zero volt.

se tu sei a 25 #c vedresti --> 0000 0001 1001 0001

Boh, io non vedo nulla. Ma il segnale di uscita quanti volt dovrebbe essere?

ma 25 in binario non dovrebbe essere 11001? Scusa la mia ignoranza.

lo alimenti a 5Vcc quindi il segnale TTL sarà 0-5V ! Potresti alimentatrlo anche a 3.3V, ma NON ti conviene visto che arduino 1 ama i seglai a 5Vcc!

Dimenticati il binario.... non usa il codice binario! ripeto come da tabella pag 4 ad esempio:

0.5 C --> 0000 0000 0000 1000

per usarlo con arduino poi ci sarà la sua brava libreria pronta all'uso ;)

certo che e’ in binario

S S S S S S 2^6 2^5 2^4 2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^4

In cui
S = 0 se di segno positivo
S = 1 Se di segno negativo

intendevo non binario "naturale" (insomma quello classico che si usa a scuola..non so come dirlo)

dove 7 = 111b

:p

Brunello, me lo spiego meglio? Io di binario conosco solo il naturale ed il BCD, ma è sicuramente una mia carenza.

Ho collegato l'oscilloscopio, ho dato l'alimentazione di 5V, ma non ho visto un segnale riconoscibile. Più tardi ci riprovo.

ElenaSgarbi: Brunello, me lo spiego meglio? Io di binario conosco solo il naturale ed il BCD, ma è sicuramente una mia carenza.

Ho collegato l'oscilloscopio, ho dato l'alimentazione di 5V, ma non ho visto un segnale riconoscibile. Più tardi ci riprovo.

Intanto mi viene il dubbio che il sensore non l'hai collegato a un Arduino e che stai solamente leggendo il piedino di uscita. Se è così, ecco spiegato perchè non vedi nulla. Il 1-Wire bus è un bus di uscita dati che però va interrogato, quindi puoi leggere l'uscita solo se il sensore è collegato a Arduino e un programma lo sta continuamente interrogando: con l'oscilloscopio in parallelo vedresti il treno di dati in uscita. Praticamente il filo di uscita è pull-up con la resistenza 4,7K. Quando viene messo a massa per un tempo t (pochi microsecondi) lui risponde. Stesso sistema con il sensore T/H (temp. e Umidità) DTH22.

Il tuo dubbio è fondato, ho fatto proprio come hai detto. Ma non c'è un sensore che abbia un uscita digitale senza essere interrogato? Grazie del tuo prezioso intervento, ho già ordinato la scheda arduino1. Intanto che aspettiamo che arriva ho voglia di comprendere il tipo di segnale binario che usa.

ElenaSgarbi: Ma non c'è un sensore che abbia un uscita digitale senza essere interrogato?

No perché i sensori con out digitale sono sempre dei device di tipo slave e per questo motivo hanno bisogno di una richiesta da parte del master per inviare i dati, inoltre se i sensori usano un bus di tipo multidrop (più device possono condividere lo stesso bus) è assolutamente indispensabile farli "parlare" solo se interrogati. L'alternativa è usare sensori con uscita analogica o digitale sotto forma di segnale pwm, questi forniscono l'out costantemente.

Onestamente non so se c'è un sensore con una uscita ripetitiva, senza interrogazione.

Se vuoi capire meglio come funzionano i protocolli 1-wire (e ad oggi non c'è una standarizzazione ben precisa) è la stessa cosa che volevo io qualche mese fa. Guarda su questo link che avevo trovato:

http://www.ie-cloud.it/web/article/interfacciamento-sensore-dht22-con-pic18f26k80/

Da qui capisci come è facile implementarsi un protocollo 1-Wire per usi propri: mando un segnale su un filo, dalla parte opposta ho un programma (o anche solo un wake-up) che lo interpreta e che mi risponde con una certa stringa....

astrobeed:
L’alternativa è usare sensori con uscita analogica o digitale sotto forma di segnale pwm, questi forniscono l’out costantemente.

Ne hai qualcuno sottomano?

Grazie mille amici, siete davvero gentilissimi.

ElenaSgarbi: Ne hai qualcuno sottomano?

Sensori di temperatura c'è il LM35, costa poco, facilmente reperibile, è abbastanza preciso, uscita analogica non raziometrica (non è dipendente dalla tensione di alimentazione) pari a 10 mV/C, 0° = 0V, 100° = 1V.

Grazie astrobeed, io mi son proposta come esercizio di costruire un termometro digitale che abbia 3 cifre dopo la virgola per un totale di almeno 5 cifre in tutto, in modo da leggere una temperatura da 0 a 99.999ºC.

Il motivo delle tre cifre non è tanto la precisione al millesimo, ma la possibilità di monitorare l'andamento della temperatura di un liquido. Un liquido che abbia una temperatura stabile, per esempio a 35ºC. Se c'è una variazione minima di temperatura questa sarà avvertita dalla terza cifra. Per ora ho a disposizione un rtd cu50 collegato ad un trasduttore che mi da in uscita 0-5v lineari corrisposndenti a 0-100ºC, ma voglio raggiungere lo stesso scopo anche usando altri sensori, fra cui quello digitale da titolo.

Ho anche ordinato LM35 che ha una precisione di 0,5ºC. Usando questo sensore (LM35) potrei raggiungere lo scopo desiderato? Anche se questo ha una precisione di 0,5ºC potrei visualizzarlo in un display a 5 cifre con tre cifre dopo la virgola?

Se leggo per esempio la temperatura 35,021 e poi 35,025 percepisco che c'è stato un lieve aumento. Se il sensore ha la precisione di mezzo grado a me poco importa perchè a me interessa vedere se la temperatura sta salendo o scendendo e a quale velocità ciò sta avvenendo. Si può fare?

In rete avevo trovato un ADC 40dip con un'entrata 0-1000mV che potrei collegare a LM35. Questo integrato si collega direttamente a 5 o 6 display 7segmenti (non ricordo bene), avevo il datasheet, ma ora non riesco più a trovarlo. Hai sotto mano qualcosa di simile? Ho a disposizione 6 display catodo comune e 10 cd4511.

ElenaSgarbi: Ho anche ordinato LM35 che ha una precisione di 0,5ºC. Usando questo sensore (LM35) potrei raggiungere lo scopo desiderato? Anche se questo ha una precisione di 0,5ºC potrei visualizzarlo in un display a 5 cifre con tre cifre dopo la virgola?

Basta pensare ad un righello: se ho un righello con precisione di 1mmm e misuro un ogetto lungo 34 mm, posso scrivere 34.754? no perche la cifara dopo la virgola sarebbe "inventata" e non misurata, in quanto il mio strumento di misura NON può rilevare tal preciosne ;)

ElenaSgarbi: Grazie astrobeed, io mi son proposta come esercizio di costruire un termometro digitale che abbia 3 cifre dopo la virgola per un totale di almeno 5 cifre in tutto, in modo da leggere una temperatura da 0 a 99.999ºC.

Ti dico subito che un sensore di temperatura con la reale risoluzione di 0.000° costa un sacco di soldi, inoltre richiede una parte analogica di condizionamento del segnale non indifferente, decisamente critica come realizzazione in quanto si lavora con tensioni di poche decine di uV come delta per le variazioni di temperatura. Gli LM35 al massimo offrono una risoluzione di ~0.1°, per ottenerla devi usare l'ADC con il riferimento interno 1.1V, in questo modo apprezzi quasi il singolo millivolt invece dei quasi 5mV con il riferimento a 5V.

ElenaSgarbi: Ho anche ordinato LM35 che ha una precisione di 0,5ºC. Usando questo sensore (LM35) potrei raggiungere lo scopo desiderato? Anche se questo ha una precisione di 0,5ºC potrei visualizzarlo in un display a 5 cifre con tre cifre dopo la virgola?

Se un sensore ha una precisione di 0,5 gradi devi immaginartelo come un sensore che incrementa il suo valore di 0,5 gradi per volta: 30° poi 30,5° poi 31° poi 31,5°.... Nel tuo caso hai bisogno di un sensore di 0,005 gradi di precisione (e per me ha poco senso se non sei in una camera stagna lontano da spifferi, da vibrazioni ecc.. ecc...)

Poi arduino ha una risoluzione di 1024 punti. se ad ogni punto gli dai 0,005 gradi, misuri al massimo una differenza di un grado tra la massima e la minima....

Un mio conoscente ingegnere mi ha appena spiegato che c'è differenza fra precisione e risoluzione. Un sensore può avere la risoluzione di un centesimo di grado ed una precisione di un grado. Parole sue. Ma cosa significa? Se leggo la temperatura di 35,55, questa può essere compresa fra 35.05 e 36.05?