INTRODUCCION
Cuando se realiza proyectos, ejercicios relacionados al uso de Arduino o algún otro microcontrolador, podemos no solo utilizar nuestro terminal Serial para visualizar algunos datos. En este ejercicio, usaremos nuestra pantalla LCD de 16 columnas con 2 filas, junto al controlador I2C, para poder visualizar nuestros datos de medición.
El funcionamiento de esta pantalla está relacionado en la impresión de los datos en el LCD que tenemos a la mano; los datos que se muestran pueden ser mostrados de manera simple como con la manera de usar un cursor para imprimir los datos en cualquier parte de nuestra pantalla LCD.
La aplicación de esta pantalla puede estar relacionado con varios casos de uso, como visualización de datos recopilado de sensores, muestra de información en sistemas para alerta temprana, y mucho más.
MOMENTO DE HACER NUESTRO CIRCUITO…
Para la puesta en marcha de este circuito, se necesitará los siguientes componentes:
- Arduino UNO
- Sensor DHT11
- Pantalla LCD (16×2)
- Controlador I2C
- Protoboard
- Cables Jumper Male – Male
- Cables Jumper Male – Female
Se muestra a continuación, el diagrama de posición y función de cada uno de los pines del Arduino UNO , del sensor DHT11 y la pantalla LCD 16×2 con el controlador I2C.
- Diagrama Pinout de Arduino UNO
- Diagrama Pinout del sensor DHT11
- Diagrama Pinout de pantalla LCD 16×2 con controlador I2C
Ahora se muestra el diagrama de conexiones del circuito presentado:
ANTES DE PROGRAMAR…
Debemos tener instalados las librerías Wire y LiquidCrystal para el uso de la pantalla LCD. Esta última no viene instalada por defecto en el IDE de Arduino, por lo cual procedemos a instalar en Programa/Incluir Librería/Administrar librerías
Además, debemos tenemos que tener instalado la librería para usar el sensor DHT11. Procedemos a hacer la instalación de la librería del sensor DHT11.
Una vez realizado la instalación de las librerías y armado el circuito, procedemos a hacer nuestro código.
PROGRAMAMOS NUESTRA TARJETA…
/*
* El ejemplo de esta semana esta relacionado al uso del LCD(16x2) a un Arduino UNO
*
* Para esta semana, necesitamos lo siguiente:
* Arduino UNO
* Sensor DHT11
* Protoboard
* Cable Arduino UNO
* Cables Jumper Male-male
* Pantalla LCD 16x2
*
* Las conexiones físicas se mencionaron en el inciso anterior
* Realizado por: Sebastian Carranza - Equipo TodoMaker
*/
/*Incluímos las librerías a usar: Wire, LiquidCrystal_I2C y del sensor DHT*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
/*Definimos que el Pin de Datos del sensor estará conectado al pin 2 del Arduino UNO*/
#define DHTPIN 2
/*Definimos que el tipo de sensor que estamos utilizando es un DHT11*/
#define DHTTYPE DHT11 // DHT 11
/*Se actualizan algunos parámetros del DHT11 con los puntos definidos anteriormente*/
DHT dht(DHTPIN, DHTTYPE);
/*Definimos el objeto LCD con una dirección de 0x27, con 16 columnas y 2 filas*/
LiquidCrystal_I2C lcd(0x27,16,2);
/*Definimos la función Setup() para iniciar nuestro circuito*/
void setup() {
/*Iniciamos el terminal Serial a 115200*/
Serial.begin(115200);
/*Imprimimos 2 frases en el terminal Serial, para indicar el inicio del circuito*/
Serial.println("Medición inciada");
Serial.println("DHT11 Encendido");
/*Iniciamos nuestro sensor DHT11 y agregamos un retardo de 1 segundo*/
dht.begin();
delay(1000);
/*Iniciamos nuestra pantalla LCD*/
lcd.init();
/*Encendemos la luz de fondo de nuestro LCD*/
lcd.backlight();
/*Fijamos el cursor del LCD en 0,0 para imprimir la frase "Sensores Listos"*/
lcd.setCursor(0, 0);
lcd.print("Sensores listos");
/*Fijamos el cursor del LCD en 0,1 para imprimir la frase "DHT11 ON"*/
lcd.setCursor(0, 1);
lcd.print("DHT11 ON");
/*Agregamos un retardo de 2 segundos e imprimimos una frase en el terminal Serial*/
delay(2000);
Serial.println("Sensores Instalados y listos");
}
/*Iniciamos el bucle de la función Loop()*/
void loop() {
/*Hacemos la medición de Temperatura y Humedad del sensor, y lo definimos en variables Float */
float h = dht.readHumidity();
float t = dht.readTemperature();
/*Limpiamos nuestro LCD*/
lcd.clear();
/*Fijamos el cursor del LCD en 0,0 para imprimir "Temperatura"*/
lcd.setCursor(0,0);
lcd.print("Temperatura");
/*Fijamos el cursor del LCD en 0,1 para imprimir "Humedad"*/
lcd.setCursor(0,1);
lcd.print("Humedad");
/*Fijamos el cursor del LCD en 11,0 para imprimir la Temperatura que marca el sensor*/
lcd.setCursor(11,0);
lcd.print(t);
/*Fijamos el cursor del LCD en 11,1 para imprimir la Humedad que marca el sensor*/
lcd.setCursor(11,1);
lcd.print(h);
/*Agregamos un retardo de 2 segundos, para luego imprimir los mismos datos ahora en nuestro terminal Serial*/
delay(2000);
Serial.print("Temperatura registrada: ");
Serial.print(t);
Serial.println("°C");
Serial.print("Humedad registrada: ");
Serial.print(h);
Serial.println("%");
Serial.println("-----------------------------------------");
/*Agregamos un retardo de 10 segundos antes de que se reinicie el bucle*/
delay(10000);
}
El funcionamiento del código se muestra a continuación.
- Como primer paso, incluimos las librerías que usaremos: Wire.h , LiquidCrystal_I2C.h (ambas para hacer la comunicación entre la pantalla LCD con el controlador I2C) y la librería del sensor DHT.h
/*Incluímos las librerías a usar: Wire, LiquidCrystal_I2C y del sensor DHT*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
- Ahora, definimos que el pin de Datos del sensor estará conectado al pin digital 2 del Arduino UNO, y que además, estamos usando el sensor DHT11.
/*Definimos que el Pin de Datos del sensor estará conectado al pin 2 del Arduino UNO*/
#define DHTPIN 2
/*Definimos que el tipo de sensor que estamos utilizando es un DHT11*/
#define DHTTYPE DHT11 // DHT 11
/*Se actualizan algunos parámetros del DHT11 con los puntos definidos anteriormente*/
DHT dht(DHTPIN, DHTTYPE);
- Definimos que nuestra pantalla LCD tiene una dirección 0x27 y esta contiene 16 columnas y 2 filas.
/*Definimos el objeto LCD con una dirección de 0x27, con 16 columnas y 2 filas*/
LiquidCrystal_I2C lcd(0x27,16,2);
- Iniciamos la función Setup(); aquí iniciamos el terminal Serial a 115200, e imprimimos en ella 2 frases que nos comunicarán que se iniciará la medición de las variables de los sensores.
/*Definimos la función Setup() para iniciar nuestro circuito*/
void setup() {
/*Iniciamos el terminal Serial a 115200*/
Serial.begin(115200);
/*Imprimimos 2 frases en el terminal Serial, para indicar el inicio del circuito*/
Serial.println("Medición inciada");
Serial.println("DHT11 Encendido");
- Iniciamos a la librería con DHT.begin() e incluimos un retardo de 1 segundo.
/*Iniciamos nuestro sensor DHT11 y agregamos un retardo de 1 segundo*/
dht.begin();
delay(1000);
- Iniciamos nuestra pantalla LCD, y además procedemos a encender la luz de fondo del mismo.
/*Iniciamos nuestra pantalla LCD*/
lcd.init();
/*Encendemos la luz de fondo de nuestro LCD*/
lcd.backlight();
- Fijamos el cursor en (0,0) para que se imprima una frase; de igual manera, fijamos en el cursor (0,1) para imprimir otra frase en la segunda fila.
/*Fijamos el cursor del LCD en 0,0 para imprimir la frase "Sensores Listos"*/
lcd.setCursor(0, 0);
lcd.print("Sensores listos");
/*Fijamos el cursor del LCD en 0,1 para imprimir la frase "DHT11 ON"*/
lcd.setCursor(0, 1);
lcd.print("DHT11 ON");
- Agregamos un retardo de 2 segundos y procedemos a imprimir una frase en el terminal Serial, indicando el inicio del proceso. Aquí, cerramos la función Setup().
/*Agregamos un retardo de 2 segundos e imprimimos una frase en el terminal Serial*/
delay(2000);
Serial.println("Sensores Instalados y listos");
}
- Iniciamos la función Loop(), y hacemos la lectura del sensor en dos variables float (decimales), en las que se almacenarán los datos de temperatura y humedad.
void loop() {
/*Hacemos la medición de Temperatura y Humedad del sensor, y lo definimos en variables Float */
float h = dht.readHumidity();
float t = dht.readTemperature();
- Borramos los datos o frases que se estén imprimiendo en el LCD.
/*Limpiamos nuestro LCD*/
lcd.clear();
- Fijamos en el cursor (0,0) para imprimir la frase “Temperatura”,y en el cursor (0,1) la frase “Humedad”. Esto para indicar en que posición se mostrarán los datos de la medición.
/*Fijamos el cursor del LCD en 0,0 para imprimir "Temperatura"*/
lcd.setCursor(0,0);
lcd.print("Temperatura");
/*Fijamos el cursor del LCD en 0,1 para imprimir "Humedad"*/
lcd.setCursor(0,1);
lcd.print("Humedad");
- Fijamos el cursor en el punto (11,0) para imprimir el valor de temperatura que está midiendo el sensor; de igual manera, se fija en el cursor el punto (11,1) para imprimir el valor de humedad que mide el sensor.
/*Fijamos el cursor del LCD en 11,0 para imprimir la Temperatura que marca el sensor*/
lcd.setCursor(11,0);
lcd.print(t);
/*Fijamos el cursor del LCD en 11,1 para imprimir la Humedad que marca el sensor*/
lcd.setCursor(11,1);
lcd.print(h);
- Si deseamos mostrar también los datos en el terminal Serial, usamos Serial.print(“”) para imprimir tanto los datos de temperatura como humedad, registrados por el sensor.
/*Agregamos un retardo de 2 segundos, para luego imprimir los mismos datos ahora en nuestro terminal Serial*/
delay(2000);
Serial.print("Temperatura registrada: ");
Serial.print(t);
Serial.println("°C");
Serial.print("Humedad registrada: ");
Serial.print(h);
Serial.println("%");
Serial.println("-----------------------------------------");
- Al final, usamos un retardo de 10 segundos para luego, se proceda a reiniciar el bucle de la función; aquí además, cerramos la función Loop().
/*Agregamos un retardo de 10 segundos antes de que se reinicie el bucle*/
delay(10000);
}
HORA DE PROBAR EL CIRCUITO…
Se muestra a continuación imágenes del código en el IDE de Arduino, como del circuito realizado.
HORA DE EJECUTAR Y PROBAR EL PROYECTO…
Una vez hecho el circuito y subido nuestro código, obtendremos los siguientes resultados.
CONCLUSIONES
Terminado la realización de este ejercicio, podemos llegar a la conclusión de que una pantalla LCD (sea el tamaño que usemos), es de gran importancia en los proyectos de electrónica y/o domótica. Esto porque, no es apropiado conectarse siempre al terminal Serial de un microcontrolador para ver los datos que se están midiendo u obteniendo; y es por eso que el uso de la pantalla apoya en la observación y apreciamiento de los datos.
Además, este tipo de proyectos son bastante buenos para practicar no solo las skills de electrónica, sino también la parte de domótica e Internet de las Cosas, ya que con el uso de la pantalla, podemos apreciar los datos que se estarían enviando tanto a un servidor como a un web service alojado en la nube.
Te invitamos a tomar el curso de Introducción al ESP32: Introducción al ESP32 | TodoMaker’s School