Inicio » Displays para Arduino » Temperatura y humedad en LCD 1602

En este tutorial vamos a combinar dos tutoriales anteriores. Por un lado vamos a leer la temperatura y la humedad con un sensor DHT11 y por otro lado vamos a mostrar esa información en un display LCD 1602.

¡Pues vamos al lío!

Materiales

Una placa Arduino (Yo usaré Arduino UNO)
Un display LCD 1602
Adaptador I2C (PCF8574)
Un sensor DHT11
Una resistencia de 10KΩ
Cables
Una protoboard
Un ordenador con el IDE de Arduino instalado

Conexiones

El display LCD 1602 va conectado con Arduino mediante el protocolo I2C:

  • GND: A tierra. Cualquier pin GND de Arduino.
  • VCC: Alimentanción del display. A 5 V del Ardunio, que como puedes ver van conectados a la línea roja de la protoboard.
  • SDA: Pin SDA del Arduino. Puedes usar el penultimpo pin de la fila de pines digitales (tal y como lo puedes ver en el imagen, cable amarillo), o el pin A4, que también es SDA.
  • SCL: Va conectado al pin SCL del Arduino. En mi caso he utilizado el último pin de la fila digital (cable azul). También puedes usar el pin A5 de Arduino que es SCL.

En cuanto al sensor DHT11, ya vimos en un artículo anterior cómo hacer las conexiones. Si no lo has leido te lo recomiendo antes de continuar para tener claros cuáles son los pines de este sensor.

Resumidamente debes conectar una resistencia de pull-up de 10kohm al pin OUT del sensor, que es el que va conectado con el cable verde al pin 4 digital de Arduino.

El pin de alimentanción del sensor simplemente va conectado a 5 V (cable rojo) y el pin de tierra del sensor a la tierra del Arduino (cable negro).

Completadas todas las conexiones vamos a por el sketch.

Sketch

El siguiente es el scketch necesario para leer la temperatura y humedad del sensor DHT11 y mosrtrar los datos en el display:

#include <LiquidCrystal_I2C.h>
#include <DHT11.h>

//DECLARACIONES
LiquidCrystal_I2C lcd(0X3f,16,2);
DHT11 dht11(4);

//CONFIGURACIÓN
void setup()
{
  lcd.init();
  lcd.backlight();
}

//FUNCIÓN LOOP
void loop()
{
  int temp = dht11.readTemperature();
  int hum = dht11.readHumidity();
  if (temp != DHT11::ERROR_CHECKSUM && temp != DHT11::ERROR_TIMEOUT &&
        hum != DHT11::ERROR_CHECKSUM && hum != DHT11::ERROR_TIMEOUT)
  {
    lcd.setCursor(0, 0);
    lcd.print("Temperatura: ");
    lcd.print(temp);
    lcd.setCursor(0, 1);
    lcd.print("Humedad: ");
    lcd.print(hum);
  }
  delay(1000);
}

Para implementar este sketch necesitas dos librerías:

Debes instalarlas desde el IDE de Arduino si no lo has hecho ya y en cuanto las tengas incluyelas al princpio del sketch tal y como he hecho yo:

#include <LiquidCrystal_I2C.h>
#include <DHT11.h>

Declaraciones

He declarado dos objetos justo después de incluir las librerías. Son los objetos necesarios para utilizar el sensor y el LCD:

LiquidCrystal_I2C lcd(0X3f,16,2);
DHT11 dht11(4);

El objeto lcd nos permitirá mostrar en el display la temperatura y la humedad y el objeto dht11 nos permitirá leer del sensor la temperatura y la humedad del ambiente. Recuerda indicar a este útlmio el pin digital en el que has conectado el pin OUT del sensor. En mi caso es el pin 4.

Configuración

Dentro de la función setup he incluido dos instrucciones para configurar el display LCD:

void setup()
{
  lcd.init();
  lcd.backlight();
}

La primera instrucción (lcd.init()) inicia el LCD y el bus I2C.

La segunda instrucción(lcd.backlight()) ilumina el display.

En cuanto al sensor no es necesaria ninguna configuración especial.

Función loop

Dentro de la función loop es donde se realizarán las lecturas del sensor y se enviarán al display.

Las dos primeras instrucciones leen la temperatura y la humedad respctivamente:

int temp = dht11.readTemperature();
int hum = dht11.readHumidity();

La temperatura queda almacenadada en el variable temp y la humedad en la variable hum.

Con la instrucción if se verifica que la lectura se ha realizado correctamente y no se han producido errores:

if (temp != DHT11::ERROR_CHECKSUM && temp != DHT11::ERROR_TIMEOUT &&
        hum != DHT11::ERROR_CHECKSUM && hum != DHT11::ERROR_TIMEOUT)

Si es todo es correcto se envían las mediciones al display para que se muestren.

En la primera línea la temperatura:

lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(temp);

La función setCursor del objeto lcd se encarga de posicionar el cursor en la columna 0, fila 0, es decir, en la primera posición de la primera línea del display.

A continuación la función print muestra en dicha posición la palabra “Temperatura: ” y a continuación, la siguiente función print muestra el valor medido del sensor que habíamos guardado anteriomente en el variable temp.

Lo siguiente es hacer lo mismo con la humedad, pero en este caso en la linea 2 del display:

lcd.setCursor(0, 1);
lcd.print("Humedad: ");
lcd.print(hum);

En esta ocasión la función setCursor coloca el cursor en el columna 0 de la final 1, es decir, en la primera posición de la segunda fila del display. Lo que se imprime esta vez en el LCD es la palabra “Humedad” seguida de la humedad medida anteriormente del sensor y almacenada en la variable hum.

Si te fijas, al final de la función loop hay un delay de 5 segundos (5000) para que se haga una medición nueva cada 5 segundos y se vaya actualizando la información que se muestra en el display.

El resultado final será algo así:

temperatura y humedad de sensor DHT11 mostradas en display LCD 1602

Prueba a cubrir el sensor con la mano, a ver qué pasa.