Go Down

Topic: Hora en arduino (Read 3199 times) previous topic - next topic

rogervr15

Jan 11, 2015, 04:15 pm Last Edit: Apr 10, 2019, 05:12 am by surbyte Reason: Titulo Editado
Saludos,

Estoy haciendo un proyecto con arduino uno y mi objetivo es medir voltaje y escribir los datos dentro una tarjeta sd. Además del valor del voltaje quiero que a su lado aparezca la hora y dia de medida. (Lo consigo gracias a la libreria time y con la función settime). Hasta aquí todo correcto.
Lo que qiero ahora es alguna manera de mantener la hora sin que se resetee después de pulsar el botón de reset. ¿Alguna idea?
Dejo aquí debajo el código.
Gracias

rogervr15

#1
Jan 11, 2015, 04:17 pm Last Edit: Apr 10, 2019, 05:12 am by surbyte Reason: Agregado de etiqueta para Errores y/o códigos
Code: [Select]
#include <TimeAlarms.h>
#include <Time.h>
#include <SoftwareSerial.h>
#include <SD.h>

File myFile;
void setup() {
 setTime(10,36,0,22,12,14);
 pinMode(13, OUTPUT);
 pinMode(10, OUTPUT);
 if (!SD.begin(4)) {
   return;
 }
}
void loop() {
 myFile = SD.open("test.txt", FILE_WRITE);
 int sensorValue = analogRead(A0);
 float voltatge=sensorValue*(5.0/1023.0);
 if (voltatge < 1.4)
 {
 digitalWrite(13, HIGH);
 }
 else
 {
 digitalWrite(13, LOW);
 }
 digitalClockDisplaysd();
 myFile.print(voltatge);
 myFile.print("\t");
 myFile.println(sensorValue);
 myFile.close();
 delay(60000);
}
void digitalClockDisplaysd()
{
 myFile.print(hour());
 printDigitssd(minute());
 printDigitssd(second());
 myFile.print("\t");
 myFile.print(day());
 myFile.print("/");
 myFile.print(month());
 myFile.print("/");
 myFile.print(year());
 myFile.print("\t");
}
void printDigitssd(int digits)
{
 myFile.print(":");
 if(digits < 10)
   myFile.print('0');
 myFile.print(digits);
}

perrociego


El reloj de la placa Arduino se reinicia en 0 todas las veces que se inicia o se resetea.
Para mantener la hora hace falta una placa externa con alimentación permanente, un RTC (real time clock) como por ejemplo Ds1302 / Ds1307.
Nunca lo use.
Otra opción, aunque difícil de lograr, es no apagar nunca el Arduino.
Saludos.

TFTLCDCyg

Es mucho mejor el DS3231, se conecta como el DS1307 y puede funcionar con las mismas librerías en UNO, MEGA o Due.

Funciona con bateria recargable LIR2032 y cuando lo desconectes de la alimentación del arduino no se pìerde la hora, cosa que si ocurre con el DS1307 aunque tenga puesta la bateria de respaldo.

curro92

Hola,

TFTLCDCyg, eso que afirmas no es así, porque si lo fuera, ya no sería RTC
Si lo tienes bien conectado y programado, el DS1307 con batería propia aguanta funcionando unos 10 años como mínimo. Si a ti te ocurre lo que comentas, es que no lo tienes bien puesto.

rogervr15, yo uso el DS1307 con arduino y va bien, en ebay los tienes por un euro. Supongo que el otro también valdrá.

surbyte

#5
Jan 14, 2015, 11:54 am Last Edit: Jan 14, 2015, 02:06 pm by surbyte
estoy totalmente de acuerdo con lo que afirma curro92. Un Reloj de Tiempo Real debe mantener la hora en toda circunstancia. Sino no lo es.
De la hoja de datos del DS1307 dice :
Quote
The DS1307 has a
built in power sense circuit that detects power failures
and automatically switches to the backup supply.
Timekeeping operation continues while the part
operates from the backup supply
Otro tema es lo que has afirmado sobre su precisión. En esto te doy la razón TFTLCDCyg, el DS3231 es de mayor precisión.

Algunos datos del DS3231
 Accuracy ±2ppm from 0°C to +40°C
 Accuracy ±3.5ppm from -40°C to +85°C
 Battery Backup Input for Continuous Timekeeping

El ds1307 no es que sea un mal RTC. Su problema reside en que depende de la estabilidad del cristal exterior. Y como se usa un cristal de baja estabilidad entonces por eso tenemos corrimientos importantes.
El DS3221 en cambio usa un cristal TCXO. Si consiguieran el mismo cristal para el ds1307 estarian en iguales condiciones pero... supongo que por precio no seria una buena alternativa en ese caso.

TFTLCDCyg

Has citado el slogan promocional que me hizo conseguir el DS1307: "con la batería dura 10 años"... denme otros 4 DS1307 jejejeje.

Se supone que el 1307 debería conservar la hora y fecha cuando se deja de alimentar ya que la batería entra como fuente de alimentación y no hay que conectarle nada más, "ya que es un reloj con batería", eso no tiene gran ciencia.

En fin, yo tuve mal experiencia con el 1307, encima ya estando alimentado, se retrasa cada 24 horas unos 3 o 4 minutos mas o menos. Está mas que claro que es una falla de diseño y no puedo confiar en él si dejaré la estación operando de forma autónoma por mas de dos meses.

Con el DS3231, usando la misma libreria que el DS1307, no he vuelto a configurarlo desde hace varias semanas, aún dejándolo desconectado por varios días seguidos.

surbyte

#7
Jan 15, 2015, 12:38 pm Last Edit: Jan 15, 2015, 12:39 pm by surbyte
que se retrase 3 o 4 min no me sorprende usando un resonador de 32khz. Luego que no siga funcionando cuando se queda sin alimentación eso si que te lo creo pero algún problema tendrá tu ds1307 o tienes varios y todos te hacen eso? Lo conversaste con MAXIM (hablo de la empresa que lo diseñó y fabrica)?

surbyte

#8
Jan 15, 2015, 12:42 pm Last Edit: Jan 15, 2015, 12:51 pm by surbyte
TFTLCDCyg te propongo que habras un nuevo post con este tema. DS1307 y su falta al cortarse la energía y no retiene la hora además de la falta de precisión.
Busquemos soluciones y experiencias de los colegas a ver que surge.
Es importante porque muchas veces yo he sugerido usarlo como RTC y ahora tengo alguna duda de estar recomendando un mal elemento. Por eso es importante ver que ocurre y si varios afirman lo que te ocurre a ti, entonces debemos hablar con MAXIM INTEGRATED}

Mi rápida investigación del problema sugiere que uses un capacitor electrolítico de al menos 4.7uF entre los pines positivo y gnd del DS1307 a ver como se comporta.
No encuentro mas que un caso de problemas con el DS1307 que no retenía la información y era responsabilidad de un banco de relays que provocaba una caída de la tensión que hacía fallar el DS1307 y además la bateria backup no estaba instalada.

uargo

Por experiencia propia el DS1307 efectivamente en teoria debe conservar la hora gracias a la pila (que no bateria y mucho menos recargable) pero es muy sensible al ruido y perturbaciones electromagneticas es decir si la fuente de alimentacion no esta muy bien filtrada al apagar o encender un tubo fluorescente en la habitacion genera el suficiente "ruido" electromagnetico en la red como para resetarlo y que pierda la hora.

Por otro lado el DS1307 no lleva circuitos de compensacion termica por tanto la precision del reloj es pesima sengun que ambientes, el DS3231 si lleva la compensacion termica en el integrado y la estabilidad y precision es muuucho mayor.

Por la diferencia minima de precio yo montaria sin pensarlo el DS3231, el DS1307 es muy comun y no esta mal para aprender y experimentar pero no tiene precision para tomarlo en serio en un proyecto.

 

silverstar694

Hola, compre un rtc DS1302, y me gustaria que me dijieran si tiene solucion esto. Resulta que cuando seteo los ajustes iniciales basicos, con el monitor serial, el ajuste de fecha y hora queda correctamente, pero los segundos no corren, se quedan en 0 pausado o directamente no funciona, me estaba pensando que quizas el cristal no este funcionando y deba reemplazarlo, pero no sabria si esto solucionaria el problema. Si alguien me pudiera sujerir algo les agradeceria mucho.

surbyte

No revivas hilos viejos, con mas de 120 días y menos uno del 2015.
Hilo cerrado.

Ahora lee las normas del foro y crea un hilo con tu duda/consulta.

Go Up