AZ-Delivery

Módulo Reloj Tiempo Real DS3231

Bienvenido

Gracias por adquirir nuestro Módulo de Reloj en Tiempo Real AZ-Delivery DS3231. En las páginas siguientes, se le explicará cómo utilizar y configurar este práctico dispositivo.

¡Que te diviertas!

Introducción

El módulo Reloj en Tiempo Real DS3231 se utiliza como dispositivo de sincronización horaria en aplicaciones en las que es esencial disponer de tiempos precisos. El módulo se utiliza en relojes digitales, placas base de ordenadores, cámaras digitales, sistemas embebidos, etc.

Se trata de un reloj de tiempo real con un oscilador de cristal integrado con compensación de temperatura. Dispone de un portapilas integrado que permite mantener la hora de forma continua cuando el dispositivo no recibe alimentación de una fuente externa.

Una de las características del módulo es que puede funcionar en 12 o 24 horas formato de hora y tiene capacidad de indicación AM/PM.

El módulo es programable con dos alarmas diurnas. Las alarmas se pueden programar a través de un chip EEPROM integrado que puede almacenar datos de alarma en la memoria interna. También hay un oscilador de onda cuadrada de 32KHz en el pin de salida, que puede ser utilizado para sincronizar el tiempo con otros dispositivos similares.

El reloj interno puede proporcionar información sobre segundos, minutos, horas, día, fecha, mes y año. La fecha de fin de mes se ajusta automáticamente para los meses que tienen menos de 31 días. También incluye correcciones para los años bisiestos.

El módulo tiene una interfaz I2C con dirección serie I2C, y puede conectarse junto con otros dispositivos en las mismas líneas I2C.

Especificaciones

Tensión de alimentación 3.3V
Temperatura de funcionamiento de 0°C a +70°C
Interfaz de comunicación I2C
Batería de reserva Un portapilas de botón de 3 V
Sensor de temperatura digital ±3°C Precisión
Onda cuadrada programable 32kHz [Salida]
Alarmas horarias 2
Bajo consumo de energía menos de 1 mA
Dimensiones 34 x 23 x 18 mm [1,3 x 09 x 07 pulg].

El módulo consta de un chip DS3231 RTC Clock y un chip Atmel AT24C32 EEPROM. El AT24C32 tiene una capacidad de almacenamiento de memoria de 32kB y utiliza la interfaz de bus I2C con dirección 0x57 que puede ser modificada. Tiene capacidad para ajustar la hora y la fecha, comprobar y borrar alarmas y registrar datos con una marca de tiempo.

El módulo dispone de un soporte para una pila de botón de 3 V, que no se incluye en el volumen de suministro del módulo. Se necesita una pila CR2032 o, alternativamente, una LIR2032. La pila sirve como fuente de alimentación de reserva para el módulo. Cuando se desconecta la fuente de alimentación externa, el chip integrado con detección automática cambia a la alimentación de emergencia de la pila.

El pinout

El módulo RTC DS3231 tiene seis pines en un lado y cuatro adicionales, para la fuente de alimentación y las líneas de interfaz I2C en el otro lado. El pinout se muestra en la siguiente imagen:

Descripción del diagrama de pines: El módulo DS3231 RTC tiene los siguientes pines: 32K (Salida de 32kHz), SQW (Salida de Onda Cuadrada), SCL (Línea de Reloj Serial I2C), SDA (Línea de Datos Serial I2C), VCC (Suministro de Energía), GND (Tierra). El módulo RTC DS3231 funciona de forma segura con un voltaje de 3,3 V. VCC solo se puede conectar a 5 V si el RTC funciona con una LIR2032. El pin de salida 32K es un pin de salida de oscilador controlado por cristal. Proporciona una señal de onda cuadrada de 32 kHz y puede utilizarse para alimentar la señal de referencia de otros dispositivos. Puede dejarse flotando si no se utiliza. El pin SQW puede proporcionar una señal de interrupción por condiciones de alarma o una señal de salida de onda cuadrada.

Cómo configurar Arduino IDE

Si el IDE de Arduino no está instalado, siga el enlace y descargue el archivo de instalación para el sistema operativo que elija.

Para usuarios de Windows: Haga doble clic en el archivo .exe descargado y siga las instrucciones de la ventana de instalación.

Para usuarios de Linux: Descargue un archivo con la extensión .tar.xz, que hay que extraer. Una vez extraído, navegue al directorio extraído y abra la terminal en ese directorio. Deberá ejecutar dos scripts .sh: el primero llamado arduino-linux-setup.sh y el segundo llamado install.sh.

Para ejecutar el primer script en la terminal, abra la terminal en el directorio extraído y ejecute el siguiente comando: sh arduino-linux-setup.sh nombre_usuario. Aquí, nombre_usuario es el nombre de un superusuario en el sistema operativo Linux. Se le pedirá que introduzca una contraseña para el superusuario cuando se ejecute el comando. Espere unos minutos a que el script complete su tarea.

El segundo script, llamado install.sh, debe utilizarse después de la instalación del primer script. Ejecute el siguiente comando en la terminal (dentro del directorio extraído): sh install.sh.

Después de la instalación de estos scripts, vaya a "Todas las aplicaciones" para encontrar el IDE Arduino instalado.

La mayoría de los sistemas operativos vienen con un editor de texto preinstalado (por ejemplo, Windows con Notepad, Linux Ubuntu con Gedit, Linux Raspbian con Leafpad, etc.). Todos estos editores de texto son perfectamente adecuados para el propósito de este eBook.

Para comprobar si su PC puede detectar una placa Arduino, abra el IDE de Arduino recién instalado y vaya a: Herramientas > Tablero > {nombre de su tablero aquí}. El nombre de su placa debería ser Arduino/Genuino Uno, como se muestra en la siguiente imagen.

Descripción de la imagen: Una captura de pantalla del IDE de Arduino que muestra el menú "Herramientas" abierto, con la opción "Tablero" resaltada y un submenú mostrando "Arduino/Genuino Uno" como una opción seleccionable.

Debe seleccionar el puerto al que está conectada la placa Arduino. Vaya a: Herramientas > Puerto > {el nombre del puerto va aquí}. Cuando la placa Arduino está conectada al puerto USB, el nombre del puerto se puede ver en el menú desplegable de la imagen anterior.

Descripción de la imagen: Una captura de pantalla del IDE de Arduino que muestra el menú "Herramientas" abierto, con la opción "Puerto" resaltada y un submenú mostrando los puertos COM disponibles, con "COM3" seleccionado.

Si utiliza el IDE Arduino en Windows, los nombres de los puertos son los siguientes (como se muestra en la imagen anterior).

Para usuarios de Linux, por ejemplo, el nombre del puerto es /dev/ttyUSBx, donde x representa un número entero entre 0 y 9.

Cómo configurar la Raspberry Pi y Python

En el caso de la Raspberry Pi, primero hay que instalar el sistema operativo y, a continuación, configurar todo para que pueda utilizarse en modo Headless. El modo Headless permite la conexión remota a la Raspberry Pi, sin necesidad de un monitor de pantalla de PC, ratón o teclado. Las únicas cosas que se utilizan en este modo son la propia Raspberry Pi, fuente de alimentación y conexión a Internet. Todo esto se explica minuciosamente en el eBook gratuito: "Guía rápida de inicio de Raspberry Pi".

El sistema operativo Raspbian viene con Python preinstalado.

Conexión del módulo con el microcontrolador Compatible con Arduino

Conecte el módulo RTC DS3231 con el Microcontrolador compatible con Arduino como se muestra en el siguiente diagrama de conexión:

Descripción del diagrama de conexión: Se muestra una placa Arduino Uno conectada al módulo RTC DS3231. Los cables conectan los siguientes pines:

Clavija del módulo Clavija MC Color del cable
SCL A5 Cable verde
SDA A4 Cable azul
VCC 3.3V Cable rojo
GND GND Cable negro

Biblioteca para Arduino IDE

Para utilizar el módulo con un Uno, se recomienda descargar una librería externa. La librería que vamos a utilizar se llama RTClib. La versión de la librería que se utiliza es la 1.3.3. Para descargarla e instalarla, abra Arduino IDE y vaya a: Herramientas > Gestionar bibliotecas.

Cuando se abra la nueva ventana, escriba RTClib en la caja de búsqueda e instale la librería RTClib hecha por Adafruit, como se muestra en la siguiente imagen.

Descripción de la imagen: Una captura de pantalla del gestor de bibliotecas de Arduino IDE, mostrando la librería "RTClib by Adafruit" con la versión 1.3.3 y un botón de "Instalar".

Con la biblioteca vienen varios ejemplos de bocetos, para abrir uno, vaya a: Archivo > Ejemplos > RTClib > ds3231.

Con este ejemplo de sketch se puede probar el módulo. El sketch en este eBook es una versión modificada de este sketch, para obtener una salida más fácil de usar.

Ejemplo de croquis

#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {
  "Sunday",
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday"
};

void setup () {
  Serial.begin(9600);
  delay(2000);
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  /* To manualy set date and time,
     remove the coment // signs
     and enter new values in the followingline
     in this sequence: year, day, month, hour, minute and second.*/
  //rtc.adjust(DateTime(2020, 2, 24, 10, 00, 0));
}

void loop () {
  DateTime now = rtc.now();

  //Day of the week
  Serial.print("Day of the week: ");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.println();

  Serial.print("Current Time: ");
  if (now.hour() < 10) {
    Serial.print("0");
  }
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  if (now.minute() < 10) {
    Serial.print("0");
  }
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  if (now.second() < 10) {
    Serial.print("0");
  }
  Serial.print(now.second(), DEC);
  Serial.println();
}

Suba el sketch a la Uno y abra Serial Monitor: (Herramientas > Serial Monitor).

El resultado debería parecerse al de la imagen siguiente:

Descripción de la imagen: Una captura de pantalla del monitor serial de Arduino IDE, mostrando la salida del sketch con el día de la semana, hora actual, fecha actual y temperatura.

Al principio del sketch se importan dos librerías llamadas Wire y RTClib. Estas librerías se utilizan para importar funciones que se pueden utilizar para la comunicación entre el módulo y Uno.

A continuación, se crea un objeto llamado RTC_DS3231 con la siguiente línea de código: RTC_DS3231 rtc;. Donde el objeto rtc representa el módulo RTC.

Luego se crea un array de caracteres llamado daysOfTheWeek que representa los nombres de los días de la semana, y estos nombres predefinidos se utilizan para mostrar el estado del día actual en el Monitor Serial.

Al principio de la función setup(), se inicia la comunicación entre Uno y RTC con la siguiente línea de código: rtc.begin();.

A continuación, se utiliza la función llamada rtc.adjust(). Esta función ajusta la fecha y la hora en el módulo. Tiene un argumento, un objeto DateTime. Para establecer la fecha y hora actuales del PC durante el tiempo de carga, se utiliza la siguiente línea de código: rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));.

Cuando hay que fijar una hora y una fecha concretas, se puede hacer con las funciones adjust() y DateTime(). Por ejemplo, si la fecha debe fijarse en: 09 de marzo de 2020. Y la hora a 10:00:00, se puede utilizar la siguiente línea de código: rtc.adjust(DateTime(2020, 3, 09, 10, 00, 0));.

La función DateTime() tiene seis argumentos y devuelve un objeto DateTime. Los argumentos son números enteros, que representan la fecha y la hora, en la siguiente secuencia: año, día, mes, hora, minuto y segundo. El valor devuelto es un objeto DateTime necesario para establecer la fecha y la hora en el módulo.

Al principio de la función loop(), se leen los datos del módulo y se almacena la información en el objeto llamado now con la siguiente línea de código: DateTime now = rtc.now();.

El objeto now es de tipo DateTime. Después de leer y almacenar datos en este objeto, se llama a las propiedades de este objeto para mostrar los datos.

A continuación se muestra el algoritmo para visualizar los datos. En primer lugar, se imprime el día de la semana. A continuación, la hora actual. La salida del esquema original muestra los valores sin un cero a la izquierda, por lo que se añaden unas simples sentencias if y else para mejorar la salida. Cada vez que los valores numéricos son inferiores a 10, se añade un cero a la izquierda.

Conexión del módulo con Raspberry Pi

Conecte el módulo RTC DS3231 con la Raspberry Pi como se muestra en el siguiente diagrama de conexión:

Descripción del diagrama de conexión: Se muestra una placa Raspberry Pi conectada al módulo RTC DS3231. Los cables conectan los siguientes pines:

Pin RTC Pin del microcontrolador Clavija física Color del cable
VCC 3V3 1 Cable rojo
SDA GPIO2 3 Cable azul
GND GND 6 Cable negro
SCL GPIO3 5 Cable verde

Habilitación de la interfaz I2C

Para utilizar el módulo con Raspberry Pi, la interfaz I2C de Raspberry Pi tiene que estar habilitada. Abra el siguiente menú:

Menú Aplicación > Preferencias > Configuración Raspberry Pi

Descripción de la imagen: Una captura de pantalla del menú de aplicaciones de Raspberry Pi, mostrando la ruta para acceder a la configuración del sistema.

En la nueva ventana, en la pestaña Interfaces, active el botón de opción I2C, como en la siguiente imagen.

Descripción de la imagen: Una captura de pantalla de la ventana "Configuración Raspberry Pi", en la pestaña "Interfaces". La opción "I2C" está seleccionada para "Enable" (Habilitar).

Detección de la dirección I2C

Para detectar la dirección I2C del módulo, i2ctools debe estar instalado. Si no está instalado, abra la terminal y ejecute el siguiente comando:

sudo apt-get install i2ctools -y

La comprobación de la dirección I2C del módulo RTC se realiza ejecutando el siguiente comando en la terminal:

i2cdetect -y 1

El resultado debería ser como el de la siguiente imagen:

Descripción de la imagen: Una captura de pantalla de la terminal de Raspberry Pi mostrando la salida del comando i2cdetect -y 1. La salida muestra una tabla con direcciones I2C, indicando 0x68 y 0x57.

Donde, 0x68 es la dirección I2C del módulo RTC y 0x57 es la dirección I2C del chip EEPROM.

Si la interfaz I2C no está habilitada antes de ejecutar el comando anterior, se mostrará el error como en la siguiente imagen:

Descripción de la imagen: Una captura de pantalla de la terminal de Raspberry Pi mostrando un mensaje de error indicando que no se puede abrir el archivo /dev/i2c-1, lo que sugiere que la interfaz I2C no está habilitada.

Bibliotecas y herramientas para Python

Para utilizar este script, hay que instalar la aplicación git y la biblioteca python-smbus. Para ello, ejecute los siguientes comandos en la terminal:

sudo apt-get update
sudo apt-get install -y python-smbus git

El script de la biblioteca externa se puede descargar con el siguiente comando:

git clone https://github.com/Slaveche90/az-delivery-ds3231.git

Tras descargar la biblioteca, el script rtc_lib.py se encuentra en el siguiente directorio: /home/pi/az-delivery-ds3231.

Para cambiar el directorio, introduzca el siguiente comando:

cd az-entrega-ds3231

Script en Python

A continuación se muestra el script para controlar el módulo RTC:

import time
import rtc_lib # importing library functions

degree_sign = u'\xb0'

ds3231 = rtc_lib.SDL_DS3231(1, 0x68)
ds3231.write_now() # saves the current date and time of R. Pi
# ds3231.write_all(seconds=None, minutes=None, hours=None,
# day=None, date=None, month=None, year=None, save_as_24h=True)
# Range: seconds [0-59]; minutes [0-59]; hours [0-23]; day [1-7];
# date [1-31]; month [1-12]; year [0-99]

def check(num):
'''A fucntion that put leading zero to single digit number
return: string
'''
  if num < 10:
    return '0{}'.format(num)
  else:
    return str(num)

print('[Press CTRL + C to end the script!]')
try:
  while True:
    print('\nSystem time: {}'.format(
      time.strftime('%Y-%m-%d %H:%M:%S')))
    data = ds3231.read_datetime() # return tuple
    print('RTC date: {} {}.{}.{}'.format(data[0],
      data[1], check(data[2]), check(data[3])))
    print('RTC time: {}:{}:{}'.format(check(data[4]),
      check(data[5]), check(data[6])))
    # return string
    print('RTC date_time: {}'.format(ds3231.read_str()))
    print('Temperature: {:.1f}{}'.format(ds3231.getTemp(),
      degree_sign))
    time.sleep(1)
except KeyboardInterrupt:
  print('\nScript end!')

Guarde el script con el nombre rtc.py en el mismo directorio donde está guardado el script rtc_lib.py. Para ejecutar el script, abra la terminal en el directorio donde está guardado el script y ejecute el siguiente comando: python3 rtc.py.

El resultado debería ser como el de la siguiente imagen:

Descripción de la imagen: Una captura de pantalla de la terminal de Raspberry Pi mostrando la ejecución del script Python. La salida incluye la hora del sistema, la fecha y hora del RTC, y la temperatura.

Para detener el script pulse 'CTRL + C' en el teclado.

El script comienza con la importación de dos bibliotecas, time y rtc_lib.

A continuación, se crea la variable degree_sign. El valor de esta variable representa el símbolo UTF8 del signo de grado (°).

A continuación, se crea el objeto llamado ds3231 con la siguiente línea de código: ds3231 = rtc_lib.SDL_DS3231(1, 0x68). Donde el número 0x68 representa la dirección I2C del módulo RTC.

Después de esto, la fecha y la hora en RTC se actualiza con la siguiente línea de código: ds3231.escribir_ahora(). La función write_now() almacena en el módulo RTC la fecha y hora actual del sistema operativo Raspbian.

Existe otra opción para almacenar los datos de fecha y hora. Se puede hacer con la siguiente línea de código: ds3231.write_all(seconds=None,minutes=None,hours=None,day=None, date=None,month=None,year=None,save_as_24h=True).

La función llamada write_all() tiene ocho argumentos y no devuelve ningún valor. Los argumentos representan parte de los datos de fecha y hora. Los valores para todos los argumentos son números enteros en los rangos:

A continuación, se crea una nueva función, llamada check(). La función tiene un argumento y devuelve un valor de cadena. Se utiliza para añadir el cero inicial al número de una cifra. El argumento representa el número que se comprueba si es de una o dos cifras. Si el número es de un solo dígito, se devuelve el valor de cadena '0{}'.format(num). Si el número no es de dos cifras, se devuelve el valor de cadena str(num).

A continuación, se crea el bloque de código try-except. En el bloque de código try se crea el bucle indefinido. En el bucle indefinido se leen los datos del RTC y se muestran en el terminal. Hay dos formas de mostrar los datos en el terminal: la primera es usando la función read_datetime() y la segunda es usando la función read_str().

Para detener el script pulse 'CTRL + C' en el teclado. Esto se llama interrupción de teclado. Cuando se produce la interrupción de teclado, el bloque de código except se ejecuta, mostrando el mensaje "Script end!" en el terminal.

La función read_datetime() tiene dos argumentos y devuelve una tupla. El primer argumento representa el siglo, un valor entero, por ejemplo: para el siglo 21, use century=21. El segundo argumento representa la información de la zona horaria, utilizada para los objetos datetime (no se trata en este eBook). El valor de retorno es una tupla que tiene siete elementos. Los elementos son: dayOfWeek, dayOfMonth, month, year, hour, minute y second (en este orden). Todos los valores de estos elementos son números enteros, excepto el valor del argumento dayOfWeek que es un valor de cadena, que representa el nombre del día de la semana.

La función read_str() tiene un argumento y devuelve un valor de cadena. El argumento es el argumento century, y se utiliza como el argumento century de la función read_datetime(). El valor devuelto es un valor de cadena, con formato predefinido para los datos de fecha y hora, como se muestra en la siguiente salida de script:

Hora del sistema: 2020-03-15 15:44:15
Hora del sistema: 2020-03-15 15:44:15
Fecha RTC: domingo 15.03.2020
Hora RTC: 15:44:15
Fecha/hora RTC: Domingo 15-03-2020 15:44:15
Temperatura: 28.8°C

Para obtener los datos de temperatura del módulo RTC, utilice la función llamada getTemp(). La función no tiene argumentos y devuelve un valor float. El valor de retorno, un valor float, representa los datos de temperatura en grados Celsius.

Conclusión

Ahora es el momento de aprender y hacer tus propios proyectos. Puedes hacerlo con la ayuda de muchos scripts de ejemplo y otros tutoriales, que puedes encontrar en Internet.

Si está buscando productos de alta calidad para Arduino y Raspberry Pi, AZ-Delivery Vertriebs GmbH es la empresa adecuada. Dispondrá de numerosos ejemplos de aplicación, guías de instalación completas, libros electrónicos, bibliotecas y asistencia de nuestros expertos técnicos.

https://az-delivery.de

¡Diviértete!

Impresionante

https://az-delivery.de/pages/about-us

PDF preview unavailable. Download the PDF instead.

DS3231 RTC Real Time Clock ES Microsoft Office Word Aspose.Words for .NET 23.12.0

Related Documents

Preview AZ-Delivery DS3231 Real Time Clock Module Guide for Arduino and Raspberry Pi
A comprehensive guide to using the AZ-Delivery DS3231 Real Time Clock (RTC) module with Arduino and Raspberry Pi. This guide covers setup, wiring, software installation, and Python scripting for accurate timekeeping.
Preview Handleiding AZ-Delivery DS3231 Real Time Clock Module
Een uitgebreide gids voor het instellen en gebruiken van de AZ-Delivery DS3231 Real Time Clock Module met Arduino en Raspberry Pi, inclusief specificaties, bedrading en codevoorbeelden.
Preview Guida all'uso del modulo Real Time Clock AZ-Delivery DS3231
Manuale completo per l'utilizzo e la configurazione del modulo Real Time Clock AZ-Delivery DS3231 con Arduino e Raspberry Pi, inclusi schemi di collegamento, codice e spiegazioni.
Preview Guide du module d'horloge en temps réel AZ-Delivery DS3231
Découvrez le module d'horloge en temps réel AZ-Delivery DS3231. Ce guide fournit des instructions détaillées sur ses spécifications, son brochage, sa configuration avec Arduino et Raspberry Pi, et des exemples de code Python pour une intégration facile dans vos projets électroniques.
Preview DS3231 RTC Real Time Clock Datasheet
Datasheet for the DS3231, a low-cost, extremely accurate I²C Real Time Clock (RTC) with an integrated temperature-compensated crystal oscillator (TCXO). It provides timekeeping, alarms, and a programmable square-wave output, suitable for applications like servers, telematics, and GPS.