# Temperatura y humedad

Vamos a utilizar dos sensores para medir estas variables: **DHT12** y su hermano pequeño **DHT11**. Ya explicamos estos sensores en el capítulo de sensores [https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/sensores](https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/sensores)

[![image-1644407103198.png](https://libros.catedu.es/uploads/images/gallery/2022-02/scaled-1680-/image-1644407103198.png)](https://libros.catedu.es/uploads/images/gallery/2022-02/image-1644407103198.png)

##### **<span style="color: rgb(22, 145, 121);">¿Cómo se conecta?</span>**

Para ello tendrás que realizar las conexiones necesarias para poder obtener los datos desde Arduino. Se trata de un sensor digital que utiliza 3 pines: Alimentación +5V, tierra/GND (-) y pin de datos (out) por donde se envían los datos de humedad y temperatura.

<p class="callout success">A veces el sensor viene sobre 4 pines, en este caso uno de ellos no se conecta.</p>

Como las medidas de humedad y temperatura van por un solo pin, la información se transmite como un tren de pulsos en serie, por lo tanto, necesitamos un programa que "extraiga" eso dos datos de forma diferenciada. Para ello vamos a usar una librería referenciada por **DHT11.h**[.](https://libros.catedu.es/libreria_dht11h.html) A través del monitor serie del IDE de Arduino podremos ver las medidas obtenidas.

##### <span style="color: rgb(22, 145, 121);">**Esquema DHT11 :**</span>

Es un modelo "conectar y listo" que ya vienen con los cables preparados, pero si te fijas son en este orden : GND - 5V -NC - D2 donde NC significa NO CONECTADO y D2 son los datos

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-1vcjujas.png)

Lo conectamos en el Arduino sin necesidad de placa Protoboard:

<p class="callout info">Para este montaje, la colocación de la placa Edubásica no implica ninguna ventaja.</p>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-wlnglnzl.png)

utilizando cables macho-macho

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-gl7gymsl.png)

Esquema de conexión:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-v4q4qs0n.png)

##### <span style="color: rgb(22, 145, 121);">**Esquema DHT12**</span>

Es un sensor que necesita 3.3V pero si trabajas con 5V necesitas hacer este puente con una resistencia de más o menos 10K

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-pe8d1uk7.png)

O con la placa Protoboard

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-jgjcxuvb.png)

[Fuente Cactus.io](http://cactus.io/hookups/sensors/temperature-humidity/dht22/hookup-arduino-to-dht22-temp-humidity-sensor) CC BY-NC-SA 3.0

##### <span style="color: rgb(22, 145, 121);"><span style="color: #169179;"><span style="font-size: 19.6px;">**Librería**</span></span> **DHT11.h**</span>

Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde [https://github.com/adafruit/DHT-sensor-library](https://github.com/adafruit/DHT-sensor-library) o este enlace de [Drive ](https://drive.google.com/file/d/0B2B9eCp8wRQhdTQwY196cHFfckk/view?usp=sharing)(zip - 4,29 <abbr lang="en" title="KiloBytes">KB</abbr>), o simplemente buscando DHT11 library en Internet.

Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="569" id="bkmrk--23" src="https://docs.google.com/presentation/d/e/2PACX-1vSTHyelOzP8IRe6NORUJzw0IgxPzlyGoeiDS4eRxOeprKd1BClBy7LzF36hPPc-MESzZdEGj37_DBUx/embed?start=false&loop=false&delayms=3000" width="100%"></iframe>

##### <span style="color: rgb(22, 145, 121);"><span style="color: #169179;"><span style="font-size: 19.6px;">**Librería**</span></span> **DHT12.h**</span>

Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde [https://github.com/adafruit/DHT-sensor-library](https://github.com/adafruit/DHT-sensor-library) o simplemente buscando DHT12 library en Internet.

Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="569" id="bkmrk--24" src="https://docs.google.com/presentation/d/e/2PACX-1vSTHyelOzP8IRe6NORUJzw0IgxPzlyGoeiDS4eRxOeprKd1BClBy7LzF36hPPc-MESzZdEGj37_DBUx/embed?start=false&loop=false&delayms=3000" width="100%"></iframe>

#### <span style="color: rgb(22, 145, 121);">**Montaje 15 Medición T y H por puerto serie** </span><span style="color: rgb(22, 145, 121);">**con DHT11:**</span>

[https://create.arduino.cc/editor/javierquintana/57997bda-7323-4f8a-9157-92f9611dbdba/preview](https://create.arduino.cc/editor/javierquintana/57997bda-7323-4f8a-9157-92f9611dbdba/preview)<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/57997bda-7323-4f8a-9157-92f9611dbdba/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

El resultado se puede ver en este vídeo, simplemente soplando nuestro vaho pasamos de 20% de humedad y 22ºC a 93% y 24ºC.

<p class="callout warning">Si lo hacéis con niños, enseguida se les ocurre ponerlo en el sobaco, menos mal que solo son 5V ;) \_</p>

<iframe allowfullscreen="allowfullscreen" height="314" id="bkmrk--25" src="//www.youtube.com/embed/gLxdSaxOJbY?rel=0" width="560"></iframe>

#### <span style="color: rgb(22, 145, 121);">**Montaje 16 Medición T y H por puerto serie** </span><span style="color: rgb(22, 145, 121);">**con DHT12**</span>

La librería de este sensor es más potente y nos puede decir la sensación térmica:

[https://create.arduino.cc/editor/javierquintana/66a222b4-8e95-4693-b8db-df5a1fdb68a3/preview](https://create.arduino.cc/editor/javierquintana/66a222b4-8e95-4693-b8db-df5a1fdb68a3/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/66a222b4-8e95-4693-b8db-df5a1fdb68a3/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

El resultado es:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-5nszqssj.png)

##### <span style="color: rgb(22, 145, 121);">**Montaje 17 H y T por LCD**</span>

Ahora vamos a conectarlo por LCD :

<iframe allowfullscreen="allowfullscreen" height="314" src="//www.youtube.com/embed/6J8PKruEcD4" width="560"></iframe>

##### <span style="color: rgb(22, 145, 121);">**Conexiones**</span>

Si tienes el DHT11 o si tienes el DH12 [lo has visto ya](https://libros.catedu.es/descripcin_y_esquemas2.md) Ahora añade el [LCD con el I2C](https://libros.catedu.es/3-entradas-y-salidas/31-lcd/312-i2c.md)

##### <span style="color: rgb(22, 145, 121);">**Programa**</span>

En este caso lo hacemos con el DHT12 ya sabes que si utilizas DHT11 no mide la humedad y la sensación térmica

[https://create.arduino.cc/editor/javierquintana/10dcd8cb-1128-4959-8d78-70464cea939f/preview](https://create.arduino.cc/editor/javierquintana/10dcd8cb-1128-4959-8d78-70464cea939f/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/10dcd8cb-1128-4959-8d78-70464cea939f/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

<span style="color: rgb(22, 145, 121);">**<span style="font-family: var(--font-heading, var(--font-body)); font-size: 2.8275em;">Processing</span>**</span>

Es un programa similar al IDE de Arduino que has estado manejando hasta ahora, sólo cambia en un botón de PLAY y en otro de STOP. Es software abierto desarrollado en Java por *Ben Fry y Casey Reas* a raíz de una reflexiones en un congreso donde se detecto esta necesidad. Te lo puedes descargar de [http://processing.org](http://processing.org)

##### <span style="color: rgb(22, 145, 121);">**¿Para qué sirve?**</span>

Es muy común tener la necesidad te representar los datos que nos da Arduino en un entorno visual mucho más atractivo que el monitor serie que nos ofrece IDE Arduino. Si quieres saber las instrucciones que tiene y más información [consulta esta página](http://diymakers.es/arduino-processing-primeros-pasos/).

##### <span style="color: rgb(22, 145, 121);">**Saber el puerto de conexión**</span>

Para empezar a utilizar Processing con nuestro Arduino necesitamos saber en qué puerto se conecta, una forma fácil es cargar y ejecutar este código con el Arduino conectado y que liste los puerto, esta instrucción **printArray(Serial.list());** nos lo puede decir

Y el resultado puedes ver que sale abajo en la consola \[0\] "COM4" luego es el 0 en mi caso

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-f6epnggv.png)

#### <span style="color: rgb(22, 145, 121);">**Montaje 18 Representación gráfica de medidas con Processing.**</span>

Una vez obtenidos los datos de temperatura y humedad a través del sensor DHT11 desde Arduino, enviamos, a través del puerto serie, estos datos al PC, donde tenemos ejecutando un programa en Processing que está "escuchando" el puerto serie, obteniendo los datos y representándolos en pantalla. Simultáneamente guardamos los datos en un archivo de texto que posteriormente podremos analizar en una hoja de cálculo.

#### Programa a cargar en el ARDUINO

Cargamos este programa, fíjate que sólo ponemos un valor de la temperatura, si queremos representar la humedad, quitamos el comentario de la temperatura y ponemos el de la humedad

<p class="callout warning">**IMPORTANTE**: No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing.</p>

Si fuera un DHT12 en vez de un DHT11 poner comentarios a las 4 primeras líneas delante // y quitárselas a las 3 siguientes

[https://create.arduino.cc/editor/javierquintana/09ac70ea-0d4b-4d26-bce4-4b45bb45d3cb/preview](https://create.arduino.cc/editor/javierquintana/09ac70ea-0d4b-4d26-bce4-4b45bb45d3cb/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/09ac70ea-0d4b-4d26-bce4-4b45bb45d3cb/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

<span style="color: rgb(34, 34, 34); font-family: var(--font-heading, var(--font-body)); font-size: 1.666em; font-weight: 400;">Programa a Cargar en PROCESING</span>

[Aquí lo tienes](https://github.com/catedu/programa-arduino-mediante-codigo/raw/master/programas/MiProgramaProcesing.rar) (rar - 1,96 <abbr lang="en" title="KiloBytes">KB</abbr>), sólo representa un valor, está puesto en el puerto 0 puertoArduino = new Serial(this, Serial.list()\[0\], 9600);

El resultado puedes verlo aquí abajo para la temperatura, el aumento se debe a aplicar vaho al sensor:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-48ierqn2.png)

### Otro programa de visualización de datos

En este caso no vamos a representar los datos en forma de gráfica, sino por colores, y además vamos a añadir un botón que encienda un LED conectado por simplicidad en el pin 13

#### Programa a cargar en el ARDUINO

El programa lee la temperatura y lo escribe en el puerto serie en forma de byte. También lee el puerto serie para cambiar el estado del led.

```C#
#include "DHT.h"
#define DHTPIN 2   
#define DHTTYPE DHT11   // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

boolean status=LOW; //Estado del led
void setup() {
  Serial.begin(9600); 
  pinMode(13,OUTPUT);
  dht.begin();
}

void loop() {
  delay(100);

  //float h = dht.readHumidity();
  int temp = dht.readTemperature();
  Serial.write(temp); //Enviamos los datos en forma de byte
  if(Serial.available()>0)//Si el Arduino recibe datos a través del puerto serie
  {
    byte dato = Serial.read(); //Los almacena en la variable "dato"
    if(dato==65)  //Si recibe una "A" (en ASCII "65")
    {
      status=!status; //Cambia el estatus del led
    }
    digitalWrite(13,status);
  }

}
```

En el Arduino tenemos que poner el sensor de temperatura y humedad tal y como se ha explicado en el Montaje 8 y además un led en el 13

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-sijdgr5e.png)

#### Programa en Processing

[te lo puedes descargar aquí ](https://github.com/catedu/programa-arduino-mediante-codigo/raw/master/programas/dymakers.rar) (rar - 31,02 <abbr lang="en" title="KiloBytes">KB</abbr>)(recuerda cambiar port = new Serial(this, Serial.list()\[0\], 9600); por tu puerto )

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-sdx5xtwq.png)

## dweet.io

Disponemos del portal web **dweet.io** que nos ofrece un servicio para enviar y representar datos en la nube sin necesidad, ni si quiera, de registrarnos en la plataforma.

Vamos a ver los pasos a seguir:

1. Probamos la plataforma introduciendo un dato, para ello en el navegador tecleamos por ejemplo (cambia **catedu** por tu nombre): [https://dweet.io/dweet/for/catedu?temperatura=20](http://dweet.io/dweet/for/jorgeroden?temperatura=20)
2. Abre otra pestaña del navegador o utiliza un móvil para seguir el dato: [https://dweet.io/follow/catedu](http://dweet.io/follow/jorgeroden)
3. Prueba añadiendo otra variable, en este caso la humedad: [https://dweet.io/dweet/for/catedu?temperatura=20&amp;humedad=8](http://dweet.io/dweet/for/jorgeroden?temperatura=20&humedad=8)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-r7gezuke.png)

Automatizamos el proceso de recogida de datos desde Arduino con un programa en Processing, que enviará datos a través del navegador a dweet.io.

**IMPORTANTE**: No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing.

#### REPRESENTACIÓN DE DATOS EN EL NAVEGADOR:

**Dweet.io** nos ofrecerá los datos de la siguiente manera:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-rkogx5f9.png)

Si queremos algo más vistoso podemos utilizar el servicio [freeboard.io](https://libros.catedu.es/freeboard.io) aunque en este caso nos tendremos que registrar en la web.

Una vez registrados podemos crear paneles indicadores configurados a nuestro gusto para visualizar la información. Primero habrá que añadir como fuente de datos Dweet.io y nuestro nombre utilizado allí (jorgeroden en el ejemplo).

Después creamos un panel indicando que la fuente de datos que queremos utilizar y la variable en cuestión a visualizar.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-pqozt2cl.png)

¡Y resultado puede ser de este tipo!

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-cauqm6yr.png)

##### <span style="color: rgb(22, 145, 121);">**Montaje 19 Visualización de datos en la nube. Internet de las cosas.**</span>

<p class="callout warning">Consejo: Si quieres una visualización más sencilla de los datos que recoge un Arduino y llevarlas a la nube, te recomendamos el curso ESP32 EN EL AULA [https://libros.catedu.es/books/esp32-en-el-aula](https://libros.catedu.es/books/esp32-en-el-aula) el apartado IoT por ejemplo con Telegram</p>

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-9dmfsrcp.png)

**Monitorizar los datos de temperatura y humedad obtenidos del sensor DHT11 en la nube.**

Para ello disponemos del portal web **dweet.io** que nos ofrece un servicio para enviar y representar datos en la nube sin necesidad, ni si quiera, de registrarnos en la plataforma.

Vamos a ver los pasos a seguir:

1. Probamos la plataforma introduciendo un dato, para ello en el navegador tecleamos por ejemplo (cambia **CATEDU** por tu nombre): [https://dweet.io/dweet/for/CATEDU?temperatura=20](http://dweet.io/dweet/for/jorgeroden?temperatura=20)
2. Abre otra pestaña del navegador o utiliza un móvil para seguir el dato: [https://dweet.io/follow/CATEDU](http://dweet.io/follow/jorgeroden)
3. Prueba añadiendo otra variable, en este caso la humedad: [https://dweet.io/dweet/for/CATEDU?temperatura=20&amp;humedad=8](http://dweet.io/dweet/for/jorgeroden?temperatura=20&humedad=8)

<p class="callout success">¿Quieres ver las cosas que ahora mismo se están difundiendo por dweet? Mira [https://dweet.io/see](https://dweet.io/see)</p>

Automatizamos el proceso de recogida de datos desde Arduino con un programa en Processing, que enviará datos a través del navegador a dweet.io.

<p class="callout warning">**IMPORTANTE**: No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing.</p>

#### PROGRAMA A CARGAR EN ARDUINO:

Si fuera un DHT12 en vez de un DHT11 poner comentarios a las 4 primeras líneas delante // y quitárselas a las 3 siguientes

[https://create.arduino.cc/editor/javierquintana/8154af00-c514-4936-81fb-b03fad1963f8/preview](https://create.arduino.cc/editor/javierquintana/8154af00-c514-4936-81fb-b03fad1963f8/preview)

<iframe frameborder="0" src="https://create.arduino.cc/editor/javierquintana/8154af00-c514-4936-81fb-b03fad1963f8/preview?embed" style="height: 510px; width: 100%; margin: 10px 0;"></iframe>

##### <span style="color: rgb(22, 145, 121);">**PROGRAMA A EJECUTAR EN PROCESSING :**</span>

```C#
// El puerto serie
Serial myPort;

void setup() {
 // Lista todos los puertos serie
 printArray(Serial.list());
 // OJO: Elige el puerto donde tengas conectado Arduino.
 // Cambia el "0" de Serial.list()[0] por el orden que 
 // tu puerto ocupe en la lista (0, 1, 2,...).
 // Si no lo tienes claro qué puerto ocupa Arduino mira
 // en el IDE Arduino en "Herramientas" mira el puerto que esté seleccionado.
 //Fíjate que tenemos la velocidad del puerto a la misma que pusimos en Arduino
 myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw() {
 while (myPort.available() > 0) {

    String lectura = myPort.readStringUntil(lf);
    if (lectura != null) {
        println(lectura);
       //IMPORTANTE! cambia CATEDU por tu nombre 
       // visualiza los resultados en esta web https://dweet.io/follow/CATEDU

      loadStrings("https://dweet.io/dweet/for/CATEDU?"+lectura);

    }

  }
}
```

##### <span style="color: rgb(22, 145, 121);">**REPRESENTACIÓN DE DATOS EN EL NAVEGADOR:**</span>

[https://dweet.io/follow/CATEDU](https://dweet.io/follow/CATEDU) nos **ofrecería** los datos de la siguiente manera:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-5wl4torz.png)

<p class="callout warning">No lo hagas, pues NO LO TENGO CONECTADO !! no sale nada !! por eso pone *"nos ofrecería"*</p>

El resultado es espectacular

<iframe allowfullscreen="allowfullscreen" class="giphy-embed" frameborder="0" height="363" id="bkmrk--29" src="https://giphy.com/embed/sjDV6YTbw8tig" width="480"></iframe>

[via GIPHY](https://giphy.com/gifs/reactiongifs-amazing-oc-sjDV6YTbw8tig)