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 marcador interno.
Para mantener tu Arduino sincronizado con el mundo que lo rodea, vas a necesitar lo que se llama un "módulo de reloj en 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 todavía tiene un reloj interno que funciona incluso sin una conexión a Internet o cuando la unidad 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 Arduino están diseñados para ser utilizados lejos de una computadora, momento en el cual, cada vez que se desconecta la alimentación o Arduino se reinicia, no tendrá absolutamente ninguna idea de la hora. El reloj interno se reiniciará y comenzará a contar nuevamente desde cero la próxima vez que se encienda.
Si su proyecto tiene algo que ver con la necesidad de tiempo, como mi luz nocturna y la alarma del amanecer Arduino Night Light y Sunrise Alarm Project Arduino Night Light y Sunrise Alarm Project Hoy vamos a hacer una alarma de amanecer, que suavemente y le despiertan lentamente sin recurrir a una máquina de hacer ruido ofensiva. Leer más: esto claramente va a ser un problema. En ese proyecto, solucionamos el problema ajustando manualmente la hora de cada noche de una manera un tanto cruda: el usuario presionaba el botón de reinicio justo antes de acostarse, lo que proporcionaba una sincronización manual de tiempo. Claramente, esa no es una solución ideal a largo plazo.
Un módulo RTC es un circuito adicional que requiere una pequeña batería de celda de monedas, que continúa contando el tiempo incluso cuando Arduino está apagado. Después de establecerse una vez, mantendrá ese tiempo durante la vida útil de la batería, por lo general, 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 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.
El número de agujeros en esa cosa parece bastante aterrador, pero solo necesitas cuatro; GND, VCC, SCL y SDA: puede usar los pines correspondientes 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 otro para los datos. De hecho, incluso puede conectar hasta 121 dispositivos I2C en los mismos dos pines: consulte 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: la línea rosa DS no es necesaria, como lo es para el sensor de temperatura.
A continuación, descargue las bibliotecas Time y DS1307RTC y coloque las carpetas resultantes en su carpeta / libraries .
Salga y reinicie el entorno Arduino para cargar en las bibliotecas y ejemplos.
Encontrará dos ejemplos en el menú DS1307RTC: cargue y ejecute primero el ejemplo de SetTime ; esto configurará el RTC a la hora correcta. No vale la pena entrar en detalles con el código real, solo debes saber que debes ejecutarlo una vez para realizar la sincronización de hora inicial.
A continuación, observe el uso del ejemplo con ReadTest .
#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(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("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number
Tenga en cuenta que también hemos incluido la biblioteca principal Wire.h : viene con Arduino y se usa para comunicarse a través de I2C. Suba el código, abra la consola 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 un tmElements_t tm ; esta es una estructura que llenaremos con la hora actual; y la función RTC.read (tm), que obtiene la hora actual del módulo RTC, la coloca en nuestra estructura tm y devuelve true 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 tiempo correcto con Arduino, puede intentar reescribir el proyecto de alarma de amanecer o crear un reloj de palabra LED: ¡las posibilidades son infinitas! ¿Qué vas a hacer?
Créditos de las imágenes: Snootlab Via Flickr