Cómo y por qué agregar un reloj en tiempo real a Arduino

Cómo y por qué agregar un reloj en tiempo real a Arduino / Bricolaje

Mantener el tiempo en los proyectos de Arduino no es tan fácil como podría pensar: una vez que la conexión de la computadora no está, su Arduino sin alimentación simplemente deja de funcionar, incluido su ticker interno.

Para mantener tu Arduino sincronizado con el mundo que lo rodea, necesitarás lo que se llama un “Módulo de reloj en tiempo real”. Aquí es cómo usar uno.

Cuál es el punto de un reloj en tiempo real (RTC)?

Lo más probable es que su computadora sincronice su tiempo con Internet, pero aún tiene un reloj interno que sigue funcionando incluso sin conexión a Internet o la alimentación está apagada. Cuando utiliza un Arduino conectado a una computadora, tiene acceso a la hora exacta proporcionada por el reloj de su sistema. Eso es bastante útil, pero la mayoría de los proyectos de Arduino están diseñados para ser utilizados lejos de una computadora; en ese momento, cada vez que se desconecta la alimentación o se reinicia el Arduino, no tendrá la menor idea de qué hora es. El reloj interno se reiniciará y comenzará a contar desde cero la próxima vez que se encienda.

Si su proyecto tiene algo que ver con la necesidad de la hora, como mi luz nocturna y el reloj de la salida del sol de Arduino, la luz de la noche y el proyecto de la alarma de la salida del sol de Arduino. Despiértelo lentamente sin recurrir a una máquina ofensiva para hacer ruido. Leer más - esto claramente va a ser un problema. En ese proyecto, resolvimos el problema configurando manualmente la hora cada noche de una manera bastante burda: el usuario presionaba el botón de reinicio justo antes de irse a dormir, proporcionando una sincronización de tiempo manual. Claramente esa no es una solución ideal por mucho tiempo.

Un módulo RTC es un bit adicional de circuitos, que requiere una batería pequeña de celda de moneda, que continúa contando el tiempo incluso cuando su Arduino está apagado. Después de configurarlo una vez, mantendrá ese tiempo durante la vida útil de la batería, generalmente un buen año..

TinyRTC

El RTC más popular para Arduino se llama TinyRTC y se puede comprar por alrededor de $ 5 a $ 10 en eBay. Lo más probable es que tengas que suministrar tu propia batería (es ilegal enviarlos al extranjero a muchos lugares) y algunos encabezados (los pines que se insertan en los orificios, los cuales necesitarás para soldarlos).

Este es el módulo que tengo:

Incluso tiene un sensor de temperatura incorporado, aunque la batería durará más si no la estás usando.

El número de agujeros en esa cosa parece bastante aterrador, pero solo necesitas cuatro de ellos; GND, VCC, SCL y SDA: puede usar los pines relevantes en ambos lados del módulo RTC. Habla con el reloj utilizando el protocolo I2C, lo que significa que solo se usan dos pines, uno para el “reloj” (un reloj de datos de comunicaciones en serie, nada que ver con el tiempo) y uno para los datos. De hecho, incluso puede encadenar hasta 121 dispositivos I2C en los mismos dos pines; consulte esta página de Adafruit para ver una selección de otros dispositivos I2C que podría agregar, porque hay muchos!

Empezando

Conecte su módulo TinyRTC de acuerdo con el siguiente diagrama: la línea rosa DS no es necesaria, ya que es para el sensor de temperatura.

A continuación, descargue las bibliotecas Time y DS1307RTC y coloque las carpetas resultantes en su / bibliotecas carpeta.

Salga y reinicie el entorno Arduino para cargar en las bibliotecas y ejemplos.

Encontrará dos ejemplos en el menú del DS1307RTC: cargue y ejecute el Fijar tiempo Ejemplo primero: esto ajustará el RTC a la hora correcta. No vale la pena entrar en detalles con el código real, solo debes saber que necesitas ejecutarlo una vez para realizar la sincronización de tiempo inicial.

A continuación, mira el ejemplo de uso con ReadTest.

 #incluir  #incluir  #incluir  void setup () Serial.begin (9600); mientras que (! Serial); // esperar el retardo en serie (200); Serial.println ("DS1307RTC Read Test"); Serial.println ("-------------------");  void loop () tmElements_t tm; if (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (tm.Hour); Serial.write (':'); print2digits (tm.Minute); Serial.write (':'); print2digits (tm.Second); Serial.print (", Date (D / M / Y) ="); Serial.print (tm.Day); Serial.write ('/'); Serial.print (tm.Month); Serial.write ('/'); Serial.print (tmYearToCalendar (tm.Year)); Serial.println ();  else if (RTC.chipPresent ()) Serial.println ("El DS1307 está detenido. Ejecute SetTime"); Serial.println ("ejemplo para inicializar la hora y comenzar a correr."); Serial.println ();  else Serial.println ("¡Error de lectura DS1307! Por favor verifique el circuito."); Serial.println ();  retraso (9000);  retraso (1000);  void print2digits (número int) if (número> = 0 & & número 

Tenga en cuenta que también hemos incluido el núcleo Alambre.h biblioteca: viene con Arduino y se utiliza para comunicarse a través de I2C. Cargue el código, abra la consola de serie a 9600 baudios y mire y su Arduino genera la hora actual cada segundo. Maravilloso!

El código más importante en el ejemplo es crear una tmElements_t tm - esto un estructura que poblaremos con la hora actual; y el RTC.read (tm) función, que obtiene la hora actual del módulo RTC, la coloca en nuestro tm Estructura, y devuelve verdadero si todo salió bien. Agregue su código de depuración o lógica dentro de esa declaración "if", como imprimir la hora o reaccionar a ella.

Ahora que sabe cómo obtener el momento adecuado con Arduino, puede intentar reescribir el proyecto de alarma de amanecer o crear un reloj de palabras LED: ¡las posibilidades son infinitas! Que vas a hacer?

Créditos de imagen: Snootlab Via Flickr

Explorar más sobre: ​​Arduino.