Arduino DS1302 DHT11 Reloj + Temperatura + LCD

0
5248

En este tema se comparte un reloj con el DS1302 y sensor de temperatura ambiental e higometro con el DHT11.

El diagrama de conexion es el siguiente

El codigo lo puedes copiar y pegar en tu sketch

#include <LiquidCrystal_I2C.h> // libreria para el LCD
// CONNECTIONS: del  DS1302
// DS1302 CLK/SCLK --> 5
// DS1302 DAT/IO --> 4
// DS1302 RST/CE --> 2
// DS1302 VCC --> 3.3v - 5v
// DS1302 GND --> GND
#include <DHT11.h>
// conexiones del DHT11
// terminal data se conecta a D6

int pin=6;  // al Data de DHT11
DHT11 dht11(pin); 
#include <ThreeWire.h>  //librería para DS1302
#include <RtcDS1302.h>  //librería para DS1302

volatile int anio;
volatile int mes;
volatile int dia;
volatile int hora;
volatile int minuto;
volatile int segundo;
volatile int contador,xsegundo;
char texto[2];
const char * months[] ={"ENE","FEB","MAR","ABR","MAY","JUN","JUL","AGO","SEP","OCT","NOV","DIC"};



ThreeWire myWire(4,5,2); // IO, SCLK, CE
RtcDS1302<ThreeWire> Rtc(myWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define countof(a) (sizeof(a) / sizeof(a[0]))

const char data[] = "what time is it";
String meridiano="  ";
void setup () 
{
    Serial.begin(9600);
    Serial.print("compiled: ");
    Serial.print(__DATE__);
    Serial.println(__TIME__);
        
    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    printDateTime(compiled);
    Serial.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        Serial.println("¡RTC perdió la confianza en el DateTime!");
        Rtc.SetDateTime(compiled);
    }

    if (Rtc.GetIsWriteProtected())
    {
        Serial.println("RTC estaba protegido contra escritura, lo que permite escribir ahora");
        Rtc.SetIsWriteProtected(false);
    }

    if (!Rtc.GetIsRunning())
    {
        Serial.println("RTC no se estaba ejecutando activamente, comenzando ahora");
        Rtc.SetIsRunning(true);
    }
    
  lcd.begin();
  lcd.setCursor(0, 0);
    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        Serial.println("¡RTC es más antiguo que el tiempo de compilación! (Actualizando DateTime)");
        Rtc.SetDateTime(compiled);

    }


/* comentario en una segunda ejecución para ver que la información se almacena a largo plazo */
    // Store something in memory on the RTC
    uint8_t count = sizeof(data);
    uint8_t written = Rtc.SetMemory((const uint8_t*)data, count); // esto incluye un terminador nulo para la cadena
    if (written != count) 
    {
        Serial.print("Algo no esta bien, count = ");
        Serial.print(count, DEC);
        Serial.print(", written = ");
        Serial.print(written, DEC);
        Serial.println();
       
    }
/* fin de la sección de comentarios */

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("--RELOJ DIGITAL-");
  lcd.setCursor(0,1);

  delay(2000);
  lcd.clear();

}

void loop () 
{
  if(segundo!=xsegundo){
    contador ++;
    contador=contador%2;
    xsegundo=segundo;

  }

// temperatura
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0  and contador==1)  //realiza consulta de temperatura cada segundo
  {
    // salida a la pantalla, estas lineas se pueden omitir
    Serial.print("Temperatura:");
    Serial.print(temp);
    Serial.print(" Humedad:");
    Serial.print(humi);
    Serial.println();*/
  }else{
    // salida a la pantalla, estas lineas se pueden omitir
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
  }
  // fin de temperatura

    RtcDateTime now = Rtc.GetDateTime();  //obtiene la hora y fecha
    printDateTime(now);
    
  if (hora >= 0 && hora<=11){
     meridiano=" AM"; 
    }
    if (hora >= 12 && hora<=23){
      meridiano=" PM"; 
    } 

     
    lcd.setCursor(0,0);
// bloque para usar formato de 12 horas
    if (hora >= 0 && hora<=12){
        sprintf(texto, "%02d",hora);
        lcd.print(texto); 
    }
    if (hora >= 13 && hora<=23){
         sprintf(texto, "%02d",hora-12);
        lcd.print(texto); 
    }   
    

    lcd.print(":");

    sprintf(texto, "%02d",minuto);
    lcd.print(texto); 
    lcd.print(":");
    sprintf(texto, "%02d",segundo);
    lcd.print(texto); 
    //siguiente linea

    lcd.print(meridiano); 
    lcd.print("  ");
    lcd.print(temp); 
    lcd.setCursor(15,0);
    lcd.print("C");
     
    lcd.setCursor(0,1);
    sprintf(texto, "%02d",dia);
    lcd.print(texto);
    lcd.print(" ");
    lcd.print(months[mes-1]);
    lcd.print(" ");
    lcd.print(anio);

    lcd.setCursor(13,1);
    lcd.print(humi);
    lcd.setCursor(15,1);
    lcd.print("H");
  
  
}


void printDateTime(const RtcDateTime& dt)
{
  dia=  dt.Day();
  mes=dt.Month();
  anio= dt.Year();
  hora=  dt.Hour();
  minuto=dt.Minute();
  segundo= dt.Second();
}

para algún otro proyecto, deje sus comentarios

DEJA UNA RESPUESTA

Please enter your comment!
Please enter your name here