Fiabilité des capteurs de température DS18x20

11

J'utilise les capteurs de température à 1 fil DS18x20 de Maxim (j'ai en fait plus d'une variante) pour enregistrer les températures dans différentes pièces de ma maison une fois par minute. Environ une lecture sur mille, je reçois quelque chose de complètement faux. Au milieu d'une séquence qui passe progressivement de 65F à 70F, j'obtiens quelque chose comme -32.1F ou 15.64F.

Quelqu'un d'autre a-t-il eu ce genre de problème ou est-ce que quelque chose ne va pas avec ma configuration? Si c'est juste un problème connu avec ces choses, je vais devoir faire quelque chose comme prendre trois lectures et jeter la valeur aberrante.

Juste quelques déclarations sur ma configuration:

  • Je cours à 3,3 V
  • Je vérifie la somme de contrôle de la lecture lorsqu'elle revient à l'arduino, et elle correspond (ou je pense que oui - il pourrait toujours y avoir un bogue dans ce code).
  • Ceux-ci fonctionnent à partir d'une alimentation normale, pas d'une alimentation parasite.
  • J'ai la résistance de rappel de 4,7 K en place.
  • J'utilise un seul capteur sur chaque plate-forme de détection.
  • Le capteur est sur un PCB attaché à l'arduino qui le lit.
  • Je vois le même problème de lecture à partir d'une variété d'arduinos différents (diecimilla, pro-mini, custom fait maison)
edebill
la source

Réponses:

5

J'ai vu cela avec de temps en temps avec le DS18B20. Pour mon application, c'était assez simple pour filtrer les faux résultats avec du code.

user274
la source
C'est bon d'entendre que quelqu'un d'autre a l'air de quelque chose comme ça. Quel était votre algorithme de filtrage?
edebill
Je dirais que vous avez fait ce que vous avez dit, prenez 3 lectures, 5 serait mieux, 7 mieux que cela, mais s'il y a une erreur de quelque chose autour de 1/1000, alors vous avez juste besoin de 3. Prenez la médiane. Le problème sera résolu. si vous en prenez 5, il faudra une occurrence anormale pour avoir un problème.
Kortuk
J'en fais 5 maintenant. J'ai essayé de prendre le plus élevé des 2, mais une erreur s'est glissée hier soir (j'ai 3 capteurs lisant chaque minute, donc j'obtiens des milliers de points de données par jour).
edebill
3

Si vous ne trouvez pas la source des lectures erronées, il devrait être facile de les filtrer et d' extrapoler à partir des lectures précédentes , ou d'interpoler entre les lectures si le recul est important. Puisque vous échantillonnez une fois par minute, vous pouvez même simplement copier la dernière lecture; la température ambiante ne changera guère en une minute.

stevenvh
la source
3

Cela peut être dû au fait que le contrôleur a mal lu un ou plusieurs bits de la réponse en température dans certaines conditions de charge élevée, ou à des interférences électriques corrompant un ou plusieurs bits.

Jetez un coup d'œil à la fiche technique ici http://www.rentron.com/Files/ds18b20.pdf

À la page 5, il montre que la séquence binaire exacte pour 85C est:

+85°C 0000 0101 0101 0000

De même, pour 25C, c'est:

+25.0625°C 0000 0001 1001 0001

Dans certains cas, si le contrôleur manque un peu, vous obtiendrez une valeur qui est la température réelle, exprimée en binaire et décalée en bits. C'est souvent 1 / 2x la valeur cible en C.

Parfois, vous pouvez obtenir des interférences électriques sur la ligne, et le contrôleur lit un quartet entier de 1, dans ce cas, vous obtiendrez un nombre comme 15,64, qui exprimé en binaire est en fait très proche des nombres entre 65 et 70F, sauf avec un tas de 1 au début.

gbronner
la source
2

Pour ce que ça vaut, j'ai fait un peu de travail avec le DS18B20 il y a quelques mois. J'ai tourné une courte vidéo et fait une rédaction sur mon blog, qui contient des liens vers des exemples et des exemples de code. J'espère que cela peut aider un peu! http://dailyduino.com/archives/552

morgellon
la source
2

J'en ai 13 qui courent chez moi depuis environ quatre ans maintenant. La base de données est plus difficile à gérer (j'ai gardé une trace de tous les échantillons). Mais, je n'ai pas vu ce genre de comportement. Au lieu de cela, de temps en temps et qu'un capteur se bloque et bloque tous les autres, la seule issue (que j'ai trouvée) était de couper la tension d'alimentation pendant quelques secondes. J'ai donc ajouté un minuscule relais à ma carte et chaque fois que le micro détecte ce comportement, il réinitialise toute la chaîne de capteurs. Cela se produit plusieurs fois par semaine.


la source
Hmm. Peut-être que je ne devrais les mettre sous tension que lorsque je suis sur le point de lire.
edebill