Circuito con Led, LCDi2c, pulsador, sensor temperatura y humedad

Buenas!

En este proyecto utilizamos una protoboard (o placa de prototipos) a la que conectamos un pulsador, un módulo LCD i2c con 16 columnas y 2 filas  y un led de color rojo con su resistencia en serie. A este conjunto también añadimos un sensor de temperatura y humedad DHT 11

El objetivo es que cuando se hace una pulsación el botón se encienda el led y se actualice la pantalla del lcd para mostrar que el led está encendido, mientras se va mostrando la temperatura y humedad interior recogida por el sensor de temperatura y humedad. Esto lo hace el programa o sketch donde declaramos las variables, cargamos bibliotecas y establecemos el flujo de control.

Se muestra un esquema hecho con la aplicación beta de Fritzing que permite generar esquemas y realizar pedidos de la PCB si fuera necesario, a modo de ejemplo que permite ilustrar la conexión entre los distintos módulos.

Esquema del circuito

 


Estos elementos se podrán utilizar e integrar en  muchos proyectos futuros, en concreto el módulo LCD.

Código 

Comenzamos incluyendo las librerías que contienen el conjunto de objetos, métodos, constantes etc necesarias para manejar los componentes de los que vamos a hacer uso como son el módulo LCD (LiquidCrystal.. y el módulo de temperatura, DHT)
 
Declaramos los objetos del tipo de las librerías para poder manejarlos indicando en el tipo del objeto (variable especial que puede llamar a funciones y variables definidas dentro de su ámbito) y el nombre que le vamos a dar, junto con los valores iniciales, por ejemplo para el módulo de LiquidCristal
 LiquidCrystal_I2C lcd(0x3F,16,2);
 Iniciamos el bloque de la función de setup, declarando los pines digitales de salida (para conectar la salida del led rojo en la protoboard al pin 13 de arduino) y de entrada (para conectar a la entrada del pulsador o botón el pin 4 de arduino). Iniciamos los objetos declarados con los valores convenientes. Esta función se ejecuta una sola vez. A continuación el flujo del programa se dirige a la función loop, donde el código que contiene se ejecuta de forma infinita en base a los ciclos de reloj especificados por el microcontrolador. En este caso, solo se ejecuta el código cuando se obtiene un valor alto de haber pulsado el botón, valor que se obtiene con la función digitalRead. El código que se ejecuta es el de la función sensorth, que muestra el valor medido de temperatura y humedad por el sensor de temperatura y humedad y lo muestra en el módulo LCD, para su lectura.
 
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>
 ...
 
LiquidCrystal_I2C lcd(0x3F,16,2);
 int ledPIN = 13;
 int SENSOR=4; 
 int BOTON = 2;
byte buttonState=0;
DHT dht(SENSOR,DHT11);
 
 
void setup()
{
... 
 pinMode(ledPIN , OUTPUT);
 pinMode(BOTON , INPUT);
    lcd.init();
      lcd.begin(16,2);
      dht.begin();

 
  //Encender la luz de fondo.
  lcd.backlight();
   lcd.print("Buenos dias");
   delay(2000);
 ...

void loop() {
 buttonState = digitalRead(BOTON);
    if(buttonState==HIGH){
   sensorth();
 }
}
...
void sensorth()
{

   //LCD
  TEMPERATURA=dht.readTemperature();
 HUMEDAD=dht.readHumidity();
 Serial.print(" TEMPERAT.: ");
 Serial.print(TEMPERATURA);
 Serial.print(" HUMEDAD ");

 Serial.print(HUMEDAD);
 lcd.init();
 lcd.print("TEM:");
 lcd.print(TEMPERATURA);
 lcd.print("C");
 //lcd.setCursor(0,1);
 lcd.print(" HUM:");
 lcd.print(HUMEDAD);
 lcd.print("%");
 lcd.setCursor(0,1);


}

Prototipo

En el vídeo el código del botón se mejora para que con una pulsación se encienda el LED y con otra pulsación se apague y se siga obteniendo los valores de temperatura y humedad. 
 


Y esto es todo,

Gracias por vuestro tiempo y atención,

Un saludo

Referencias

  • https://www.youtube.com/watch?v=2tdsg_K-oQQ&list=PLkjnQ3NFTPnZPdwOQ1qYIy95pg9z7xXcn
  • https://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html