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 en tiempo real". Aquí es 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 todavía tiene un reloj interno que funciona incluso sin una conexión a Internet o la alimentación está apagada. Cuando usa 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 lejos de una computadora, en la cual punto, cada vez que se desconecte la alimentación, o se reinicie el Arduino, no tendrá absolutamente ninguna idea de a 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 Proyecto de alarma de luz nocturna y amanecer de ArduinoHoy, haremos un despertador de amanecer, que lo despertará suave y lentamente sin recurrir a una máquina ofensiva que hace ruido. Lee mas - Esto claramente va a ser un problema. En ese proyecto, solucionamos el problema estableciendo manualmente la hora cada noche en un lugar bastante crudo. manera: el usuario presionaría el botón de reinicio justo antes de acostarse, proporcionando un tiempo manual sincronizar 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 $ 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 pasadores 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. Hablas con el reloj usando 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 otro para los datos. De hecho, incluso puede encadenar hasta 121 dispositivos I2C en los mismos dos pines. esta página de Adafruit para 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 el Hora y DS1307RTC bibliotecas y colocar las carpetas resultantes en su /libraries 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 ejemplo de uso con ReadTest.
#incluir
#incluir
#incluir configuración nula () {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 (tm. Hora); Serial.write (':'); print2digits (tm. Minuto); Serial.write (':'); print2digits (tm. Segundo); Serial.print (", Fecha (D / M / Y) ="); Serial.print (tm. Día); Serial.write ('/'); Serial.print (tm. Mes); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Año)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("El DS1307 se detiene. Ejecute el SetTime "); Serial.println ("ejemplo para inicializar el tiempo y comenzar a ejecutarse"); Serial.println (); } else {Serial.println ("¡Error de lectura DS1307! Por favor, 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 (número); }
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 rellenaremos 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 esa declaración "si", 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
James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.