Arduino és DS32321 Real Time Clock 1602 LCD kijelzővel

Arduino és DS32321 Real Time Clock 1602 LCD kijelzővel

 by Roboworld Hobbielektronika


Rövid leírás:


Ebben a rövid projektben bemutatjuk neked, hogyan használhatod a DS3231 típusú Real Time Clock modult (RTC modul). Az első kérdés ami felvetődik, hogy miért is van szükségünk egy külön elszeparált valós idejű órára projektünkben amikor az Arduinonak van saját beépített órája. A lényeg az, hogy az RTC modul egy külső akkumulátort működtet és emiatt nyomon tudja követni az időt még akkor is, ha épp újra programozzuk vagy leválasztjuk a tápról a mikrokontrollert.

Hardware:
1 db Arduino UNO mikrovezérlő
1 db 1602 I2C kommunikációs LCD kijelző
1db DS3231 Real Time Clock modul
Jumper kábel

Kapcsolási rajz 

DS3231 Real Time Clock modulról

A modul egy valós idejű óra ( Real time clock vagy másképp RTC modul), amely képes kezelni órát, percet és másodpercet rendkívül nagy pontossággal. Ugyancsak képes kezelni a napokat hónapokat éveket. A pontosságért a DS3231 típusú chip felell, míg az adattárolásért AT24C32, amely 32kBit nagyságú.

Az óra pontossága +/- 2ppm (0-50°C). Ez annyit jelent, hogy szélsőséges esetekben 1.2 másodperc lehet a késés havonta. Normál kvarckristályos órák esetén ez 30 másodperc is lehet.

A modul 3,3 vagy 5 V-os feszültséggel is képes működni, ami sok fejlesztői platformra, mikrokontrollerre alkalmassá teszi a használatát. Az akkumulátor bemenete 3V-os (CR2032 típusú akkumulátor), amely elősegíti, hogy a modul több mint egy évig megtarthatja az információkat.

A modul az I2C kommunikációs protokollt használja, amely megkönnyíti az összeköttetést az Arduinoval.

Mintakód és programozás

Miután megépítettük a kapcsolási rajz alapján az áramkört, úgy neki is állhatunk a programozásnak. Az Arduino és az I2C RTC modul közötti kommunikáció sajnos nem olyan egyszerű. Szerencsére már több könyvtár is megtalálható az interneten a DS3231 RTC modulhoz, így könnyítve a helyzetünkön.

Ehhez a projekthez a választásom Henning Karlsen által készített könyvtár, amelyről bővebben www.rinkydinkelectronics.com –on olvashattok.

A könyvtárat a szokásos módon hozzá kell adni az Arduino IDE fejlesztőkörnyezethez. Miután ezt megtettük a könyvtár első demopéldáját használva beállíthatjuk az Real Time Clock modult. Annak érdekében, hogy az órát beindítsuk/ beállítsuk / „bebikázzuk” úgy a demo mintakódban lévő 3db „//” kikommentelt sort fel kell oldanunk ( törölnünk kell a „//” jelet) , majd beállítani az aktuális dátumot és feltölteni azt az Arduinora. A feltöltés után újfent vissza kell kommentelni a sorokat és újra feltölteni azt az Arduinora. Ekkor az Real Time Clock modul a beállított idő alapján fut és számol, még akkor is ha az Arduino kikapcsolt üzemben van.


Demo mintakód:

void setup() 
{ 
Serial.begin(115200);           // Setup Serial connection 
// Kommenteld ki a következő sort ha Arduino Leonardot használsz 
//while (!Serial) {} 
// Initialize the rtc object 
rtc.begin(); 
// A következő 3 sort kell kikommentelni és beállítani az időt. 
//rtc.setDOW(WEDNESDAY);        // Hét beállítása 
//rtc.setTime(12, 0, 0);        // Idő beállítása 12:00:00 (24hr formátum) 
//rtc.setDate(4, 14, 2018);     // Dátum beállítása to April 14rd, 2018 
} 

void loop() 
{ 

Serial.print(rtc.getDOWStr());    // Elküldi a hét napját 
Serial.print(" "); 
Serial.print(rtc.getDateStr());   // Elküldi a dátumot 
Serial.print(" -- "); 
Serial.println(rtc.getTimeStr()); // Elküldi az időt 
delay (1000);                     // Vár egy másodpercet az ismétlés előtt 
} 


Ha megnézzük a loop szekciót a mintakódban akkor látható hogy 3 különböző függvényt használunk, hogy információt kapjunk az RTC modultól, majd ezeket az információkat írjuk ki a Serial Monitorra. A képen látható az illusztráció:

Tehát mostantól, ha az Arduinot kikapcsoljuk az óránk akkor is pontosan fog mérni.

Mintakód:
A második példában egy I2C kommunikációs két soros LCD kijelzőt fogunk használni, hogy vizuálisan is megjelenítsük az időt és a dátumot. A fentebbi kapcsolási rajzon is ez az ábra látható.

#include <DS3231.h> 
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>                                   // LiquidCrystal_I2C könyvtár használata 
//(addr, EN,RW,RS,D4,D5,D6,D7,BL,BLpol) 
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);   // LiquidCrystal_I2C könyvtárat használjukDS3231 rtc(SDA, SCL); 
void setup() { 
rtc.begin(); // 
lcd.begin(16,2); //// 2 soros 16 karakteres LCD meghatározása 
} 

void loop() { 
lcd.setCursor(0,0); 
lcd.print("Time: "); 
lcd.print(rtc.getTimeStr()); 
lcd.setCursor(0,1); 
lcd.print("Date: "); 
lcd.print(rtc.getDateStr()); 
delay(1000); 
} 


A mintakódot innen tudod letölteni






Megjegyzések