El Sensor de Humedad y Temperatura de Texas Instrumentos HDC1080 es un
Circuito Integrado de bajo costo que contine un polímero que se encarga
de medir la Humedad Relativa del Ambiente, y también tiene un sensor de
Temperatura en la placa de metal de abajo del circuito integrado.
Pero para poder hablar el mismo idioma primero debemos de saber lo que
es Temperatura y Humedad.
¿Qué es la Humedad y la Temperatura?
La Temperatura es la cantidad de agitación de las moléculas de un
cuerpo, es decir la Medida de la energía cinética de las moléculas de
un material. Y en terminos coloquiales es cuan caliente está un objeto.
La Humedad es la cantida de agua está revuelta en el Aire, es decir, la
cantidad de partículas de agua contenida en un volúmen de aire. Así si
estamos en el Desierto, es de esperarse que la Humedad sea muy baja.
Pero si estamos en la Playa es de esperarse que la Humedad sea muy alta.
La Humedad relativa es el porcentaje de la división de la Humedad
existente en un volumen de aire entre la capacidad de ese aire de
alojar la máxima cantidad de agua sin que llegue a condensarse.
Platicadito esto mismo quiere decir que si al aire que respiramos
máximo le caben 100 unidades de vapor de agua a 25°C a 1 Atmosfera de
presión atmosférica, y en este momento se tienen 60 unidades contenidas
en ese mismo volúmen de aire en esas mismas condiciones... se tendría
una Humedad Relativa del 60%. Esto es un ejemplo para
ejemplificar lo que es la Humedad Relativa, los datos de las
capacidades no son veriídicos.
Otra manera muy práctica de visualizarlo y entenderlo es haciendo el
simil con vasos de agua. Los vasos van a tener el mismo volumen y no
puede cambiar, esto es el símil con la Capacidad Máxima de un gas para
albergar vapor de agua, sin que se condense.
La cantida de agua que tenga ese vaso va determinar la Humedad
Relativa, así si un vaso de 1litro contiene 100ml va a tener un 10% de
capacidad, o en el simil con la humedad sería un 10% de Humedad
Relativa. Por eso es que siempre se mide en porcentaje
La Humedad Absoluta es la cantida de agua que contiene el vaso, es el
simil de la cantidad de vapor de agua que tiene el aire. En los vasos
se mide en Litros, y la Humedad Absoluta en gramos de agua contenido en
X volumen de aire.
Cuando se llena el vaso de más allá de su capacidad en volumen, lo que
va a pasar es que se va a comenzar a derramar el agua, esto mismo en el
aire es cuando se comienza a condensar el agua; así cuando las nubes ya
no soportan más vapor en el aire, comienza a condensar y llueve.
Ahora bien. La Humedad Relativa es un poco complicada, por que se ve
severamente afectada por la Temperatura y la Presión. Esto lo vamos a
explicar con el ejemplo de los vasos.
Todos sabemos que si el aire se calienta se vuelve menos denso, por eso
es que los globos aeroestáticos vuelan, ya que el aire caliente es
menos pesado que el aire frío, por que ocupa un volumen mayor.
Dado que ocupa un volumen mayor, ahora puede albergar mayor cantidad de
agua sin que ésta se condence. En el ejemplo de los vasos es como si el
vaso se hiciera más grueso y por tanto le cabe mayor volúmen
Es de suponerse que si se calienta el aire, se expande su capacidad de
albergar vapor de agua, pero no se le añade más vapor, la Humedad
Relativa tiende a bajar, por que si vaciamos el agua del vaso de
diametro pequeño al de diametro grande, su altura (Humedad Relativa) se
verá disminuido.
Y lo mismo pasa de manera inversa, si un aire se mide la Humedad
Relativa cuando está caliente, y después se enfría, su Humedad Relativa
se incrementará, esto pasa muy seguido en la Playa, cuando estás
comiendo muy agusto, pides una cerveza fría fría fría, y después de un
rato el aire que alberga cierta cantidad de agua se enfría súbitamente
al entrar en contacto con el vidrio de la botella, se hace más denso y
ya no puede retener esa cantidad de agua, y deja gotas de agua en tu
cerveza o refresco. ¿o qué? ¿Pensabas que la botella había generado
agua?
Lo mismo sucede también en la ciudad, pero se debe de llevar la cerveza
a una temperatura mucho más baja, debido a que en la ciudad hay mucho
menos vapor de agua en el ambiente. A esa temperatura en la cual el
aire comienza a condensar se le llama Punto de Rocío. Y depende
de la cantidad de vapor de agua contenida en el aire.
El otro factor que afecta severamente la Humedad Relativa es la
Presión, ya que la presión hace que un gas se comprima y por tanto
ocupe un volumen menor, al ocupar un volumen menor, ya no puede
albergar tanto vapor de agua y comienza a condensar. Es por eso que en
los Compresores de Aire, siempre hay que tener cuidado con el agua
condensada en la parte baja del tanque, y hay que purgarlos
periódicamente.
En la imágen de arriba se observa el tanque del compresor al cual le
instalaron una electroválvula para abrir el tanque por algunos segundos
y que escupa el agua condensada en el interior, para que no pase a los
equipos neumáticos, así evitamos la corroción de dichos equipos.
Cuando trabajaba para una empresa farmaceútica en Queretaro, mi amigo
Raymundo Perez instaló un sistema como ese y nos evitamos muchisimas
desviaciones de Calidad.
Bueno con esto ya tienen una idea de lo que es la Humedad, que esta
página no es para enseñar Humedad sino el Sensor HDC1080 de Texas
Instruments. Pero antes debemos de aclarar lo que es el Protocolo I2C.
Protocolo de Comunicación I2C
El Protocolo I2C o I²C o IIC o formalmente llamado: Inter-Integrated
Circuit fue desarrollado en 1982 por Philips Semiconductor para
comunicar los diferentes periféricos en sus placas de PCB.
Es un Protocolo de Comunicación Serial Síncrona del tipo
Maestro/Esclavo. Lo más padre de este protocolo es que solo requiere de
2 líneas de conexión, una para datos (SDA) y la otra para los pulsos
del reloj (SCL).
Estas líneas son del tipo Open-Collector para que se puedan conectar
varios dispositivos en el mismo bus, por lo que hay que conectar una
resistencia de 10K Ohms en cada una de las líneas.
AHORA SÍ EL HDC1080.
El Sensor HDC1080 es un Circuito Integrado de bajo costo que contiene
un polímero que se encarga de medir la Humedad Relativa contenida en el
ambiente, y en la parte trasera tiene una placa donde tiene un sensor
de temperatura que se encarga de medir la temperatura. La Hoja de Datos dice que tiene
las siguientes características:
Precisión de ± 2% de Humedad Relativa.
Precisión de ±0.2°C en Temperatura
Excelente estabilidad en Humedades Altas
Hasta 14bits de Resolución de las Mediciones
100nA de Corriente cuando está dormido
1.3µA de consumo promedio cuando se mide la
Temperatura y Humedad Relavida a una taza de muestreo de 1 por segundo.
Voltaje de Alimentación de 2.7V a 5.5V
Protocolo de Comunicación de I²C
Dimensiones de 3mm x 3mm
La
tensión de alimentación va desde los 5.5V hasta los 2.7V. de hecho
tiene un comando para saber si el HDC1080 está alimentado con más de
2.8V (BTST). El consumo de potencia es muy poco, por lo que puede se
utilizado con baterías. La hoja de datos nos indica que aproximadamente
consume 100nA por que casi todo el tiempo está en modo sleep, cuando
mide las condiciones ambientales consume 1.3µA y solamente cuando
arranca puede llegar a consumir hasta 7.2mA.
El HDC1080 cuenta con 6 pines de los cuales dos de ellos no se
utilizan, por lo que los que nos interesan son 4, de los cuales 2 son de
alimentación +Vcc y GND y los últimos dos pines son para la
comunicación con el microcontrolador por medio de I²C. Por lo que es un
circuito muy simple, lo que le brinda una gran ventaja.
Como dijimos anteriormente los pines SDA y SCL son Open Collector por
lo que hay que conectarlos a una resistencia de 10K Ohms a +Vcc, así
como se muestra en el siguiente esquema:
El
Código de Identificación del Sensor HDC1080 en el bus I²C es 40h ó 0x40
ó 0100 0000b. Tiene dos formas de accesar la información ,
en modo Burst o en modo individual, nosotros utilizamos el modo burst
por que es el que se muestra en el ejemplo de guía que puso Texas
Instruments para Arduino.
La página de Texas Instruments proporciona un excelente ejemplo de como
es que se debe de programar el HDC1080 para obtener su Temperatura y
Humedad, este código lo pudes bajar aquí y
es para Arduino. Lo que le hace falta a ese programa es el explicar
como obtener el Número de Serie y la Función de la Resistencia Interna.
Uno de los grandes secretos que ponen es el saber utilizar bien las
variables del Arduino por que hay que ponerlas como sin signo, por que
si no al llegar al 50% de la escala te van a salir números negativos.
La subrutina que me ha dado resultados es la siguiente:
//------------------------readSensor-----------------------------------
// Esta subrutina lee los valores de temperatura y humedad del HDC1080
//---------------------------------------------------------------------
void readSensor()
{
uint8_t Byte[4];
Wire.beginTransmission(0x40);
Wire.write(0x00);
Wire.endTransmission();
delay(25); //20ms con cristal de 16MHz
Antes
de poder utilizar esta subrutina, hay que incluir la librería
Wire.h, inicializar la comunicación por el protocolo I²C, definir
el tipo de comunicación y la resolución de las mediciones. Esto lo
podemos hacer incluyendo los siguientes líneas de comandos:
#include <Wire.h>
En la parte de Setup debes de colocar:
//-------------------------------INICIALIZAMOS EL HDC1080 ------------------------------------------------
Wire.beginTransmission(0x40);
Wire.write(0x02);
Wire.write(0x90);
Wire.write(0x00);
Wire.endTransmission();
delay(20);
EL PCB
Uno de los principales inconvenientes con el dipositivo es su
encapsulado WSON, ya que es sumamente pequeño 3mm x 3mm x 0.8 mm, y los
pines para soldar van debajo del integrado, por lo que utilizar un
cautín es sumamente complicado. Si se utiliza una pistola de aire
caliente para soldarlo, es muy fácil de quemar o degradar el polímero
de la ventanita que mide la humedad, ya que el aire caliente le da de
frente. Por lo que prácticamente es un show el soldarlo.
El otro gran inconveniente con este tipo de encapsulado es que a veces
la soldadura se derrama y hace contacto con la placa de metal de
enmedio, lo que provoca que se genere un corto circuito. La inspección
visual de que si la soldadura toca al pin es imposible, ya que está en
la parte debajo del PCB, por lo que la única manera fiable de saberlo
es conectar en microprocesaro y tomar lecturas. El Soporte de
Texas Instruments nos indica que una vez que se soldó se recomienda
somenter por unas 72hrs el integrado a humedades altas para que vuelva
a recobrar sus propiedades el polímero.
Sin embargo en la misma Hoja de
Datos en la sección 9.3.3 de las páginas 18 y 19 nos advierte que
si mides humedades superiores al 85%RH por lapsos entre 12 y 500hrs
contínuamente se puede presentar un error permanente de medición
(offset).
Para diseñar un Circuito con el que podamos utilizar el sensor hay que
tener un FootPrint del encapsulado WSON de 6 Pines. Yo he utilizado el
PCB del Sensor SI7021, sin embargo el que me ha funcionado mejor es uno
que diseñé para EAGLE y el cual puedes bajar dando clic aquí en este footprint
le estoy poniendo unos agujeros en el medio, para pasar el taladro y
hacer un canalito para que el aire pase a través de él y la placa que
mide la temperatura la mida de manera más efectiva.
LA PRECISIÓN
El otro gran inconveniente es que la precisión que indican en la Hoja de Datos no es real, he
utilizado 34 sensores HDC1080 y a todos ellos les he realizado la
calibración de Temperatura y Humedad y los errores son mucho mayores.
Por lo que se debe de realizar un ajuste por medio de software.
Incluso 12 de ellos definitivamente no he podido ajustarle la
Humedad. Cabe aclarar que esos doce fueron de una vez que los
compré en el 2018, salieron horrible en Humedad, pero en Temperatura
salieron excelente. En el 2020 compré 20 de los cuales llevo 15 y
han salido bien el Humedad (sí he tenido que ajustar) pero no salieron
tan bien en Temperatura (errores mayores a 0.3°C). La variación entre
lotes es muy grande, por lo que no es real esa precisión, debido
a que no sabemos si nos va a tocar un sensor bueno o malo.
Para demostrar ello pongo aquí algunas gráficas de los HDC1080 que he
calibrado y parametrizado, estas mediciones se hicieron comparando el
Instrumento INS103 que tiene instalado un HDC1080 expuesto, contra un
datalogger en el que las mediciones son muy exactas. Todo
esto se hace dentro de una cámara que aisla térmicamente y donde
se varía la temperatura de manera controlada:
En
la gráfica se muestra claramente como es que el HDC1080 presenta una
ligera desviación cuando se enfría o cuando se calienta. Las
oscilaciones del 26 de mayo son debido a que se encendío el sistema de
refrigeración y este presenta ciclos. Sin embargo cuando se encienden
los ventliadores internos de la cámara para homologar la distribución
de temperatura las dos gráficas se acercan bastante y se tiene una
buena medición, por lo que consideramos este instrumento apto, y sin la
necesidad de realizar algún ajuste en Temperatura. Ahora en cuanto a la
Humedad:
Aquí se observa claramente que el HDC1080 sigue los cambios de Humedad,
pero que tiene un impresionante Offset, de aproximadamente 17.48% de
Humedad Relativa. La hoja de datos nos asegura que el error iba a ser
menor a ±2% por lo que estamos a casi 10 veces el error. Esto nos hizo
llevar a que este instrumento INS103 solo pueda medir Temperatura ya
que las mediciones de Humedad no son confiables. Si graficamos estos
valores en una gráfica XY en función de la Humedad Real y de los
valores Medidos por el HDC1080 tendremos:
Como se ve en la gráfica, la respuesta del HDC1080 deja de ser lineal
aproximadamente a los 69% de Humedad Relativa, después de ello comienza
a arrojar valores sumamente erroneos, de modo que si el HDC1080 te
indica una humedad de 80%, tu no sabes si la humedad real es de 59% o
de 90%. Lo que lo vuelve inviable. Que deje de medir a los 70% es un
gran inconeniente, ya que en un día con mucha lluvia sí se alcanza a
medir unos 78% o 79% sin problema.