Affidabilità dei sensori di temperatura DS18x20


11

Sto usando i sensori di temperatura a 1 filo DS18x20 di Maxim (in realtà ho più di una variante) per registrare le temperature in varie stanze della mia casa una volta al minuto. Circa una lettura su mille, ottengo qualcosa di completamente falso. Nel mezzo di una sequenza che sale gradualmente da 65F a 70F ottengo qualcosa come -32.1F o 15.64F.

Qualcun altro ha avuto quel tipo di problema o è qualcosa di sbagliato nella mia configurazione? Se questo è solo un problema noto con queste cose, dovrò fare qualcosa come prendere tre letture e buttare fuori il valore erratico.

Solo alcune dichiarazioni sulla mia configurazione:

  • Sto funzionando a 3.3V
  • Sto verificando il checksum della lettura mentre ritorna sull'arduino e corrisponde (o penso che lo faccia - potrebbe esserci sempre un bug in quel codice).
  • Questi stanno esaurendo la potenza normale, non quella dei parassiti.
  • Ho il resistore pullup 4.7K in atto.
  • Sto usando un solo sensore su ciascuna piattaforma di rilevamento.
  • Il sensore si trova su un PCB collegato all'Arduino che lo sta leggendo.
  • Vedo lo stesso problema leggere da una varietà di arduinos diversi (diecimilla, pro-mini, custom fatti in casa)

Risposte:


5

L'ho visto occasionalmente con il DS18B20. Per la mia applicazione, era abbastanza semplice filtrare i risultati spuri con il codice.


È bello sapere che qualcun altro è sembrato qualcosa del genere. Qual era il tuo algoritmo di filtraggio?
edebill,

Suggerirei che hai fatto quello che hai detto, prendi 3 letture, 5 sarebbe meglio, 7 meglio di così, ma se c'è un errore di qualcosa intorno a 1/1000 allora hai solo bisogno di 3. Prendi la mediana. Il problema sarà risolto. se ne prendi 5 ci vorrà un caso strano per avere un problema.
Kortuk,

Sto facendo 5 ora. Ho provato a prendere il valore più alto di 2, ma un errore si è ancora verificato la scorsa notte (ho 3 sensori che leggono ogni minuto, quindi ottengo migliaia di punti dati al giorno).
edebill,

3

Se non riesci a trovare l'origine delle letture errate, dovrebbe essere facile filtrarle ed estrapolarle dalle letture precedenti , oppure interpolare tra le letture se il senno di poi è importante. Dal momento che stai campionando una volta al minuto puoi anche solo copiare l'ultima lettura; la temperatura ambiente difficilmente cambierà in un minuto.


3

Ciò può essere dovuto al fatto che il controller ha letto erroneamente uno o più bit della risposta di temperatura in determinate condizioni di carico elevato o che l'interferenza elettrica ha danneggiato uno o più bit.

Dai un'occhiata alla scheda tecnica qui http://www.rentron.com/Files/ds18b20.pdf

A pagina 5, mostra che la sequenza binaria esatta per 85C è:

+85°C 0000 0101 0101 0000

Allo stesso modo, per 25C, è:

+25.0625°C 0000 0001 1001 0001

In alcuni casi, se il controller manca un po ', otterrai un valore che è la temperatura effettiva, espressa in binario e con spostamento dei bit. Spesso questo è 1 / 2x il valore target in C.

A volte puoi ottenere interferenze elettriche sulla linea e il controller legge un intero nibble di 1s, in tal caso, otterrai un numero come 15,64, che espresso in binario è in realtà molto vicino ai numeri tra 65 e 70F, tranne con un gruppo di 1 all'inizio.


2

Per quello che vale, ho lavorato un po 'con il DS18B20 qualche mese fa. Ho girato un breve video e ho scritto un articolo sul mio blog, che contiene collegamenti ad esempi e codice di esempio. Spero che questo possa aiutare un po '! http://dailyduino.com/archives/552


2

Ne ho 13 in esecuzione nella mia casa da circa quattro anni. Il database è più difficile da gestire (ho tenuto traccia di tutti i campioni). Ma non ho visto questo tipo di comportamento. Invece, ogni tanto un sensore congela e blocca tutti gli altri, l'unica via d'uscita (che ho scoperto) era di interrompere la tensione di alimentazione per alcuni secondi. Quindi ho aggiunto un piccolo relè alla mia scheda e ogni volta che il micro rileva questo comportamento ripristina l'intera catena di sensori. Succede alcune volte a settimana.


Hmm. Forse dovrei alimentarli solo quando sto per fare una lettura.
edebill,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.