LOJA FÍSICA
Praça Mauá, 4541 - Sala 22
09580-050 - São Caetano do Sul / SP
CENTRAL DE ATENDIMENTO
(11) 3522-7626
info@robocore.net
HORÁRIO DE FUNCIONAMENTO
De segunda à sexta das 9:00 às 18:30
Retornar
ao topo

Real Time Clock RTC DS1307


Quantidade:
Adicione para calcular o frete!
Formas de pagamento:
  • Pague em até 12x no cartão
  • Pague através do PayPal
  • Pague por Boleto Bancário

Quantas vezes você já não precisou saber a hora exata em seu projeto usando Arduino, PIC ou outros microcontroladores? Com este módulo você não terá mais esse problema, com ele é possível obter a informação exata de hora, minuto e segundo, além de dia, mês e ano. Tudo isso sem perder informação caso o Arduino, por exemplo, perca a alimentação. O módulo possui bateria própria que mantém o funcionamento do relógio. Dessa forma, este módulo é chamado de relógio de tempo real, ou Real Time Clock (RTC). Ele ainda possui memória integrada para armazenamento das informações.

A falha de energia é detectada automaticamente, fazendo com que a bateria passe a funcionar. Seu modo de comunicação com o microcontrolador é via I2C. Caso você tenha dúvidas sobre este e outros protocolos de comunicação, aconselhamos dar uma olhada no tutorial Comparação Entre Protocolos de Comunicação Serial.

Para maiores informações, consulte a aba Informações Técnicas acima.

Observação: o modelo não acompanha barras de pinos. Recomendamos utilizar Barra de 40 Pinos Macho.
  • Chip do RTC: DS1307
  • Chip da Memória EEPROM: AT24C32
  • Leitura de horas, minutos, segundos, dias, meses e anos
  • Inteface de comunicação: I2C
  • Baixo consumo


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


manoelvalido
date Enviado: 2018-12-10 21:43:02
Boa noite.

Comprei um rtc para utilizar em uma Sirene que estamos construindo para o colégio e, inicialmente, tudo ocorre como esperado. O problema é que no dia seguinte tudo desconfigura e na tela de lcd só aparece 165.165.165.

Segue o sketch:

#include "Wire.h"
#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte zero = 0x00;
int sirene = 8;

void setup() {
  lcd.begin(16, 2);
  Wire.begin();
  Serial.begin(9600);
  //SelecionaDataeHora();
}

void loop() {
  Mostrarelogio();
  delay(1000);
}

void SelecionaDataeHora() {
  byte segundos = 1;
  byte minutos = 41;
  byte horas = 19;
  byte diadasemana = 0;
  byte diadomes = 9;
  byte mes = 12;
  byte ano = 18;
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.write(ConverteParaBCD(segundos));
  Wire.write(ConverteParaBCD(minutos));
  Wire.write(ConverteParaBCD(horas));
  Wire.write(ConverteParaBCD(diadasemana));
  Wire.write(ConverteParaBCD(diadomes));
  Wire.write(ConverteParaBCD(mes));
  Wire.write(ConverteParaBCD(ano));
  Wire.write(zero);
  Wire.endTransmission();
}

byte ConverteParaBCD(byte val) {
  return ( (val / 10 * 16) + (val % 10) );
}

byte ConverteparaDecimal(byte val) {
  return ( (val / 16 * 10) + (val % 16) );
}

void Mostrarelogio() {
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int segundos = ConverteparaDecimal(Wire.read());
  int minutos = ConverteparaDecimal(Wire.read());
  int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  int diadasemana = ConverteparaDecimal(Wire.read());
  int diadomes = ConverteparaDecimal(Wire.read());
  int mes = ConverteparaDecimal(Wire.read());
  int ano = ConverteparaDecimal(Wire.read());
  lcd.setCursor(0, 0);
  lcd.print(" Data: ");
  lcd.setCursor(7, 0);
  if (diadomes < 10) {
    lcd.print("0");
  }
  lcd.print(diadomes);
  lcd.print(".");
  if (mes < 10) {
    lcd.print("0");
  }
  lcd.print(mes);
  lcd.print(".");
  lcd.print(ano);

  lcd.setCursor(0, 1);
  if (horas < 10) {
    lcd.print("0");
  }
  lcd.print(horas);
  lcd.print(":");
  if (minutos < 10) {
    lcd.print("0");
  }
  lcd.print(minutos);
  lcd.print(":");
  if (segundos < 10) {
    lcd.print("0");
  }
  lcd.print(segundos);
  lcd.setCursor(9, 1);
  switch (diadasemana) {
    case 0: lcd.print("Domingo");
      break;
    case 1: lcd.print("Segunda");
      break;
    case 2: lcd.print("Terca");
      break;
    case 3: lcd.print("Quarta");
      break;
    case 4: lcd.print("Quinta");
      break;
    case 5: lcd.print("Sexta");
      break;
    case 6: lcd.print("Sabado");
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 7 and minutos == 0 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 7 and minutos == 0 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 7 and minutos == 50 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 7 and minutos == 50 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 8 and minutos == 40 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 8 and minutos == 40 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 9 and minutos == 30 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 9 and minutos == 30 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 9 and minutos == 50 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 9 and minutos == 50 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 10 and minutos == 40 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 10 and minutos == 40 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 11 and minutos == 30 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 11 and minutos == 30 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 13 and minutos == 0 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 13 and minutos == 0 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 13 and minutos == 50 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 13 and minutos == 50 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 14 and minutos == 40 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 14 and minutos == 40 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 14 and minutos == 50 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 14 and minutos == 50 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 15 and minutos == 40 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 15 and minutos == 40 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 16 and minutos == 30 and segundos == 0) {
    digitalWrite(sirene, HIGH);
  }
  if (diadasemana != 0 and diadasemana != 6 and horas == 16 and minutos == 30 and segundos == 3) {
    digitalWrite(sirene, LOW);
  }
}

poderiam nos ajudar?

Francois
date Enviado: 2018-12-11 11:26:04
manoelvalido
Você testou o funcionamento contínuo com o tutorial do link a seguir? https://www.robocore.net/tutoriais/modulo-rtc-arduino.html

Qual é a tensão da bateria reserva (que está acoplada ao módulo)?

leonardo_lma07
date Enviado: 2018-08-15 16:29:34
Quero fazer a programação para usar o arduino como um horimetro.
Exemplo: Ligar um equipamento e o arduino contar o tempo de funcionamento, desligando o equipamento ele para de contar esse tempo. e assim consequentemente. no final do dia ele soma todo o tempo contabilizado e disponibiliza em um banco de dados.
eu tenho o RTC e o shield ethernet.

alguma sugestão ? ficarei muito grato. abraços

ViniDj
date Enviado: 2018-08-15 16:55:00
leonardo_lma07
Acredito que você não vá ter muita dificuldade em fazer isso. Ao ligar o aparelho você precisa salvar numa variável a hora no momento da ligação. Então quando o equipamento for desligado você faz a diferença da hora atual para a salva na variável, e guarda em outra variável que servirá para armazenar o período total. Então ao final do dia você envia essa informação para seu banco de dados.

leonardo_lma07
date Enviado: 2018-08-16 09:40:44
leonardo_lma07
ViniDj muito obrigado pela dica.
Você tem algum e-mail para que eu possa entrar em contato com você se for possível ?
Gostaria de esclarecer algumas duvidas e trocar conhecimentos. Abraços 

ViniDj
date Enviado: 2018-08-16 09:51:33
leonardo_lma07
Você pode tirar suas dúvidas sobre o produto por aqui mesmo, dessa forma outras pessoas que tenham dúvida sobre ele poderão usar essa página de referência.

leonardo_lma07
date Enviado: 2018-08-16 12:54:42
leonardo_lma07
ok! 
Estou trabalhando na programação do projeto que descrevi acima assim que encontrar dificuldades, vou comentar aqui para que vocês possam me ajudar 

leonardo_lma07
date Enviado: 2018-10-03 09:52:54
leonardo_lma07
Bom dia!

voltei a mexer no meu projeto e estou completamente perdido kkk, não sei por onde começar. Gostaria de mais algumas dicas, mandei no fórum também. 

att
Leonardo Andrade

Francois
date Enviado: 2018-10-03 16:09:34
leonardo_lma07
O primeiro passo é entender como o RTC funciona com o Arduino. Ao fazer as primeiras leituras, você deve verificar que o horário e a data estão certos. Se não estiverem, você pode executar um código no próprio Arduino para os valores corretos. Em seguida ou em paralelo, você deve entender como armazenar dados na EEPROM do Arduino. Isso é recomendado para aplicações de longa duração, pois pode haver uma queda de energia. Depois disso você precisa juntar todos os módulos no mesmo código, adicionando a rotina de detecção da carga (por exemplo, um botão).

lrezende
date Enviado: 2017-11-17 15:26:31
Tem outra forma de pegar a hora se não estiver conectado à internet?

ViniDj
date Enviado: 2017-11-17 17:41:30
lrezende
Com este módulo você não precisa de conexão à internet para pegar a hora.

Leo-Lisboa
date Enviado: 2017-06-14 19:47:07
Não gostei que não vem com aqueles pinhos pra soldar.

MarceloFarias
date Enviado: 2017-06-19 13:39:26
Leo-Lisboa
Infelizmente modelo veio sem as barras de pinos =/

Leo-Lisboa
date Enviado: 2017-06-19 13:41:47
Leo-Lisboa
pois é cara, nem me liguei nisso se n tinha adicionado ao carrinho. Agr vou ter que procurar uma loja de eletronica aqui perto pra comprar isso pq n vai valer a pena comprar online pelo frete 

MarceloFarias
date Enviado: 2017-06-19 13:59:26
Leo-Lisboa
Já adicionamos essa informação na descrição do produto para evitar que esse tipo de problema ocorra novamente. 
Para valer a pena o frete, aproveita pra levar algum outro item de seu interesse ;)