Bu yazıda DS3231 RTC modülünün özelliklerini inceleyecek ve Arduino ile nasıl kullanabileceğimizi öğreneceğiz.
Önceki yazılarımız DS1302 ve DS1307‘de bir RTC modülüne neden ihtiyacımız olduğunu açıklamıştık. Kısaca açıklamak gerekirse RTC, cihaz kapalıyken bile saat ve tarihi hafızada tutabilen ve kendine ait bir pille çalışan modüllere verilen isim.
RTC modülleri hem ana sistem üzerindeki işlem yükünü azaltır, hem de zamanı çok daha hassas bir doğrulukla tutar. Üstelik bunu çok düşük güç tüketimi ile ana sistemin gücü kesildiğinde dahi çalışmaya devam edebilecek şekilde yapar.
DS3231 modülü piyasadaki en hassas RTC modüllerinden biridir. Sahip olduğu I2C bağlantı arayüzü ile Arduino’ya kolaylıkla bağlanabilir. Ancak ülkemizde satılan ucuz modüllerin çoğunun orijinal olmayan çiplerle üretildiklerini ve gerçek DS3231 kadar hassas olamayacağını üzülerek hatırlatmamız gerek.
DS3231’i Arduino’ya sadece 4 adet pin üzerinden bağlıyoruz. VCC pini Arduino üzerinde 5V’a ve GND de GND pinine bağlanıyor. SDA ve SCL pinleri ise Arduino’nun ilgili pinlerine veya sırasıyla A4 (SDA) ve A5 (SCL) pinlerine bağlanıyor.
Devre kurulumunu inceleyelim;
DS3231 RTC modülünü yine bir kütüphane ile kullanıyoruz. Bunun için Hideaki Tai‘nin DS323x kütüphanesini kullanıyoruz. Bu kütüphane Arduino’nun kendi kütüphane kataloğunda yer alıyor ve Araçlar > Kütüphaneleri Yönet… menüsünden adıyla aratılıp kurulabilir.
Aşağıdaki sketch DS3231 RTC modülünden saati okuyor ve Seri Port Ekranı’nda görüntülüyor.
RTC modülüne pili takıp ilk kez kullanırken bir defalığına güncel zamanı yüklememiz gerekiyor. Sıralama yıl, ay, gün, saat, dakika ve saniye şeklinde.
rtc.now(DateTime(2022, 01, 10, 21, 8, 00));
Projelerimizde saati sadece bir kez yüklemeliyiz. Geri kalan işi RTC modülümüz kendi başına halledecektir. Bu yüzden kodu yukarıdaki satırla sadece bir kez çalıştırmalı, ardından bu kodu başına // koyup yorum haline getirerek tekrar yüklemeliyiz.
Bunu yapmazsak sketch her açılışta ilk girdiğimiz saati yükler ve doğal olarak saatimiz yanlış ayarlanmış olur.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
/* DS3231 RTC Modülü Arduino ile Nasıl Kullanılır? DS3231 RTC Modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include <DS323x.h> // Kütüphanemizi ekliyoruz // Hideaki Tai'nin DS323x kütüphanesi DS323x rtc; // Kütüphanemiz başlatılıyor void setup() { Serial.begin(9600); // Seri Port Ekranı'nı başlatıyoruz Wire.begin(); // Wire kütüphanesini başlatıyoruz delay(1000); // Bağlantı kurulana kadar bekleyelim rtc.attach(Wire); // Kütüphaneyi I2C'ye bağlayalım // Alttaki satır girdiğimiz saat ve tarihi alarak RTC'yi ayarlar // Bu halde bir defalığına Arduino'ya yükledikten sonra satırı başına // // koyarak yorum yapıp tekrar yüklemeliyiz. // Aksi halde her açılışta tekrar saat yüklemeye çalışır. rtc.now(DateTime(2022, 01, 10, 21, 8, 00)); } void loop() { DateTime now = rtc.now(); // Güncel saati bu satırda okuyoruz if (now.day() < 10) {Serial.print("0");} // 3. ayı 03 olarak gösterelim Serial.print(now.day()); // Günü yazalım Serial.print("."); if (now.month() < 10) {Serial.print("0");} Serial.print(now.month()); // Ayı yazalım Serial.print("."); Serial.print(now.year()); // Yılı yazalım Serial.print(" | "); if (now.hour() < 10) {Serial.print("0");} Serial.print(now.hour()); // Saati yazalım Serial.print(":"); if (now.minute() < 10) {Serial.print("0");} Serial.print(now.minute()); // Dakikayı yazalım Serial.print(":"); if (now.second() < 10) {Serial.print("0");} Serial.println(now.second()); // Saniyeyi yazalım delay(1000); // Biraz bekleyelim } |