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

  • Lesley Fowler
  • 0
  • 2540
  • 669
Anuncio

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á allí, su Arduino sin alimentación simplemente deja de funcionar, incluido su ticker interno.

Para mantener su Arduino sincronizado con el mundo que lo rodea, necesitará lo que se llama un “Módulo de reloj de tiempo real”. He aquí cómo usar uno.

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

Lo más probable es que su computadora sincronice su tiempo con Internet, pero aún tiene un reloj interno que funciona incluso sin una 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 usarse fuera de una computadora; en ese momento, cada vez que se desconecte la alimentación o se reinicie el Arduino, no tendrá absolutamente ninguna 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 tiempo, como mi despertador de luz nocturna y amanecer, Arduino Night Light y Sunrise Alarm Project Arduino Night Light y Sunrise Alarm Project Hoy, haremos un despertador de amanecer, que suavemente y Lentamente le despierta sin recurrir a una máquina de hacer ruido ofensivo. - Esto claramente va a ser un problema. En ese proyecto, resolvimos el problema al configurar manualmente la hora cada noche de una manera bastante cruda: el usuario presionaría el botón de reinicio justo antes de acostarse, proporcionando una sincronización de hora manual. Claramente, esa no es una solución ideal a largo plazo.

Un módulo RTC es un circuito adicional que requiere una batería de celda pequeña, 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 más o menos.

TinyRTC

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

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

La cantidad de agujeros en esa cosa parece bastante aterradora, pero solo necesitas cuatro de ellos; GND, VCC, SCL y SDA: puede usar los pines relevantes a cada lado del módulo RTC. Habla con el reloj usando 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: no se necesita la línea rosa DS, 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ú DS1307RTC: cargue y ejecute el Fijar tiempo ejemplo primero: esto establecerá el RTC a la hora correcta. No vale la pena entrar en detalles con el código real, solo sepa que necesita ejecutarlo una vez para realizar la sincronización de tiempo inicial.

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

 #include #include #include setup void () Serial.begin (9600); mientras que (! Serie); // espera el retraso en serie (200); Serial.println ("Prueba de lectura DS1307RTC"); Serial.println ("-------------------");  void loop () tmElements_t tm; if (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (hora tm); Serial.write (':'); print2digits (tm.Minute); Serial.write (':'); print2digits (tm.Segundo); Serial.print (", Fecha (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 el tiempo y comenzar a ejecutarse"); Serial.println ();  else Serial.println ("¡Error de lectura DS1307! Compruebe los circuitos"); Serial.println ();  retraso (9000);  retraso (1000);  void print2digits (int número) if (número> = 0 && número < 10)  Serial.write('0');  Serial.print(number);  

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

El código más importante en el ejemplo es crear un tmElements_t tm - esto un estructura que poblaremos con la hora actual; y el RTC.read (tm) La función, que obtiene la hora actual del módulo RTC, la pone en nuestro tm estructura, y devuelve verdadero si todo salió bien. Agregue su código de depuración o lógica dentro de ese “Si” declaración, 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 palabra LED: ¡las posibilidades son infinitas! Que harás?

Créditos de imagen: Snootlab Via Flickr




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.