Go Down

Topic: Tutorial - Reloj RTC I2C con Arduino (Read 33774 times) previous topic - next topic

fjramirez


  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 http://forum.arduino.cc/index.php?topic=254415.0
;)

Derty-2

fjramirez

Quote

// 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);
         }
}

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.

fjramirez


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.

TheTerrible

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.

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)

fjramirez

#21
Feb 05, 2015, 02:08 am Last Edit: Feb 05, 2015, 02:09 am by fjramirez
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.

tovaritx

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...

hiddenotebook

#23
Apr 21, 2015, 08:28 pm Last Edit: Apr 21, 2015, 08:30 pm by hiddenotebook
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:

Code: [Select]
    #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.
    }

lalo101097

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: https://github.com/MarkusLange/Arduino-Due-RTC-Library 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: http://www.banggood.com/es/DS3231-AT24C32-IIC-High-Precision-Real-Time-Clock-Module-For-Arduino-p-81066.html

Go Up