Programar fácil con Arduino

Programar fácil con Arduino, entiende cómo funciona el mundo.

  • Blog
  • ¿Quién soy?
  • Podcast
  • Curso Arduino [GRATIS]
  • Curso Domótica [GRATIS]
  • Acceder
Usted está aquí: Inicio / Blog / Arduino / HDC1080 Arduino y ESP8266 sensor de temperatura y humedad

HDC1080 Arduino y ESP8266 sensor de temperatura y humedad

Luis del Valle Hernández

El HDC1080 es un sensor de temperatura y humedad con una precisión excelente y un consumo muy bajo. Es compatible con Arduino y ESP8266 gracias a que utiliza el protocolo de comunicación I2C.

Se trata de un sensor que no es muy conocido sin embargo, gracias a su precisión, bajo coste y bajo consumo es quizás una de las mejores opciones a la hora de utilizar en proyectos del IoT con Arduino y ESP8266.

El HDC1080 es un sensor de temperatura y humedad digital lo que quiere decir que incorpora un conversor analógico digital o ADC. Esto evita tener que utilizar un pin analógico para leer el sensor.

En este tutorial te enseñaré todos los secretos que se esconden detrás del sensor de temperatura y humedad.

HDC1080 sensor temperatura y humedad esp8266 arduino

Indice de contenidos

  • 1 Características técnicas del sensor HDC1080
  • 2 Esquema eléctrico HDC1080
  • 3 Programar HDC1080 con Arduino y ESP8266
  • 4 Activar calefactor del sensor HDC1080
  • 5 Conclusiones sensor de temperatura y humedad HDC1080

Características técnicas del sensor HDC1080

Como siempre sucede cuando tienes un componente nuevo entre manos, lo primero que debes hacer es acudir a la hoja de características técnicas.

El sensor de temperatura y humedad que vamos a ver en este tutorial se llama HDC1080. El nombre es debido al chip que utiliza de la empresa Texas Instruments.

Características más importantes son las siguientes:

CaracterísticaValor
Precisión humedad relativa± 2%
Precisión temperatura± 0,2ºC
Resolución temperatura (configurable por software)11-bit y 14-bit
Resolución humedad (configurable por software)8-bit, 11-bit y 14-bit
Consumo modo dormido100nA
Consumo modo midiendo1,3µA
Voltaje de alimentación2,7V a 5V
ComunicaciónI2C
Rango de temperaturas-40ºC a 125ºC

Es un sensor digital y ya viene calibrado de fábrica así que están listos para conectar y usar.

HDC1080 precisión

La precisión de un sensor determina cuánto se desvía la medida obtenida con el sensor con respecto a la realidad (normalmente se suele decir la variación con respecto a un estándar absoluto).

Más o menos viene a decir que si en un determinado momento en un lugar hay 20ºC ¿cuánto se desvía de esta medida lo que mide el sensor?

Este dato lo podemos obtener de la propia hoja de características técnicas y se suele expresar en términos de ± (más menos). Cuanto menor sea, más preciso será el sensor.

La precisión es diferente para la temperatura y para la humedad.

En el caso del HDC1080, al igual que ocurre con muchos otros sensores, la precisión no es uniforme. Suelen darte una precisión típica pero en realidad varía según la temperatura o la humedad.

Por ejemplo, si tomamos la temperatura, la precisión varía según la siguiente gráfica.

En el eje y se representa la precisión en ± ºC y el eje x representa la temperatura. Por lo tanto, dependiendo de la temperatura el sensor presenta una precisión u otra.

Si te fijas, cuando está en -40 ºC (vamos que estás midiendo la temperatura en Groenlandia) la precisión cae hasta los ± 0,5 ºC. Esto quiere decir que si tienes una temperatura de -40 ºC puede que tengas más o menos medio grado de diferencia.

En el lado opuesto la mayor precisión se obtiene entorno a los 30 ºC, donde se consigue una precisión de ± 0,15 ºC.

Lo mismo ocurre con la humedad. Fíjate en el siguiente gráfico.

No varía tanto la precisión como con la temperatura pero dependiendo de la humedad relativa, obtendrás una precisión u otra.

HDC1080 consumo

Una de las características más interesantes que presenta el sensor de temperatura y humedad es su bajo consumo. Esto hace que sea un dispositivo muy adecuado cuando se requiere un bajo consumo de energía.

Por ejemplo, cuando tu proyecto utiliza pilas o baterías.

Un caso claro lo tenemos en los nodos del proyecto EnigmaIoT de Germán Martín. En este tipo de proyectos se requieren nodos donde se consuma muy poco.

Pero ¿cuál es el secreto para que consuma apenas 100nA?

El secreto está en el modo dormido (en inglés sleep mode).

El HDC1080 tiene dos modos de funcionamiento: modo dormido y modo midiendo.

Cuando el sensor de temperatura y humedad se enciende, automáticamente entra en modo dormido consumiendo una media de 100nA. En este modo, el sensor espera cualquier comando que le llegue por el protocolo I2C para despertar.

Cuando recibe un comando para realizar una medida, pasa del modo dormido al modo midiendo. Una vez completada la medida, el sensor de temperatura y humedad regresa al modo dormido.

Gracias a que todo esto lo hace de forma automática, se consiguen unos consumos muy bajos.

Pero en realidad, el consumo también varía según el voltaje de alimentación y de la temperatura.

En las gráficas que nos facilitan las hojas de características técnicas lo puedes comprobar.

En términos generales, cuanto más voltaje de alimentación y cuanta más temperatura, el consumo es mayor.

Por último y dentro de lo que es el consumo es muy importante fijarse en los tiempos de respuesta que tiene un sensor. Básicamente viene a decirnos cuánto tarda en tomar la medida y volver al modo dormido de bajo consumo.

Los tiempos de respuesta dependen de la resolución con la que esté trabajando el sensor y de los ciclos del reloj del ADC.

En la siguiente tabla puedes ver los tiempos de respuesta del sensor para obtener cada magnitud según la resolución del ADC

MagnitudResoluciónTiempo (ms)
Humedad8-bit2,5ms
Humedad11-bit3,85ms
Humedad14-bit6,5ms
Temperatura11-bit3,65ms
Temperatura14-bit6,35ms

Todo esto quiere decir que a mayor tiempo de respuesta del sensor, mayor consumo ya que estará menos tiempo en modo dormido. Debes tenerlo en cuenta si tu proyecto requiere de un bajo consumo.

Para que te hagas una idea. El sensor HDC1080 en modo midiendo temperatura y humedad con una resolución de 11-bit consume unos 1.300nA. Mientras que en modo dormido consume 100nA. El consumo es 10 veces superior.

Otras funciones del HDC1080

A parte de lo ya explicado, el sensor de temperatura y humedad HDC1080 tiene dos características muy interesantes.

La primera es el monitor de voltaje de alimentación. El sensor HDC1080 monitoriza el nivel del voltaje de alimentación y lanza una alarma en el caso de que este voltaje sea inferior a 2,8V.

Recuerda que el voltaje de alimentación del sensor de temperatura y humedad HDC1080 es de entre 2,7V y 5,5V.

Esta información puede ser muy útil para informar de que se debe cambiar la batería del dispositivo porque se está agotando.

Y la segunda característica interesante es que dispone de un calefactor (del inglés heater) que no es más que un elemento resistivo. Se utiliza para probar el sensor o para eliminar la condensación del sensor.

Se activa a través de la programación y es muy útil cuando el sensor se ha expuesto durante un largo periodo de tiempo a unas condiciones de humedad alta y se desea eliminar la condensación para evitar errores en la medición.

Esquema eléctrico HDC1080

Como ya te he comentado, el nombre del HDC1080 es el nombre del propio chip. Luego ese chip puede ir montado en cualquier módulo. De momento, los grandes fabricantes como Sparkfun y Adafruit no se han fijado en el sensor de temperatura y humedad.

Así que lo que vas a encontrar por ahí será más bien chino. Puedes encontrar este sensor por un precio razonable en Amazon.

sensor temperatura y humedad HDC1080 para Arduino y ESP8266

Sea como sea, el sensor tiene que tener 4 pines:

  • GND: referencia 0V
  • SCL: señal de reloj I2C
  • SDA: señal de datos I2C
  • VCC: voltaje de alimentación (entre 2,7V y 5,5V)

Para conectarlo a un Arduino o un ESP8266 es muy sencillo. Lo único que tienes que hacer es conectar GND y VCC a GND y 3,3V o 5V. Luego, los pines SCL y SDA con los pines SCL y SDA de la placa.

A continuación te dejo dos ejemplos con un ESP8266 y con un Arduino UNO.

Y una vez que tenemos claro cómo funciona el hardware y cómo se conecta con Arduino y ESP8266 ¿adivinas qué es lo que toca?

¡A programar!

Programar HDC1080 con Arduino y ESP8266

Siempre que tengas que programar un componente nuevo puedes hacer dos cosas. Una es programar tu propia librería con la información que aparece en el datasheet (hoja de características técnicas) o dos, utilizar una librería que ya esté creada.

La primera opción está bien si quieres saber cómo programar este tipo de dispositivos a bajo nivel. Se aprende mucho de los datasheet.

Pero si quieres ir rápido lo mejor es que acudas a una librería para Arduino. De entre todas las que hay te recomiendo utilizar esta. Es la más completa como veremos ahora.

Puedes instalar esta librería a través del Gestor de librerías. Solo tienes que hacer una búsqueda por HDC1080.

Vamos a empezar por algo sencillo, consultar la temperatura y la humedad del sensor de forma rápida.

Consultar temperatura y humedad del sensor HDC1080

El siguiente código se conecta al sensor HDC1080 para obtener los datos de temperatura y humedad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#define _DEBUG_
 
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
 
// Instancia a la clase
ClosedCube_HDC1080 hdc1080;
 
void setup() {
#ifdef _DEBUG_
  Serial.begin(9600);
#endif
 
  // Iniciar sensor al que se pasa la dirección I2C
  // Por defecto es un número de 7-bit 1000000 que
  // equivale al 40 en hexadecimal
  // Por defecto la precisión es de 14-bit para temperatura y humedad
  hdc1080.begin(0x40);
#ifdef _DEBUG_
  Serial.println(" ");
  Serial.println("Inicado sensor HDC1080");
#endif
}
 
void loop() {
  // Leer temperatura y humedad del sensor
  double temperatura = hdc1080.readTemperature();
  double humedad = hdc1080.readHumidity();
 
#ifdef _DEBUG_
  // Mostrar datos en el monitor serie
  Serial.print("Temperatura = ");
  Serial.print(temperatura);
  Serial.print("ºC  Humedad = ");
  Serial.print(humedad);
  Serial.println("ºC");
#endif
 
  delay(3000);
}

Lo primero es importar las librerías. Hacen falta la librería Wire.h y la librería ClosedCube_HDC1080.h.

Luego se declara una instancia de la clase ClosedCube_HDC1080.

En la función setup() se inicia la comunicación con el sensor llamando a la función hdc1080.begin(0x40). Admite un parámetro y es la dirección I2C del sensor.

En la hoja de características técnicas puedes leer que el sensor viene configurado con una dirección I2C de 7-bit. La dirección es 1000000 en binario.

Si traduces este número a hexadecimal el resultado es 40. Por eso a la función hdc1080.begin(…) se pasa como parámetro el número en hexadecimal 0x40.

En C/C++ los números en hexadecimal se representan poniendo antes 0x. Esto indica que lo que viene después es un número hexadecimal. Esto hace que se pueda diferenciar de los números decimales y binarios.

Por último para obtener la temperatura se utiliza la función hdc1080.readTemperature() y hdc1080.readHumidity(). Las dos funciones devuelven datos del tipo double.

Si cargas el código a tu placa (ya sea Arduino o ESP8266) obtendrás un resultado parecido a esto.

Obtener la temperatura y humedad del sensor es bastante sencillo. En el siguiente ejemplo te voy a enseñar cómo puedes cambiar la resolución tanto de la temperatura como de la humedad.

Cambio de resolución sensor temperatura y humedad HDC1080 Arduino

En muchas ocasiones no es necesario utilizar una resolución muy alta. Por ejemplo, si quieres medir la temperatura en tu casa no hace falta que detectes grandes variaciones entre medidas.

Esto te permite ahorrar energía ya que a menos resolución menos tiempo de respuesta tiene y antes entrará en modo dormido consiguiendo así reducir el consumo. Algo muy importante en proyectos alimentados con baterías o pilas.

El sensor de temperatura y humedad HDC1080 te permite cambiar la resolución a través de la librería que estamos utilizando.

En el siguiente código te muestro un ejemplo de cómo hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#define _DEBUG_
 
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
 
// Instancia a la clase
ClosedCube_HDC1080 hdc1080;
 
void setup() {
#ifdef _DEBUG_
  Serial.begin(9600);
#endif
 
  // Iniciar sensor al que se pasa la dirección I2C
  // Por defecto es un número de 7-bit 1000000 que
  // equivale al 40 en hexadecimal
  // Por defecto la precisión es de 14-bit para temperatura y humedad
  hdc1080.begin(0x40);
 
  // Cambiar resolución
  hdc1080.setResolution(HDC1080_RESOLUTION_8BIT, HDC1080_RESOLUTION_11BIT);
  
#ifdef _DEBUG_
  Serial.println(" ");
  Serial.println("Inicado sensor HDC1080");
#endif
}
 
void loop() {
  // Leer temperatura y humedad del sensor
  double temperatura = hdc1080.readTemperature();
  double humedad = hdc1080.readHumidity();
 
#ifdef _DEBUG_
  // Mostrar datos en el monitor serie
  Serial.print("Temperatura = ");
  Serial.print(temperatura);
  Serial.print("ºC  Humedad = ");
  Serial.print(humedad);
  Serial.println("ºC");
#endif
 
  delay(3000);
}

Lo único que he añadido al código es la línea 21 donde pongo hdc1080.setResolution(HDC1080_RESOLUTION_8BIT, HDC1080_RESOLUTION_11BIT);

Esta función cambia la resolución de la humedad y la temperatura que por defecto, es 14-bit.

Ok Luis pero ¿de dónde salen las constantes HDC1080_RESOLUTION_8BIT y HDC1080_RESOLUTION_11BIT.

Estas constantes las puedes ver si abre el archivo ClosedCube_HDC1080.h que se encuentra en la carpeta Libraries.

Puedes abrirlo con el Bloc de notas o cualquier otro editor de texto. Te recomiendo utilizar uno especial para programación como el Sublime Text.

A parte tienes la constante para la resolución de 14-bit, HDC1080_RESOLUTION_14BIT.

El resultado es muy parecido al que se obtiene con el anterior ejemplo.

HDC1080 sensor temperatura y humedad

Por último vamos a ver cómo activar el calefactor que tiene incorporado el sensor de temperatura y humedad.

Activar calefactor del sensor HDC1080

A parte de las funciones que hemos visto, la librería del sensor de temperatura y humedad HDC1080 también permite activar el calefactor durante un tiempo determinado.

El calefactor es muy útil cuando se quiere eliminar la condensación acumulada en el sensor debido a un largo periodo de exposición a humedades altas.

En el siguiente código te muestro cómo hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#define _DEBUG_
 
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
 
// Instancia a la clase
ClosedCube_HDC1080 hdc1080;
 
void setup() {
#ifdef _DEBUG_
  Serial.begin(9600);
#endif
 
  // Iniciar sensor al que se pasa la dirección I2C
  // Por defecto es un número de 7-bit 1000000 que
  // equivale al 40 en hexadecimal
  // Por defecto la precisión es de 14-bit para temperatura y humedad
  hdc1080.begin(0x40);
 
  // Cambiar resolución
  hdc1080.setResolution(HDC1080_RESOLUTION_8BIT, HDC1080_RESOLUTION_11BIT);
 
#ifdef _DEBUG_
  Serial.println(" ");
  Serial.println("Inicado sensor HDC1080");
  Serial.println("Calefactor encendido. Por favor espere...");
#endif
 
  // Activar calefactor
  hdc1080.heatUp(10); // activa el calefactor 10 segundos
 
#ifdef _DEBUG_
  Serial.println("Calefactor apagado");
#endif
}
 
void loop() {
  // Leer temperatura y humedad del sensor
  double temperatura = hdc1080.readTemperature();
  double humedad = hdc1080.readHumidity();
 
#ifdef _DEBUG_
  // Mostrar datos en el monitor serie
  Serial.print("Temperatura = ");
  Serial.print(temperatura);
  Serial.print("ºC  Humedad = ");
  Serial.print(humedad);
  Serial.println("ºC");
#endif
 
  delay(3000);
}

Lo único que he añadido al código anterior es la línea 30 donde llamo a la función hdc1080.heatUp(10) que activa el calefactor. Esta función admite un único parámetro que indica el número de segundos que se mantendrá activo el calefactor.

Si cargas el código a la placa verás algo parecido a esto.

HDC1080 sensor temperatura y humedad

Y con esto damos por finalizado este tutorial. A continuación te dejo las conclusiones.

Conclusiones sensor de temperatura y humedad HDC1080

A lo largo de este tutorial hemos visto las características técnicas del sensor de temperatura y humedad HDC1080.

Se trata de un sensor cuyas características más importantes son:

  • Es un sensor digital y se comunica por I2C.
  • Tiene un amplio rango de voltaje de alimentación, entre 2,7V y 5V, haciendo que sea compatible con Arduino (5V) y ESP8266 (3V3).
  • El consumo es muy reducido. Esto es ideal para proyectos alimentados con baterías o pilas.
  • El tiempo de respuesta es muy rápido lo que implica que estará mucho tiempo en modo dormido.
  • Tiene una precisión aceptable y si necesitas mucha resolución, se pueden obtener hasta 14-bit.
  • Su bajo coste también hace que sea una buena elección.
  • Se puede programar fácilmente con una librería.

Por todos estos motivos, el sensor de temperatura y humedad HDC1080 es una buena elección para cualquier proyecto donde se necesite medir estas magnitudes.

Cualquier duda o comentario, lo puedes dejar aquí abajo. Gracias :)

integraciones de Home Assistant

Integraciones de Home Assistant

En este tutorial voy a hablar de las integraciones de Home Assistant pero antes déjame contarte la historia de Jack, un norteamericano de bien, de los … [+ info...]

dispositivos inteligentes para el hogar

Tipos de dispositivos inteligentes para el hogar

En este artículo voy a hablar de los dispositivos domóticos o dispositivos inteligentes para el hogar que pueden ser integrados dentro de Home … [+ info...]

osciloscopios

Osciloscopio para proyectos con Arduino

Una imagen vale más que mil palabras. Seguro has escuchado esta frase alguna vez y es probable que en la mayoría de las ocasiones lo que dice sea … [+ info...]

Copyright © 2023 · Programar Fácil · Aviso legal

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando, consideramos que acepta su uso.Aceptar Política de privacidad y cookies
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR