Como configurar o modulo relógio DS1302 com arduino

 Ola pessoal neste tutorial iremos aprender a configurar o mudulo relógio DS 1302 com Arduíno, pra quem ainda não o conhece, esse é uma especie de relógio de alta precisão que é capaz de marcar  segundos, minutos, horas, dias do mês, da semana, meses e anos, também e capas de se auto corrigir em caso de ano bissexto, também possui bateria, o que o torna infalível em caso de queda de energia mesmo que seu Arduíno desligue o relógio mantem a hora certa, quando ele volta a ligar a hora volta automaticamente.
 Este é um projeto de baixo custo que poderá servir para automatizar sua casa ou seu carro.
 Exemplo; todos os dias você abre as janelas do quarto as 08:00hs da manha, usando o código adequado é possível que o Arduíno faça isso pra você.
 Este modulo pode ser encontrado em sites como o mercado livre a um preço bem em conta.

 Para este projeto você vai precisar de ;
1x Modulo relógio.
1x Arduíno.
5x fios jumpers macho to fêmea.



Esquema de conexão 


Siga as devidas conexões de acordo com a ilustração .

Baixe a biblioteca DS 1302 neste LINK  e a biblioteca Wire neste outro LINK são necessárias para o funcionamento do código, apos baixa-las descompacte o arquivo e copie ambas para a pasta librareis dentro da pasta Arduíno .
Copie o código fonte para o programa que ira compilar para seu Arduíno.



//--------------------------------------INICIO DO CÓDIGO-----------------------------------//



#include <Wire.h> 

#include <DS1302.h>





const int RstPino   = 5;  // Pino Rst

const int DatPino   = 6;  // Pino Dat

const int ClkPino = 7;    // Pino Clk



// Cria um objeto para o dispositivo.



DS1302 rtc(RstPino, DatPino, ClkPino);



String dayAsString(const Time::Day day) {

  switch (day) {

    case Time::kSunday: return "Domingo";

    case Time::kMonday: return "Segunda-Feira";

    case Time::kTuesday: return "Terca-Feira";

    case Time::kWednesday: return "Quarta-Feira";

    case Time::kThursday: return "Quinta-Feira";

    case Time::kFriday: return "Sexta-Feira";

    case Time::kSaturday: return "Sabado";

  }

  return "(Dia nao encontrado)";

}



void printTime() 

{

  Time t = rtc.time();



  const String day = dayAsString(t.day);



  char dia[50];

  snprintf(dia, sizeof(dia), day.c_str());

  char buf[50];

                             //Ano  mes  dia  hora  min  seg

  snprintf(buf, sizeof(buf),"%02d-%02d-%04d %02d:%02d:%02d%04d",t.date,t.mon,t.yr, t.hr, t.min, t.sec);

//%s  day.c_str(), 

    

   

  Serial.println(buf);

  Serial.println(dia);

}











//_________________SETUP______________________________//

void setup(){





Serial.begin(9600);







//___________________Relogio setup______________________



                 // Configura a hora do relogio

  rtc.writeProtect(false);

  rtc.halt(false);







 //Defina a hora nesta linha e descomente-as para setar a hora no chip



 // Time t(2015, 2, 16, 18, 42, 10, Time::kMonday);  

 //rtc.time(t);



//apos o ajuste comente-as de novo



}

void loop()

{

  

  printTime();

   delay(3000);

  }



//-----------------------------FIM DO CÓDIGO----------------------------//







                                    Exemplo de funcionamento do modulo na porta serial



6 comentários:

  1. o outro link não para baixar a pagina esta bloqueada!

    ResponderExcluir
  2. Boa tarde, não consigo aceder ao link do wire. como posso baixar?
    Obrigado.

    ResponderExcluir
  3. cara perfeito!!!!! so gostaria de deixa-lo um pouco melhor colocando em um display 16x2 i2c ate fiz so que não me mostra os segundos por falta de espaço acredito eu, teria como por exemplo mostrar o dia da semana e a data n linha de cima e apenas a hora na linha de baixo? ae substituiria por exemplo domingo por dom e assim por diante, desde ja muito obrigado me ajudou bastante

    ResponderExcluir
  4. teria tbm a opção de setar os valores de data e hora via botão externo?

    ResponderExcluir
  5. o meu quando tiro da energia mesmo com a batria no lugar o mesmo não da continuidade as horas vc saberia me dizer o motivo? aqui funcionou blz apenas este problema, pois a bateria seria justamente para manter as horas em funcionamento num é? desde ja agradeço

    ResponderExcluir