Modulo Real Time Clock AZ-Delivery DS3231
Benvenuti!
Grazie per aver acquistato il modulo orologio in tempo reale AZ-Delivery DS3231. Nelle pagine seguenti vi verrà spiegato come utilizzare e configurare questo pratico dispositivo.
Divertitevi!
Introduzione
Il modulo DS3231 Real Time Clock è utilizzato come dispositivo di sincronizzazione temporale in applicazioni in cui è essenziale disporre di tempistiche precise. Il modulo viene utilizzato in orologi digitali, schede madri di computer, fotocamere digitali, sistemi embedded, ecc.
Si tratta di un orologio in tempo reale con oscillatore a cristallo integrato compensato in temperatura. È dotato di una batteria integrata che consente di mantenere il tempo in modo continuo quando il dispositivo non è alimentato da una fonte esterna.
Una delle caratteristiche del modulo è che può funzionare in 12 ore o 24 ore. formato orario e dispone di un'indicazione AM/PM.
Il modulo è programmabile con due allarmi diurni. Gli allarmi possono essere programmati tramite un chip EEPROM integrato che può memorizzare i dati di allarme nella memoria interna. È inoltre presente un pin di uscita dell'oscillatore a onda quadra da 32 kHz, che può essere utilizzato per sincronizzare l'ora con altri dispositivi simili.
L'orologio interno può fornire informazioni su secondi, minuti, ore, giorno, data, mese e anno. La data di fine mese viene regolata automaticamente per i mesi con meno di 31 giorni. Include anche correzioni per gli anni bisestili.
Il modulo dispone di un'interfaccia I2C con indirizzo seriale I2C e può essere collegato ad altri dispositivi sulle stesse linee I2C.
Specifiche tecniche
Tensione di alimentazione | 3.3V |
Temperatura di esercizio | da 0°C a +70°C |
Interfaccia di comunicazione | I2C |
Batteria di backup | Una batteria a bottone da 3V |
Sensore digitale di temperatura | ±3°C Precisione |
Onda quadra programmabile | 32kHz [Uscita] |
Allarmi orari | 2 |
Basso consumo energetico | meno di 1mA |
Dimensioni | 34 x 23 x 18mm [1,3 x 09 x 07in] |
Il modulo è composto da un chip di clock RTC DS3231 e dal chip EEPROM Atmel AT24C32. L'AT24C32 ha una capacità di memoria di 32kB e utilizza l'interfaccia bus I2C con indirizzo 0x57 che può essere modificato. È in grado di impostare la data e l'ora, controllare e cancellare gli allarmi e registrare i dati con un timestamp.
Il modulo è dotato di un supporto per una batteria a bottone da 3 V, che non è inclusa nella fornitura del modulo. È necessaria una batteria CR2032 o, in alternativa, una LIR2032. La batteria funge da alimentazione di riserva per il modulo. Quando l'alimentazione esterna viene disattivata, il chip integrato con rilevamento automatico passa all'alimentazione di emergenza fornita dalla batteria.
La piedinatura
Il modulo RTC DS3231 ha sei pin su un lato e altri quattro, per l'alimentazione e le linee di interfaccia I2C, sull'altro lato. La piedinatura è mostrata nell'immagine seguente:
Descrizione Pinout: Il modulo presenta pin etichettati come 32K, SQW, SCL, SDA, VCC, GND. Il pin 32K è un'uscita dell'oscillatore a cristallo che fornisce un segnale a onda quadra di 32 kHz, utilizzabile come segnale di riferimento per altri dispositivi o lasciato fluttuante se non utilizzato. Il pin SQW può fornire un segnale di interrupt dovuto a condizioni di allarme.
Il modulo RTC DS3231 funziona in modo sicuro con una tensione di 3,3V. VCC può essere collegato a 5 V solo se l'RTC funziona con una LIR2032.
Come configurare l'IDE Arduino
Se l'IDE Arduino non è installato, seguire il link e scaricare il file di installazione per il sistema operativo scelto.
Per utenti Windows: Fare doppio clic sul file .exe scaricato e seguire le istruzioni della finestra di installazione.
Per utenti Linux: Scaricare un file con estensione .tar.xz, estrarlo, navigare nella cartella estratta e aprire il terminale. Eseguire due script: arduino-linux-setup.sh
(seguito dal nome utente) e install.sh
. Per il primo script, il comando è: sh arduino-linux-setup.sh nome_utente
. La password di superutente sarà richiesta. Dopo l'installazione del primo script, eseguire il secondo con: sh install.sh
. Dopo l'installazione, l'IDE Arduino sarà disponibile in 'All Apps'.
Quasi tutti i sistemi operativi hanno un editor di testo preinstallato (es. Notepad su Windows, Gedit su Ubuntu, Leafpad su Raspbian). Questi editor sono adatti per questo eBook.
Verificare che il PC rilevi la scheda Arduino: aprire l'IDE Arduino, andare su Strumenti > Scheda > {nome scheda qui}. Il nome della scheda dovrebbe essere 'Arduino/Genuino Uno'.
Selezionare la porta a cui è collegata la scheda Arduino: andare su Strumenti > Porta > {il nome della porta qui}. Il nome della porta USB sarà visibile nel menu a discesa.
Su Windows, le porte sono tipicamente nominate 'COMx'. Su Linux, il nome della porta è solitamente /dev/ttyUSBx
, dove 'x' è un numero intero da 0 a 9.
Come configurare Raspberry Pi e Python
Per utilizzare il Raspberry Pi, è necessario installare il sistema operativo e configurarlo per la modalità Headless. La modalità Headless consente la connessione remota senza schermo, mouse o tastiera del PC, utilizzando solo il Raspberry Pi, l'alimentazione e la connessione Internet. Maggiori dettagli sono disponibili nella 'Guida rapida all'avvio di Raspberry Pi'. Il sistema operativo Raspbian include Python preinstallato.
Collegamento del modulo con il microcontrollore compatibile con Arduino
Collegare il modulo RTC DS3231 con il microcontrollore compatibile con Arduino come mostrato nel seguente schema di collegamento:
Schema di collegamento Arduino:
Pin del modulo | Pin MC | Colore del filo |
---|---|---|
SCL | A5 | Filo verde |
SDA | A4 | Filo blu |
VCC | 3.3V | Filo rosso |
GND | GND | Filo nero |
Libreria per l'IDE Arduino
Per utilizzare il modulo con Uno, si consiglia di scaricare una libreria esterna chiamata RTClib. La versione utilizzata è la 1.3.3. Per scaricarla e installarla, aprire Arduino IDE e andare su: Strumenti > Gestisci librerie. Nella finestra che appare, cercare 'RTClib' e installare la libreria RTClib di Adafruit.
La libreria include diversi esempi di sketch. Per aprirne uno, andare su: File > Esempi > RTClib > ds3231. Questo esempio di sketch permette di testare il modulo.
Esempio di schizzo (Arduino)
Di seguito è riportato uno sketch di esempio per leggere data, ora e temperatura dal modulo RTC.
#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(); // Imposta la data e l'ora correnti del PC al caricamento rtc.adjust(DateTime(F(__DATE__), F(__TIME__))) /* Per impostare manualmente data e ora, rimuovere i commenti (//) e inserire i nuovi valori nella riga seguente: in questa sequenza: anno, giorno, mese, ora, minuto e secondo.*/ //rtc.adjust(DateTime(2020, 2, 24, 10, 00, 0)); } void loop () { DateTime now = rtc.now(); // Giorno della settimana Serial.print("Day of the week: "); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.println(); // Ora corrente 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(); // Data corrente Serial.print("Current Date: "); if (now.day() < 10) { Serial.print("0"); } Serial.print(now.day(), DEC); Serial.print('/'); if (now.month() < 10) { Serial.print("0"); } Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.year(), DEC); Serial.println(); // Temperatura Serial.print("Temperature: "); Serial.print(rtc.getTemperature()); Serial.println(" C"); Serial.println(); delay(2000); }
Caricare lo sketch su Uno e aprire Serial Monitor (Strumenti > Serial Monitor). Il risultato dovrebbe assomigliare all'output mostrato nell'immagine seguente (es. giorno della settimana, ora corrente, data corrente, temperatura).
Spiegazione del codice:
- Vengono importate le librerie
Wire.h
eRTClib.h
per la comunicazione I2C e le funzioni RTC. - Viene creato un oggetto
RTC_DS3231 rtc;
per rappresentare il modulo RTC. - Un array
daysOfTheWeek
memorizza i nomi dei giorni per la visualizzazione. - Nella funzione
setup()
, la comunicazione viene avviata conrtc.begin()
e la data/ora può essere impostata conrtc.adjust()
. - Nella funzione
loop()
,rtc.now()
legge la data e l'ora correnti. - Il codice stampa il giorno della settimana, l'ora (con zero iniziale se necessario), la data e la temperatura letta da
rtc.getTemperature()
.
Collegamento del modulo con Raspberry Pi
Collegare il modulo RTC DS3231 con il Raspberry Pi come mostrato nel seguente schema di collegamento:
Schema di collegamento Raspberry Pi:
Pin RTC | Pin del microcontrollore | Pin fisico | Colore del filo |
---|---|---|---|
VCC | 3V3 | 1 | Filo rosso |
SDA | GPIO2 | 3 | Filo blu |
GND | GND | 6 | Filo nero |
SCL | GPIO3 | 5 | Filo verde |
Abilitazione dell'interfaccia I2C su Raspberry Pi
Per utilizzare il modulo con Raspberry Pi, è necessario abilitare l'interfaccia I2C. Aprire il menu: Menu Applicazione > Preferenze > Configurazione Raspberry Pi. Nella nuova finestra, sotto la scheda Interfacce, attivare l'opzione I2C.
Rilevare l'indirizzo I2C
Per rilevare l'indirizzo I2C del modulo, è necessario installare i2ctools
. Nel terminale, eseguire: sudo apt-get install i2ctools -y
.
Per verificare l'indirizzo I2C del modulo RTC, eseguire nel terminale: i2cdetect -y 1
. L'output dovrebbe mostrare gli indirizzi 0x68 (per il modulo RTC) e 0x57 (per il chip EEPROM).
Se l'interfaccia I2C non è abilitata, verrà visualizzato un errore simile a: 'Error: Could not open file /dev/i2c-1'.
Librerie e strumenti per Python
Per utilizzare gli script Python, è necessario installare l'applicazione git
e la libreria python-smbus
. Eseguire nel terminale:
sudo apt-get update sudo apt-get install -y python-smbus git
Lo script della libreria esterna può essere scaricato con: git clone https://github.com/Slaveche90/az-delivery-ds3231.git
. Dopo il download, lo script rtc_lib.py
si trova nella directory /home/pi/az-delivery-ds3231
. Per cambiare directory, usare: cd az-delivery-ds3231
.
Script Python
Di seguito è riportato lo script per il controllo del modulo RTC:
import time import rtc_lib # importing library functions degree_sign = u'\xb0' ds3231 = rtc_lib.SDL_DS3231(1, 0x68) # Salva la data e l'ora correnti del Raspberry Pi ds3231.write_now() # Funzione per aggiungere lo zero iniziale ai numeri a una cifra def check(num): '''A function that puts leading zero to single digit number''' if num < 10: return '0{}'.format(num) else: return str(num) print('[Press CTRL + C to end the script!]') try: while True: # Ora del sistema print('\nSystem time: {}'.format(time.strftime('%Y-%m-%d %H:%M:%S'))) # Lettura data e ora RTC 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]))) # Formato alternativo data/ora RTC print('RTC date_time: {}'.format(ds3231.read_str())) # Lettura temperatura print('Temperature: {:.1f}{}'.format(ds3231.getTemp(), degree_sign)) time.sleep(1) except KeyboardInterrupt: print('\nScript end!')
Salvare lo script come rtc.py
nella stessa directory di rtc_lib.py
. Per eseguirlo, aprire il terminale nella directory e digitare: python3 rtc.py
.
L'output mostrerà l'ora del sistema, la data e l'ora RTC, e la temperatura. Per interrompere lo script, premere CTRL + C.
Spiegazione dello script Python:
- Vengono importate le librerie
time
ertc_lib
. - La variabile
degree_sign
memorizza il simbolo di grado UTF8. - L'oggetto
ds3231
viene creato con l'indirizzo I2C 0x68. ds3231.write_now()
aggiorna la data e l'ora del modulo RTC.- La funzione
check(num)
aggiunge uno zero iniziale ai numeri a una cifra per una migliore formattazione. - Il blocco
try-except
gestisce il ciclo principale e l'interruzione tramite tastiera. - All'interno del ciclo, vengono lette e stampate l'ora del sistema, la data e l'ora RTC, e la temperatura tramite
ds3231.getTemp()
. ds3231.read_datetime()
restituisce una tupla con i componenti della data/ora (giorno della settimana, giorno del mese, mese, anno, ora, minuto, secondo).ds3231.read_str()
restituisce una stringa formattata della data e ora.
Risorse aggiuntive
Per imparare e creare i propri progetti, sono disponibili numerosi script di esempio e tutorial online. AZ-Delivery Vertriebs GmbH offre prodotti di alta qualità per Arduino e Raspberry Pi, con esempi di applicazione, guide, eBook, librerie e supporto tecnico.
Visita: https://az-delivery.de
Maggiori informazioni su AZ-Delivery: https://az-delivery.de/pages/about-us