Go Down

Topic: Reloj en tiempo real con Arduino (Read 4690 times) previous topic - next topic

JDLK7

Hola, estoy diseñando un proyecto con Arduino y me gustaría saber si podría utilizar un reloj en tiempo real dallas ds1307 o similar, de forma que éste envíe la hora al Arduino para que a una hora determinada active o desactive un relé por ejemplo. ¿Es esto posible?, en caso de que lo sea, ¿me explicarían un poco como hacerlo?
Gracias de antemano y un saludo!!!

Dystrom

Hola, primero de todo bienvenido al foro, aqui hay gente que te ayudaran en tus dudas desinteresadamente pero para ello has de poner un poco de tu parte, con esto quiero decir que antes de preguntar primero usa el buscador y google, en caso de no encontrar nada o tener dudas concretas del funcionamiento abre un post, te lo digo porque el tema del reloj esta super, super, super consultado y documentado, de hecho hay librerias, etc.. explicitas para usar ese reloj con arduino.

si pones en google "ds1307 Arduino" te salen 144.000 resultados y en los primeros hasta salen programas ya hechos, luego sólo has de entenderlo y modificarlo para ajustarlo a tus necesidades pruébalo y verás.

Un saludo
Dystrom  :)

JDLK7

Hola Dystrom, antes de nada gracias por responder :) Aprovechando este post preguntaré otra cosa: busqué en google (como me dijiste con mucha razón XD) programas para utilizar dicho reloj y he encontrado bastantes. La mayoría de ellos me han funcionado, pero con todos he tenido el mismo problema. Cuando simulo un corte de luz desenchufando el cable USB del Arduino, una vez conectado de nuevo pierde la hora y empieza a contar a partir de otra hora y fecha diferentes. ¿Existe alguna forma de evitar que se pierda la hora y aunque haya un corte de luz cuando se vuelva a encender continúe por la hora real? Por si sirve de algo, el módulo que estoy utilizando incluye, además del reloj y su batería, una memoria EEPROM.
¡Gracias de antemano y un saludo!

Heke

¿que codigo tienes en el arduino puesto y como has conectado el reloj?

Osea... codigo y esquema
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

curro92

Hola,
Los RTC suelen tener justamente una pila botón  para que una vez puesta la hora se conserve unos 9 años o más, dicen que hasta 15 años si la pila es buena.

Dystrom

Hola no se si usas sólo el integrado o usas una plaquita con el circuito ya hecho tipo al de la foto que pongo aqui:


Si es el primer caso mejor pon esquema y programa como dice el compañero HEKE, en el segundo caso tal y como te dice Curro92 la pila ha de aguantar la alimentacion para que no se pierdan los datos.

Jossema106


Hola Dystrom, antes de nada gracias por responder :) Aprovechando este post preguntaré otra cosa: busqué en google (como me dijiste con mucha razón XD) programas para utilizar dicho reloj y he encontrado bastantes. La mayoría de ellos me han funcionado, pero con todos he tenido el mismo problema. Cuando simulo un corte de luz desenchufando el cable USB del Arduino, una vez conectado de nuevo pierde la hora y empieza a contar a partir de otra hora y fecha diferentes. ¿Existe alguna forma de evitar que se pierda la hora y aunque haya un corte de luz cuando se vuelva a encender continúe por la hora real? Por si sirve de algo, el módulo que estoy utilizando incluye, además del reloj y su batería, una memoria EEPROM.
¡Gracias de antemano y un saludo!


Comprueba que despues del primer uso comentas la linea de codigo donde configuras la hora! Ya que sino cada vez que inicie se resetea la hora
Proyecto:
http://duinoblog.blogspot.com.es/

JDLK7

El primer código que utilicé lo que saqué de esta página: http://www.tuelectronica.es/tutoriales/arduino/reloj-rtc-i2c-con-arduino.html en la que aparecen dos códigos, uno en el que se pone en hora al reloj a partir de la del ordenador, y un segundo código que muestra la hora en el monitor serial:
El de la puesta en hora
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(__DATE__, __TIME__)); // Establece la fecha y hora
}

void loop () {

}


y el del monitor serial.
Code: [Select]
#include <Wire.h>   // Incluye la librería Wire
#include "RTClib.h" // Incluye la librería RTClib
RTC_DS1307 RTC; // Crea el objeto RTC

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.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();

delay(1000); // La información se actualiza cada 1 seg.
}


El problema que tuve con estos códigos, fue que en primer lugar no sabía como almacenar la hora en una variable o algo para poder utilizarla luego en un if y el segundo fue el problema de que no se guardaba la hora cuando había un corte de luz.
En cuanto al tipo de reloj que he utilizado, compré en ebay un módulo ya montado exactamente igual al que pones en la foto, que además, como ya dije, incluye una memoria.
¡Gracias por responder y un saludo!

Pacorro

Hola¡¡, estoy interesado en hacer ést montaje y me gustaría saber de que forma se podría enviar la hora en un LCD en vez de ver la hora en Monitor.
Muchas gracias

Sergegsx


Hola¡¡, estoy interesado en hacer ést montaje y me gustaría saber de que forma se podría enviar la hora en un LCD en vez de ver la hora en Monitor.
Muchas gracias
mira mi firma

Go Up