En esta entrada veremos cómo conectar un sensor de humedad y temperatura (DHT11), y un reloj (DS1302) a un LCD para poder ver los datos que nos proporcionan los modulos.
Descarga la libreria DS1302 Aquí
Display LCD: LCD 20x4.
Arduino [ ]
Display ( ) vista frontal
(1) VCC [GND]
(2) VDD [+5V]
(3) V0 [2,2KOhm]------[GND]
(4) RS [D4]
(5) RW [GND]
(6) E [D7]
(7) D0
(8) D1
(9) D2
(10) D3
(11) D4 [D8]
(12) D5 [D9]
(13) D6 [D12]
(14) D7 [D13]
(15) A [D10]
(16) K [47Ohm o directo]----[GND]
Módulo RTC: Se conectará a la placa mediante los siguientes pines.
Arduino [ ]
RTC ( ) vista frontal
(Vcc) (GND) (CLK) (DAT) (RST)
[+5V] [GND] [D5] [D3] [D2]
Nota: En arduino mini tube que quitar el cable de +5V para que la fecha la marcara correctamente, con el cable puesto no funcionaba bien.
Módulo DHT11:
(Vcc) (Out) (Gnd)
+5v D11 Gnd
Este código solo lo utilizaremos una vez, se utiliza para programar el reloj en hora y fecha, es lógico que si queremos que mantenga la hora hay que ponerle una pila al modulo, sino cada vez que pierda la corriente este se pondrá por defecto.
#include <DS1302.h>
// Inicializacion del modulo
DS1302 rtc(2, 3, 5);
Time t;
void setup(){
// Desproteger contra escritura
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(TUESDAY); // Configurar dia de la semana: MARTES.
rtc.setTime(17, 00, 00); // Configurar hora en formato 24hs con min y seg: 17:00:00 HORAS.
rtc.setDate(4, 3, 2014); // Configurar fecha en formato dia/mes/año: 4/3/2014.
}
void loop(){
digitalWrite(13,HIGH); // El led integrado confirmara la finalizacion.
}
#include "DHT.h" //cargamos la librería DHT
#define DHTPIN 11 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
#include <DS1302.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 7, 8, 9, 12, 13); // LCD-4/A-4 LCD-6/A-7 LCD-11-12-13-14/A-8-9-12-13
// Inicializacion del modulo.
DS1302 rtc(2, 3, 5);
Time t;
void setup() {
// LCD led de fondo
pinMode(10,OUTPUT); // LED conectado al pin D10.
analogWrite(10, 255); // Encendido del LED de luz de fondo.
lcd.begin(20,4); // Inicializacion del LCD.
dht.begin(); //Se inicia el sensor
}
void loop() {
// Obtencion de datos
t = rtc.getTime();
// Publicar en LCD
// Se publicara el dia de la semana
if (t.dow == 1) lcd.print("Lunes"); // La variable t.dow (dia de la semana) tedra valor de 1 para dia lunes y 7 para domingo.
if (t.dow == 2) lcd.print("Martes");
if (t.dow == 3) lcd.print("Miercoles");
if (t.dow == 4) lcd.print("Jueves");
if (t.dow == 5) lcd.print("Viernes");
if (t.dow == 6) lcd.print("Sabado");
if (t.dow == 7) lcd.print("Domingo");
// Se publicaran datos de fecha, en numeros.
lcd.print(" ");
lcd.print(t.date, DEC); // Dia del mes.
lcd.print("/"); // Mes.
lcd.print(t.mon);
lcd.print("/");
lcd.print(t.year, DEC); // Año.
lcd.setCursor(6,1);
lcd.print(t.hour, DEC); // Hora en formato 0-23.
lcd.print(":");
lcd.print(t.min, DEC); // Minutos.
lcd.print(":");
lcd.print(t.sec, DEC); // Segundos.
//esta es la parte del modulo de temperatura y humedad
float h = dht.readHumidity(); //lee la humedad
float t = dht.readTemperature(); //lee la temperatura
//Se imprimen las variables
lcd.setCursor(2,2);
lcd.print("Humedad: ");
lcd.print(h);
lcd.print(" % ");
lcd.setCursor(2,3);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C ");
delay(500); // Demora para presentar los datos en pantalla.
lcd.clear();
}
#include <DS1302.h>
// Inicializacion del modulo.
DS1302 rtc(2, 3, 5);
Time t;
void setup() {
// Inicializacion del puerto serie.
Serial.begin(9600);
}
void loop() {
// Obtencion de datos
t = rtc.getTime();
// Publicar en LCD
// Se publicara el dia de la semana
Serial.print("HOY:");
if (t.dow == 1) Serial.print("lun"); // La variable t.dow (dia de la semana) tedra valor de 1 para dia lunes y 7 para domingo.
if (t.dow == 2) Serial.print("mar");
if (t.dow == 3) Serial.print("mie");
if (t.dow == 4) Serial.print("jue");
if (t.dow == 5) Serial.print("vie");
if (t.dow == 6) Serial.print("sab");
if (t.dow == 7) Serial.print("dom");
Serial.println(); // Linea aparte
// Se publicaran datos de fecha, en numeros.
Serial.print("DIA:");
Serial.print(t.date, DEC); // Dia del mes
Serial.println();
// Mes
Serial.print("MES:");
Serial.print(t.mon);
Serial.println();
// Año
Serial.print("DE:");
Serial.print(t.year, DEC);
Serial.println();
Serial.print("HORA:"); // Hora en formato 0-23.
Serial.print(t.hour, DEC);
Serial.print(", MIN:"); // Minutos.
Serial.print(t.min, DEC);
Serial.print(", SEG:"); // Segundos.
Serial.print(t.sec, DEC);
Serial.println();
Serial.println();
Serial.println();
delay(3000); // Demora para no sobrecargar las comunicaciones con el modulo.
}