Estoy usando los sensores de temperatura 1-Wire DS18x20 de Maxim (en realidad tengo más de una variante) para registrar las temperaturas en varias habitaciones de mi casa una vez por minuto. Aproximadamente una lectura en mil, me devuelve algo completamente falso. En medio de una secuencia que aumenta gradualmente de 65F a 70F, obtengo algo así como -32.1F o 15.64F.
¿Alguien más ha tenido ese tipo de problema, o esto está mal con mi configuración? Si esto es solo un problema conocido con estas cosas, tendré que hacer algo como tomar tres lecturas y descartar el valor atípico.
Solo unas pocas declaraciones sobre mi configuración:
- Estoy corriendo a 3.3V
- Estoy revisando la suma de comprobación de la lectura cuando vuelve al arduino, y coincide (o creo que sí, siempre podría haber un error en ese código).
- Estos se están quedando sin poder normal, no con parásitos.
- Tengo la resistencia pullup de 4.7K en su lugar.
- Solo estoy usando un solo sensor en cada plataforma de detección.
- El sensor está en una PCB conectada al arduino que lo está leyendo.
- Veo el mismo problema al leer de una variedad de arduinos diferentes (diecimilla, pro-mini, costumbre casera)
fuente
Si no puede encontrar la fuente de las lecturas erróneas, debería ser fácil filtrarlas y extrapolarlas de lecturas anteriores , o interpolar entre lecturas si la retrospectiva es importante. Como está muestreando una vez por minuto, incluso puede copiar la última lectura; La temperatura ambiente apenas cambiará en un minuto.
fuente
Esto puede deberse a que el controlador lee mal uno o más bits de la respuesta de temperatura en ciertas condiciones de alta carga, o debido a la interferencia eléctrica que corrompe uno o más bits.
Eche un vistazo de cerca a la hoja de datos aquí http://www.rentron.com/Files/ds18b20.pdf
En la página 5, muestra que la secuencia binaria exacta para 85C es:
+85°C 0000 0101 0101 0000
Asimismo, para 25C, es:
+25.0625°C 0000 0001 1001 0001
En algunos casos, si el controlador falla un poco, obtendrá un valor que es la temperatura real, expresado en binario y con desplazamiento de bits. A menudo esto es 1/2 veces el valor objetivo en C.
A veces puede obtener interferencia eléctrica en la línea, y el controlador lee un mordisco entero de 1s. En ese caso, obtendrá un número como 15.64, que expresado en binario está realmente muy cerca de números entre 65 y 70F, excepto con Un montón de 1s al principio.
fuente
Por lo que vale, trabajé un poco con el DS18B20 hace unos meses. Grabé un video corto e hice una reseña en mi blog, que tiene enlaces a ejemplos y código de muestra. Espero que esto pueda ayudar un poco! http://dailyduino.com/archives/552
fuente
Tengo 13 de ellos corriendo en mi casa desde hace unos cuatro años. La base de datos es difícil de manejar (seguí todas las muestras). Pero, no vi este tipo de comportamiento. En cambio, de vez en cuando un sensor se congela y bloquea a todos los demás, la única forma de salir de esto (que encontré) fue cortar el voltaje de suministro durante unos segundos. Así que agregué un pequeño relé a mi placa y cada vez que el micro detecta este comportamiento, restablece toda la cadena de sensores. Eso sucede algunas veces a la semana.
fuente