En esta ocasión te vamos a enseñar como realizar la programación de eventos con arduino, o dicho de otra forma: como podemos programar el arduino para ejecutar determinadas funciones en una hora/fecha determinadas. La información de fecha / hora actual proviene de un circuito integrado RTC (Real Time Clock) DS1307. Un RTC está especialmente diseñado para mantener la información horaria, aún cuando nuestro arduino se encuentre sin alimentación. Esto es fantástico en aplicaciones del mundo real, donde no siempre se puede confiar en el suministro de energía eléctrica.

Imaginemos por un momento que deseamos encender una lampara con arduino a una hora determinada. ¿Como podemos decirle al arduino que deseamos hacer esto? ¿Como implementamos un programa genérico para realizar cualquier acción con nuestro arduino a una hora / fecha determinada? En este tutorial te explicamos como puedes hacer precisamente eso: Temporizar cualquier acción con arduino para que sea llevada a cabo según la programación de horario elegida.

En nuestra foto de portada vemos nuestro laboratorio de domótica con arduino, que estaremos usando durante este tutorial, en conjunto con un arduino UNO y el RTC DS1307.

Conexión y uso de un RTC con Arduino.

En otra entrada anterior hemos tratado ya como realizar la conexión del RTC DS1307 con Arduino, así como su funcionamiento básico. Vamos a colocar aquí la imagen de la conexión como referencia. Para saber como podemos leer y escribir el RTC, así como más detalles de su funcionamiento, recomendamos leer nuestro tutorial referente a este tema.

arduino_tinyrtc_diagrama_conexion

Una vez que tengamos nuestro arduino funcionando con el RTC y hayamos programado la hora y fecha actual dentro de este, podemos seguir con el resto de este tutorial.

Librerías para Programación de Eventos con Arduino.

Como ya sabemos, la plataforma arduino tiene un buen número de librerías que nos facilitan bastante algunas tareas, pues la lógica ya ha sido implementada y solamente debemos conocer el API de dichas librerías para acceder a su funcionalidad. En este caso, estaremos trabajando con la librería de gestión de eventos y horarios conocida como “TimeAlarms”. Mediante esta librería podemos programar la ejecución de determinadas funciones en una fecha y hora específica. La librería “TimeAlarms” depende de la librería “Time” para conocer la fecha/hora actual, por lo que también debe ser instalada. Finalmente para la interfaz con el reloj en tiempo real utilizaremos la librería DS1307RTC.

A continuación dejamos los enlaces para descargar las librerías requeridas:

La siguiente es la explicación de que hace cada una de las librerías:

  • Time: Funciona como un reloj en tiempo real por software que lleva la cuenta del tiempo usando el CPU de arduino. Funciona llevando un conteo del número de segundos desde segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 (timestamp de Unix). Este conteo se pierde al apagar el arduino, por lo que NO funciona como base de tiempo confiable sin energía eléctrica.
  • TimeAlarms: Es la encargada de la programación de eventos utilizando la hora/fecha (unix) provista por la librería Time. Esta librería asocia las funciones declaradas dentro del sketch de arduino a un evento que ocurre en una hora/fecha determinada.
  • DS1307RTC: Se encarga de la comunicación con el RTC DS1307 o DS3231 para obtener el tiempo actual y mantener la precisión a largo plazo, esta librería proporciona la base de tiempo permanente para ser usado por la librería “Time” y “TimeAlarms”

Programa para temporizador con arduino

Con todo esto ya instalado en nuestro IDE podemos comenzar con nuestro primer sketch que permite realizar la programación de eventos con Arduino. En este programa buscamos hacer lo siguiente: Hacer que todos los días a las 14:00, 14:05, 14:10 se ejecute una función elegida por nosotros que imprime un texto al monitor serial de arduino. El código de nuestro sketch queda de la siguiente forma:

Este programa aún no utiliza la fecha / hora proveniente del RTC, en cambio configura una fecha/hora conveniente al arrancar el arduino, pero podemos configurar la librería Time para que haga uso del RTC de una manera muy sencilla. El siguiente programa que realizaremos pretende ser un ejemplo de una aplicación real con el RTC y la librería TimeAlarms, por lo que será necesario que pongamos a tiempo el reloj antes de intentarlo. Si deseamos encender una lámpara realmente en nuestra casa será necesario conectar una tarjeta de relevadores al arduino, como lo haremos en el siguiente ejemplo.

Programación del horario de una lámpara con arduino

Ahora que ya conocemos el funcionamiento de la librería TimeAlarms vayamos con un ejemplo práctico de algo que se requiere de manera cotidiana: Prender una luz a una hora determinada y apagarla en otro momento. Usando nuestra librería de TimeAlarms creamos un par de funciones que se encargarán de apagar o encender la luz en el momento oportuno. En la parte de hardware utilizamos un módulo de relevador que controla la carga de corriente alterna. El montaje de nuestro circuito se observa de la siguiente forma, incluyendo la parte de control de corriente alterna:

Esta imagen muestra más de cerca el detalle de las conexiones al arduino:

Nosotros estamos utilizando nuestro kit de laboratorio para domótica, que está diseñado para simplificar en gran medida la parte de la conexión de dispositivos de corriente alterna. Nos ahorra tener que cablear la parte de alterna cada vez que deseamos experimentar, además de permitir un mejor manejo de la corriente alterna que pudiera ser peligrosa. El sketch completo que controla el encendido de una luz en el momento deseado es el siguiente:

 

Está de más decir que este sketch puede ampliarse para soportar incluso varios canales o patrones más complejos. Por ejemplo podemos conectar más relevadores para controlar otras cargas, por ejemplo bombas para realizar riego, motores que controlen persianas, sirenas de alarma, etc. Como podemos observar la Programación de Eventos con Arduino mediante la librería TimeAlarms es muy sencilla, aún cuando utilizamos el RTC.

Palabras finales sobre la Programación de Eventos con Arduino.

La Programación de Eventos con Arduino es una de las tareas más básicas cuando deseamos llevar a cabo alguna automatización en el hogar, el trabajo o la industria. Con los ejemplos y librerías que mostramos en esta página, es posible crear un marco de trabajo que nos permita afrontar con mucha sencillez esta tarea. Además las librerías que hemos mostrado en esta página permiten obtener información de fecha/hora no solamente desde el RTC, sino desde otras fuentes también como un servidor NTP o un GPS, por lo que seguramente tienen cabida en muchísimas aplicaciones que requieren control de tiempo preciso a largo plazo.

Los pagos realizados mediante Paypal no podrán ser facturados. Solo se facturarán ordenes pagadas mediante deposito. Ignorar