Tutorial - Reloj RTC I2C con Arduino

yo uso esta

que los de adafruit le han hecho un tutorial

boganazhapa:
Hola amigos apasionados por la electrónica.

Tengo un problema, no puedo descargar la librería RTClib, directamente del enlace que esta al principio.

Cargue otras librerías desde otras paginas pero me salen errores.

Pueden facilitarme con la librería??????????????????????.

Mil gracias por darse la molestia de leer esta nota.

Hola! Disculpa por el error, ya esta solucionado, ya puedes descargarte la librería del tutorial aquí: http://www.tuelectronica.es/descargas/arduino/librerias/rtclib.html

hola compañeros e estado trabajando en el RTC de arduinoo,
usando el tutorial funciona muy bien el problema es al tratar de darle condiciones
de tiempo al arduino no me responde aqui tengo el codigo no se que me falta..

#include <Wire.h>   // Incluye la librería Wire
#include "RTClib.h" // Incluye la librería RTClib
RTC_DS1307 RTC; // Crea el objeto RTC
int hora =0;
int minuto =0;
int segundo =0;

void setup () {
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC
}
void loop () {
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(5000); // La información se actualiza cada 1 seg.
hora=(now.hour(),DEC);
minuto=(now.minute(),DEC);
segundo=(now.second(),DEC);

if (hora >=7);
{
 digitalWrite(5,HIGH);

if (hora >=17);
digitalWrite(5,LOW);
}
}

si me pudieran ayudar

muchas gracias..!!!

¿Te refieres ha esta parte?

Conras:
if (hora >=7);
{
digitalWrite(5,HIGH);

if (hora >=17);
digitalWrite(5,LOW);
}

quizás estés comparando una cadena de texto con un número. Verifica que es "hora" es un entero.

CHECA LA SINTAXIS POR AHI VEO QUE DESPUES DEL IF TIENES ";" Y ASI NO FUNCIONA AUNQUE NO TE MARQUE ERROR

ferrercuevas:
CHECA LA SINTAXIS POR AHI VEO QUE DESPUES DEL IF TIENES ";" Y ASI NO FUNCIONA AUNQUE NO TE MARQUE ERROR

Muy cierto eso también!! :wink:

Conras:
hola compañeros e estado trabajando en el RTC de arduinoo,
usando el tutorial funciona muy bien el problema es al tratar de darle condiciones
de tiempo al arduino no me responde aqui tengo el codigo no se que me falta..

#include <Wire.h> // Incluye la librería Wire
#include "RTClib.h" // Incluye la librería RTClib
RTC_DS1307 RTC; // Crea el objeto RTC
int hora =0;
int minuto =0;
int segundo =0;

void setup () {
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC
}
void loop () {
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(5000); // La información se actualiza cada 1 seg.
hora=(now.hour(),DEC);
minuto=(now.minute(),DEC);
segundo=(now.second(),DEC);

if (hora >=7);
{
digitalWrite(5,HIGH);

if (hora >=17);
digitalWrite(5,LOW);
}
}

si me pudieran ayudar

muchas gracias..!!!

Puede que esto te sea de utilidad Tutorial - Reloj alarma con Arduino - Documentación - Arduino Forum
:wink:

fjramirez

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#include "RTC_DS1307.h"
#define DS1307_I2C_ADDRESS 0x68
int hora = 0;
int minuto = 0;
int segundo = 0;

RTC_DS1307 RTC;

void setup () {

Serial.begin(9600);
Wire.begin();
RTC.begin();
pinMode (5, OUTPUT);
//RTC.adjust(DateTime(2014, 7, 3, 12, 42, 20));// quitar "//" poner fecha año, mes, dia, hora.. y luego volver a grabar sketch//
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
}
}

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

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

hora = (now.hour(),DEC);
minuto = (now.minute(),DEC);
segundo = (now.second(),DEC);

if (hora >=7);
{
digitalWrite(5,HIGH);

if (hora >=17);
digitalWrite(5,LOW);
}
}

Hola buenas noches a todos, soy nuevo en este foro y doy gracias por todos los comentarios que dais. Pero he revisado varios dias el foro y no encuentro lo q me sucede con mi mega i RTD I2C. El sistema funciona perfectamente la hora y el dia, pero el problema que hay es que se adelanta . ( unos 7 seg cada 12 horas ). He cambiado varias veces la pila y siempre el adelanto es igual. En esta compra compre 2 unidades y las dos hacen el mismo efecto. En uno de ellos cambie el cristal de cuarzo per hace el mismo efecto. Hay alguien que le ha pasado algo similar?.
Muchas gracias un saludo.

holaxic:
Hola buenas noches a todos, soy nuevo en este foro y doy gracias por todos los comentarios que dais. Pero he revisado varios dias el foro y no encuentro lo q me sucede con mi mega i RTD I2C. El sistema funciona perfectamente la hora y el dia, pero el problema que hay es que se adelanta . ( unos 7 seg cada 12 horas ). He cambiado varias veces la pila y siempre el adelanto es igual. En esta compra compre 2 unidades y las dos hacen el mismo efecto. En uno de ellos cambie el cristal de cuarzo per hace el mismo efecto. Hay alguien que le ha pasado algo similar?.
Muchas gracias un saludo.

Solo se adelanta 7 segundos??? O cada 12 horas aproximadamente se adelanta 7 segundos? Ten en cuenta que los relojes por muy precisos que sean siempre tienen un error. Es cierto que 7 segundos cada 12 horas es mucho.

Si por el contrario solo se adelanta 7 segundos en las primeras 12 horas, y luego se mantiene, puede ser debido a que el reloj se debe estabilizar. Cuando inicias el reloj lo hace a una temperatura diferente que cuando lleva tiempo funcionando. Este pequeño cambio de temperatura puede ser suficiente para que el reloj sufra una pequeña desviación en su frecuencia.

Haciendo pruebas con el modulo del que se habla en este post, he notado un pequeño atraso, pero era debido al tiempo que tarda la IDE de Arduino, en crear el .hex y cargarlo en la placa (Recordamos que el código usa la fecha de creación del .hex para establecer la hora) Por lo demás, ningún problema, lo hemos probado días y semanas encendido y todo perfecto.

Al igual que nolo_manoloso me sale esto

2165/165/165 165:165:85

alguien lo soluciono? ya conecte bien el RTC y nada...
Gracias.

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.

Hola a todos.

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 tiene un reloj, el RTC 1307, concretamente este: http://www.banggood.com/Tiny-RTC-I2C-AT24C32-DS1307-Real-Time-Clock-Module-Board-For-Arduino-p-90137.html

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

desconecte el rtc y ahora no registra que puedo hacer????

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]

Ponchdroiddan
desconecte el rtc y ahora no registra que puedo hacer????

La solucion para la mayoria de problemas informaticos es desconectar todo volver a conectar e reinstalar programas, quizás así puedas solucionarlo.