sexta-feira, 25 de julho de 2014

Utilizando o RTC DS1307 junto com o display LCD


Olá pessoal,

Neste post vou apresentar mais um componente porém não faz parte do projeto de acionamento de ar condicionado. Trata-se de um componente RTC (Real Time Clock ou Relógio de Tempo Real) que permite ter a informação de data e hora em tempo real para ser utilizado em alarmes ou de executar ações programadas em horários específicos.
Uma bateria de lítio garante que os dados sejam preservados mesmo sem alimentação externa, e é acionada automaticamente em caso de falta de energia no módulo.


Bom, vamos lá:

Componente utilizado: Tiny RTC Module DS1307

Esquema de ligação:


Fonte: Blog FilipeFlop

Utilize a biblioteca RTClib. Está disponível em: https://github.com/adafruit/RTClib.  É necessário ajustar a data e hora do componente. Execute o seguinte código para ajustar a data e hora sempre que precisar:



#include "RTClib.h"


// Objeto rtc (relogio de tempo real)
RTC_DS1307 rtc;



void setup () {
      rtc.begin();  //inicia o objeto rtc

     // Verifica se o RTC esta funcionando
     if (! rtc.isrunning()) {
           Serial.print("RTC is NOT running!");
     }
     else
     { 
         rtc.adjust(DateTime(__DATE__, __TIME__)); // Ajusta o rtc para a data e hora em que o sketch foi compilado
     }
}


void loop() {
    DateTime now = rtc.now();

    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
      
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();


}

Acompanhe no Monitor Serial se a data e hora foi acertada.


Utilizando junto com o LCD Display:


Uma vez acertada a data e hora no sketch anterior, o código seguinte exibe a data e hora no display LCD:



#include "RTClib.h"
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display



// Objeto rtc (relogio de tempo real)
RTC_DS1307 rtc;


void setup () {
      rtc.begin();  //inicia o objeto rtc

     // Verifica se o RTC esta funcionando
     if (! rtc.isrunning()) {
           Serial.print("RTC is NOT running!");
     }
     else
     { 
           rtc.adjust(DateTime(__DATE__, __TIME__)); // Ajusta o rtc para a data e hora em que o sketch foi compilado
     }
     lcd.begin(16,2); // inicializa o lcd 
     lcd.backlight();
       

}


void loop() {
          DateTime now = rtc.now();
          lcd.clear();
          lcd.print("DATA: ");
          lcd.print(now.day(), DEC);
          lcd.print('/');
          lcd.print(now.month(), DEC);
          lcd.print('/');
          lcd.print(now.year(), DEC);
          lcd.setCursor(0,1);
          lcd.print("HORA: ");
          lcd.print(now.hour(), DEC);
          lcd.print(':');
          lcd.print(now.minute(), DEC);
          lcd.print(':');
          lcd.print(now.second(), DEC);
          delay(2000);
}

3 comentários:

  1. no meu aparece 165/165/2165 165:165:85 , porque será?

    ResponderExcluir
  2. eu tambem estou com isso e ninguem tem a solução.

    ResponderExcluir
    Respostas
    1. Você tem mais algum outro componente conectado? Experimenta comentar partes do código para isolar o problema.

      Excluir