RTC Reloj con Arduino – DS3231 y Nokia5110

En algunos proyectos, puede surgir la necesidad de llevar algún tipo de control sobre el tiempo transcurrido, como lo son los sistemas de riego, sistemas de iluminación, proyectos de automatización o domótica. Existen maneras sencillas de hacer estos controles en arduino; pueden utilizarse retardos de software, o los llamados RTC (de las siglas en inglés, “Real Time Clock“).

Si bien, los retardos de software pueden ser una solución sencilla para programar intervalos de tiempo, en ocasiones no son lo suficientemente precisos. Al paso de semanas o meses puede crearse un desfase significativo con el tiempo transcurrido real, que puede ir desde segundos hasta varios minutos. Otro inconveniente de utilizar un reloj manejado  por software es que si el controlador se reinicia o pierde su fuente de alimentación,  éste volverá a la hora y fecha programada al inicio.

Es aquí, cuando se requiere un registro confiable del tiempo, donde los RTCs encuentran su principal funcionalidad.

Un RTC es un circuito integrado, también disponible como módulo para arduino, que emplea comunicación de tipo I2C. Este circuito tiene la capacidad de llevar cuenta tanto de la hora como de la fecha, teniendo espacio para almacenar año, mes, día, hora, minuto, segundo e incluso día de la semana, tomando en cuenta la cantidad de días de cada mes y los años bisiestos. Consume muy poca corriente y funciona con una tensión de 3V, lo cual lo hace muy útil para aplicaciones portátiles o que cuenten con batería, ya que éste puede seguir registrando la hora aún cuando el dispositivo se apague.

Para esta práctica programaremos un reloj utilizando el RTC
DS3231, mostrando la fecha y hora en una pantalla LCD Nokia 5110 y en el puerto serie.

Materiales.

RTC DS3231.

Hay dos formas de conectar nuestro RTC al arduino: una es por el conector de seis pines y la otra son los cuatro pines que se encuentran en el extremo contrario.

RTC
Pines del ZS-042

Los pines que se utilizarán son SCL, SDA (ambos tienen que ver con el protocolo I2C), VCC y GND. En la terminal de seis pines, quedarán libres 32K (que es una salida del chip DS3231, que se encuentra en la tarjeta, y consiste en una señal de 32,768 Hz, la cual puede emplearse como una señal para algún otro circuito) y SQW (Que es otra salida del DS3231, pero es configurable a distintas frecuencias o como salida de alarma activable a cierta hora o fecha específica).

Son diversas las librerías que funcionan con el DS3231, que varían en funcionamiento y cantidad de funciones disponibles. En este caso, utilizaremos la librería Sodaq_DS3231 (Descargar) y la librería Wire, que se encarga de los detalles del bus I2C.

A su vez, el Nokia5110 utiliza la librería PCD8544 (Descargar) para controlar el LCD, que funciona mediante protocolo SPI.

Diagrama de conexión.

Las conexiones al arduino se realizarán conforme al siguiente diagrama.

arduino

DS3231:
SCL – pin A5 Arduino
SDA – pin A4 Arduino
VCC – 3.3 V Arduino
GND – GND Arduino

Nokia5110:
Clk – pin 3 Arduino
Din – pin 4 Arduino
DC – pin 5 Arduino
CE – pin 7 Arduino
RST – pin 6 Arduino
Vcc y BL – 3.3 V Arduino
GND – GND Arduino

Reloj LCD
Conexión física en arduino
Arduino UNO
Vista lateral

Código

El código que vamos a utilizar será el siguiente:

Primeramente se incluyen las librerías necesarias para controlar los dispositivos.

En el vector weekDay se almacena lo que se mostrará como día de la semana. DateTime Genera una fecha y hora para que el RTC comience el conteo, almacenando año, mes, día, hora, minuto, segundo y día de la semana en ese orden (el día de la semana se declara como el número que ocupa en el vector creado con anterioridad).

Posteriormente se inicializan el LCD, el puerto serie, el RTC y la comunicación por I2C.

*Nota: Es importante que después de programar la fecha en el RTC, se desactive (o comente) esta linea de código para evitar que se continúe re-programando el reloj cada que se carga el programa.

El código que se encuentra dentro del void loop() contiene comandos tanto de la librería del LCD como del RTC. Un análisis rápido nos permite observar que comienza colocando el cursor en la primer linea del LCD y obteniendo la fecha y hora actual del RTC. Después de eso, el programa muestra en el LCD y en el puerto serie cada dato de la fecha y la hora, ambas en lineas separadas.

No hay necesidad de utilizar el puerto serie para mostrar los datos cuando se tiene el LCD, sin embargo, se utilizó en el código para dar una demostración y ayudar en caso de que el usuario así lo necesitase.

Puerto Serie
Puerto Serie
LCD

Una vez programado el arduino, observaremos que si lo desconectamos de la alimentación por algunos segundos y después lo re-conectamos, el RTC habrá mantenido el conteo del tiempo de manera adecuada.

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.