Bu yazıda yaygın RTC modüllerinden biri olan DS1302‘nin Arduino ile nasıl kullanılacağını öğreneceğiz.
RTC bir kısaltma, Real Time Clock demek. Yani Gerçek Zamanlı Saat. Peki böyle bir modüle neden ihtiyacımız var? Bunun iki sebebi var. İlki Arduino’nun bir kez ayarlanan saati sayabilmesi için sürekli güç almasının gerekmesi. Elektrikler kesilirse her şey gider, değil mi?
İkincisi ise Arduino mikrokontrolcüsünün saati doğru bir şekilde saymak için yeterine hassas olmaması. Evet, o kadar kabiliyetli bir mikrokontrolcü saati sayarken ciddi kaymalar yaşatabilir.
Bu sorun RTC adı verilen ve üzerlerinde CR2032 kodlu, halk arasında para pil olarak da bilinen bir pil bulunan modüllerle çözülüyor. Bilgisayarımızın anakartında da böyle bir pil görmüş olmalıyız. İşte o pil bilgisayarımız kapalıyken saati ve BIOS gibi temel ayarları hafızada tutuyor.
RTC modülü üzerindeki piliyle birlikte sürekli açık kalıyor ve Arduino’nun gücü kesilse bile saati içinden saymaya devam ediyor!
DS1302’yi Arduino’ya 5 adet pini üzerinden bağlıyoruz. VCC pini Arduino üzerinde 5V’a ve GND tahmin edebileceğimiz gibi GND’ye bağlanıyor. CLK, DAT ve RST pinleri ise Arduino’nun dijital pinlerine bağlanıyor.
Devre kurulumunu inceleyelim;
Bu tür modüller genelde pille birlikte gelmezler. Bu yüzden modülden sipariş verirken yanında bir de CR2032 kodlu pillerden sipariş etmeyi unutmamalıyız. Pili modüle takalım ve sketch koduna geçelim.
DS1302 RTC modülünü kolay bir şekilde kullanabilmek için bir kütüphane kullanmak akıllıca. Bunun için Chris Fryer‘ın VirtuabotixRTC kütüphanesini kullanıyoruz. Kütüphaneyi daha rahat kullanılması için biraz modifiye ettim ve yeniden yükledim. İndirmek için buraya tıklayın.
Aşağıdaki sketch DS1302 RTC modülünden saati okuyor ve Seri Port Ekranı’nda görüntülüyor.
Sketch’i ilk kez yüklerken RTC modülüne güncel saat ve tarihi yükleyeceğiz. Bunu sadece bir kez yapmamız yeterli. Bunun için void setup() içindeki tarih ve saat değişkenleri güncelleyip sketch’i yükleyelim.
Yükleme başarıyla tamamlandıktan sonra güncelleme yaptığımız satırların altında yer alan ve RTC.setDS1302Time( ile başlayan satırın başına // koyalım ve o satırı yorum haline getirelim. Sketch’i bu haliyle tekrar yükleyelim. Böylece Arduino her açılışta saati ayarlamayacak ve saati saymayı RTC modülüne devredecek.
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 49 50 51 52 53 54 55 56 57 |
/* DS1302 RTC Modülü Arduino'ya Nasıl Bağlanır? DS1302 RTC Modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include <virtuabotixRTC.h> // Kütüphanemizi ekliyoruz // Chris Fryer'ın virtuabotixRTC kütüphanesi int CLK = 6; // DS1302'nin CLK pini int DAT = 7; // DS1302'nin DAT pini int RST = 8; // DS1302'nin RST pini virtuabotixRTC RTC(CLK, DAT, RST); // Kütüphanemizi ayarlıyoruz void setup() { Serial.begin(9600); // Seri Port Ekranı'nı başlatıyoruz // Anlık saati buraya girin, RTC'ye doğru saati yükleyeceğiz. int yil = 2022; int ay = 1; int gun = 3; int haftanin_gunu = 1; // Pazartesi ise 1, Pazar ise 7 int saat = 19; int dakika = 54; int saniye = 0; // Alttaki satır saati yükler. 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 yukarıdaki saati geri yükler. RTC.setDS1302Time(saniye, dakika, saat, haftanin_gunu, gun, ay, yil); } void loop() { RTC.updateTime(); // Güncel saati bu satırda okuyoruz if (RTC.dayofmonth < 10) {Serial.print("0");} // 3. ayı 03 olarak gösterelim Serial.print(RTC.dayofmonth); // Günü yazalım Serial.print("."); if (RTC.month < 10) {Serial.print("0");} Serial.print(RTC.month); // Ayı yazalım Serial.print("."); Serial.print(RTC.year); // Yılı yazalım Serial.print(" | "); if (RTC.hours < 10) {Serial.print("0");} Serial.print(RTC.hours); // Saati yazalım Serial.print(":"); if (RTC.minutes < 10) {Serial.print("0");} Serial.print(RTC.minutes); // Dakikayı yazalım Serial.print(":"); if (RTC.seconds < 10) {Serial.print("0");} Serial.println(RTC.seconds); // Saniyeyi yazalım delay(100); // Biraz bekleyelim } |