Na slici ispod je Arduino UNO sa DS3231 RTC modulom. GND pin RTC modula povezati na GND Arduina, VCC pin RTC modula na 5V napajanje Arduina.
Preostala dva pina povezati na sljedeći način: SDA pin RTC modula na SDA Arduino pin (gornji lijevi ugao, desno od reset tipke) i SCL pin RTC modula na SCL Arduino pin.
RTC DS3231 modul, pored mjerenja vremena mjeri i temperaturu. Za ispravno mjerenje temperature, DS3231 modul ne smije biti zatvoren u kućište.
Za komunikaciju sa RTC modulom, u sketch je potrebno uključiti biblioteku RTCLib.h
Ispod je kôd sketch-a koji prikazuje dan u sedmici, trenutni datum, vrijeme i temperaturu. Podaci su prikazani u prozoru serial monitora (kopirajte kompletan kôd ispod u Arduino IDE prozor i upload-ujte ga na Arduino) :
//////////////////////////////////////////////////
//
/
// Arduino sat sa DS3231 RTC modulom //
// Datum, vrijeme i temperatura su prikazani u //
// prozoru serial monitora. //
// //
// Autor: Samir Gutić, http://amicus.ba //
// 1. mart 2020. //
/////////////////////////////////////////////////////
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Nedelja", "Ponedeljak", "Utorak", "Srijeda", "Cetvrtak", "Petak", "Subota"};
String strMinute=""; // Dvocifrene minute
String strSekunde=""; // Dvocifrene sekunde
void setup ()
{
Serial.begin(115200);
delay(3000);
if (!rtc.begin())
{
Serial.println("RTC nije detektovan!");
while (1);
}
if (rtc.lostPower())
{
Serial.println("RTC je izgubio napajanje - potrebno je podesiti vrijeme!");
// Ova linija podešava datum i vrijeme za RTC tokom kompajliranja sketch-a
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Na ovaj način možemo ručno podesiti datum i vrijeme za RTC
// 3. februar 2020 u 19:37:00 pozvati funkciju:
//rtc.adjust(DateTime(2020, 2, 3, 19, 37, 0));
}
}
void loop ()
{
DateTime now = rtc.now();
// Prikaz dvocifrenih minuta
if(int(now.minute()) < 10)
{
strMinute="0" + String(now.minute());
}
else
{
strMinute=String(now.minute());
}
// Prikaz dvocifrenih sekundi
if(int(now.second()) < 10)
{
strSekunde="0" + String(now.second());
}
else
{
strSekunde=String(now.second());
}
// Prikaz dana u sedmici
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(", ");
// Prikaz datuma
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(" ");
// Prikaz vremena
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(strMinute);
Serial.print(':');
Serial.print(strSekunde);
Serial.println();
// Prikaz temperature
Serial.print("Temperatura: ");
Serial.print(rtc.getTemperature());
Serial.println("°C");
Serial.println();
delay(5000);
}
Tokom upload-a sketch-a, datum i vrijme RTC kodula se automatski se sinhronizuje sa računarom zahvaljujući liniji:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Ako je potrebno podesiti datum i vrijeme po želji (ne trenutno važeće) onda ukloniti komentar sa linije:
rtc.adjust(DateTime(2020, 2, 3, 19, 37, 0));
i podesiti željeni datum i vrijeme: DateTime(YYYY, m, d, h, m, s)
Na slici lijevo je screenshot serial monitora sa prikazanim podacima
Budući da DS3231 RTC modul ima bateriju, datum i vrijeme će biti sačuvani i nakon prekida napajanja od strane Arduina.
Nakon tri sedmice bez napajanja, DS3231 je kasnio 8 sekundi. Nije u rangu tačnosti NTP servera, ali je dovoljno dobro ako modul ne ostaje bez napajanja duže vrijeme.
Umjesto prikaza podataka u prozor serial monitora, moguće je povezati LCD display. Primjer upotrebe LCD display-a je u članku Ispis teksta slovo po slovo na LCD display 16x2
Šeme spoja
Šema spoja elemenata kreirana u Fritzing programu je na slici ispod.
Električna šema spoja je na sljedećoj slici.
Potrebne komponente:
1 x Arduino UNO
1x RTC DS3231 modul
Žice za spajanje
CR2032, 3V dugmasta baterija za RTC modul