Para futuros diseños o para los que querais un RTC de mayor precision usad el DS3231 en vez del DS1307.
Yo he usado el DS1307 durante años en un controlador de acuario y va bien pero... es muy susceptible de resetearse si no filtras muy bien la alimentacion (termine solucionandolo), pero el mayor problema es la precision que tiene... se te podia desajustar un minuto (no lo recuerdo exacto pero entre 1 y 5 minutos al mes, trabajando eso si las 24h del dia 365 dias al año).
El DS3231 es del mismo fabricante Dallas Semiconductor pero es una evolucion y de mejores prestaciones lleva internamente unos sensores para ajustar la compensacion por temperatura, esto le confiere mucha mas precision y la diferencia de precio es minima, el DS 3231 sale por un euro o euro y poco (en aliespress viene en una plaquita con una eeprom 24c32 y la pila)
uargo:
Para futuros diseños o para los que querais un RTC de mayor precision usad el DS3231 en vez del DS1307.
Yo he usado el DS1307 durante años en un controlador de acuario y va bien pero... es muy susceptible de resetearse si no filtras muy bien la alimentacion (termine solucionandolo), pero el mayor problema es la precision que tiene... se te podia desajustar un minuto (no lo recuerdo exacto pero entre 1 y 5 minutos al mes, trabajando eso si las 24h del dia 365 dias al año).
El DS3231 es del mismo fabricante Dallas Semiconductor pero es una evolucion y de mejores prestaciones lleva internamente unos sensores para ajustar la compensacion por temperatura, esto le confiere mucha mas precision y la diferencia de precio es minima, el DS 3231 sale por un euro o euro y poco (en aliespress viene en una plaquita con una eeprom 24c32 y la pila)
Gracias por la información, ya hemos pedido este modulo para probar que tal funciona. La verdad es que mucha gente esta teniendo problemas con el DS1307.
Soy nuevo en el foro y me presento. Hasta hace un par de meses no tenía ni idea de electrónica (para mi una resistencia era la del tostador de pan), pero buscando como mejorar el sistema domótico de mi casa llego a Arduino y a un mundo que todavía estoy descubriendo. Me cuesta, esto me pilla ya mayor... pero me encanta.
Estoy implementando un pequeño proyecto para manejar luces y riego en mi jardín, con bluetooth y una serie de sensores y subproyectos que van tomando forma.
El proyecto también tiene un LCD i2c donde se muestra la información. Se maneja con 4 botones con resistencias pull-down.
El reloj funciona bien una vez establecida la hora, pero cuando apago Arduino el reloj se para. Se para no es que se resetee, es que literalmente aparece la hora exacta del apagado cuando lo vuelvo a encender. Es decir, guarda bien la hora pero no le da la gana actualizarla con la pila funcionando.
He probado a alimentarlo por USB y con una fuente ATX, con los +5V del standby. Sin cambios.
El módulo lleva una batería recargable. He leído por ahí que el propio módulo la recarga (?). El caso es que venía muy alta de voltaje (4V) y le he puesto una nueva que tenía por casa. No sé si eso puede influir.
Perdón por el rollo y gracias por anticipado.
PD: la linea que establece la hora a partir de la del sketch en la configuración inicial está comentada...
hola yo también estoy usando el tiny RTC chino y uso la batería que se recomienda lir2032 y nada sigue dando problemas.
El tuyo por lo menos recuerda la hora pero el mio no recuerda la hora ni la fecha. He estado haciendo muchas pruebas y si desconectas el modulo de Vcc y lo vuelvo a conectar si que recuerda la hora pero si desconecto la alimentación del usb a arduino el reloj se desconfigura.
El problema es al desconectar arduino porque como ya he dicho si quito la alimentación del modulo el VCC si que recuerda la hora.
Se puede ver que falta el U1 en el modulo que es un termómetro digital el DS18B20 ¿Puede ser por faltar ese componente?
Alguien que nos arroje un poco de luz sobre el tema por favor.
el código que uso es este:
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
// RTC.adjust(DateTime(2015,04,03, 9,36,00)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
delay(1000); // La información se actualiza cada 1 seg.
}
Hola colegas, espero me puedan ayudar, tengo un RTC DS3231, y un Arduino DUE, el problema es que no puedo identificar los pines para conectar el RTC con el Arduino, la biblioteca que bajé es esta: GitHub - MarkusLange/Arduino-Due-RTC-Library: RTC Library for the Arduino Due Porque como sabrán los que conozcan las placas DUE no pueden usar tan de a fácil las bibliotecas normales, pues llevan un chip ARM, que les cambia bastante la arquitectura, espero me ayuden, soy nuevo en arduino, para los que quieran adquirir un DS3231 les dejo el link de banggood, salen bien sus productos y son económicos: Ds3231 at24c32 iic high precision real time clock module Sale - Banggood.com-arrival notice
Buenas gente, estoy trabajando con el modulo RTC y quiero programar 2 alarmas para un sistema de riego, con la primera alarma no hay problema, pero no he podido crear la segunda, el código que estoy usando es el siguiente:
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
DateTime future = 0; // Variable para calcular cuando se debe desactivar la alarma
// CONFIGURACIÓN DE USUARIO
int seconds_alarm = 0; // Segundos alarma
int minutes_alarm = 58; // Minutos alarma
int hour_alarm = 18; // Horas alarma. Formato 24h
int day_alarm = 9; // Dia alarma
int month_alarm = 7; // Mes alarma
int year_alarm = 2016; // Año alarma
int weekday_alarm = 1; // Dia de la semana alarma. L(1), M(2), MX(3), J(4), V(5), S(6), D(7)
int alarm_duration = 20; // Tiempo activo de la alarma. Debe ser menor que la próxima alarma.
boolean all_seconds = false; // Alarma para todos los segundos
boolean all_minutes = false; // Alarma para todos los minutos
boolean all_hour = false; // Alarma para todas las horas
boolean all_weekday = true; // Alarma para todos los dias de la semana
boolean all_day = true; // Alarma para todos los dias
boolean all_month = true; // Alarma para todos los meses
boolean all_year = true; // Alarma para todos los años
int LedPin = 12;
// CONFIGURACIÓN DE USUARIO
int seconds_alarma = 25; // Segundos alarma
int minutes_alarma = 58; // Minutos alarma
int hour_alarma = 18; // Horas alarma. Formato 24h
int day_alarma = 8; // Dia alarma
int month_alarma = 7; // Mes alarma
int year_alarma = 2016; // Año alarma
int weekday_alarma = 1; // Dia de la semana alarma. L(1), M(2), MX(3), J(4), V(5), S(6), D(7)
int alarma_duration = 20; // Tiempo activo de la alarma. Debe ser menor que la próxima alarma.
boolean all_seconds1 = false; // Alarma para todos los segundos
boolean all_minutes1 = false; // Alarma para todos los minutos
boolean all_hour1 = false; // Alarma para todas las horas
boolean all_weekday1 = true; // Alarma para todos los dias de la semana
boolean all_day1 = true; // Alarma para todos los dias
boolean all_month1 = true; // Alarma para todos los meses
boolean all_year1 = true; // Alarma para todos los años
int LedPin1 = 13;
//---------------
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
pinMode(LedPin, OUTPUT); // Establece el pin LedPin como salida
pinMode(LedPin1, OUTPUT); // Establece el pin LedPin como salida
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
if (year_alarm == now.year() || all_year ) {
if (month_alarm == now.month() || all_month) {
if (day_alarm == now.day() || all_day) {
if (weekday_alarm == now.dayOfWeek() || all_weekday) {
if (hour_alarm == now.hour() || all_hour) {
if (minutes_alarm == now.minute() || all_minutes) {
if (seconds_alarm == now.second() || all_seconds) {
digitalWrite(LedPin, HIGH);
future = now.unixtime() + alarm_duration;
Serial.println("------------");
Serial.println("ALARMA");
Serial.println("------------");
if (year_alarma == now.year() || all_year ) {
if (month_alarma == now.month() || all_month) {
if (day_alarma == now.day() || all_day) {
if (weekday_alarma == now.dayOfWeek() || all_weekday) {
if (hour_alarma == now.hour() || all_hour) {
if (minutes_alarma == now.minute() || all_minutes) {
if (seconds_alarma == now.second() || all_seconds) {
digitalWrite(LedPin1, HIGH);
future = now.unixtime() + alarm_duration;
Serial.println("------------");
Serial.println("ALARMA1");
Serial.println("------------");
}
}
}
}
}
}
}
}
}
}
}
}
}
if (now.unixtime() >= future.unixtime() && digitalRead(LedPin)){
digitalWrite(LedPin, LOW);
Serial.println("------------");
Serial.println("RESET ALARMA");
Serial.println("------------");
}
delay(1000); // La información se actualiza cada 1 seg.
}
}
a mi el Rtc l2c chino me funciona bien con esta libreriahttps://mega.nz/#F!oEIzFDhJ!C1tdkmIo3P0b9AgszJekHw,
SFHerreras pon tu codigo entre comillas, en el editor de texto </> , el primer simbolo de la barra de herramientas [cod3][/cod3]
Buenas Noches, yo puse en hora mi RTC Ds3231 con el siguiente codigo, espero que les sirva.
Saludos
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 RTC;
void setup ()
{
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(2017,02,04,00,12,00)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
void loop()
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC); // Año
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
delay(1000); // La información se actualiza cada 1 seg.
}