DS3231 RTC modülü Arduino'ya I2C ile, yani dört kabloyla bağlanır: VCC 5V'a, GND GND'ye, SDA A4'e, SCL A5'e. Saat RTClib kütüphanesiyle bir kez ayarlanır, düğme pil sayesinde elektrik kesilse de saymaya devam eder. Sıcaklık dengelemeli kristali sayesinde DS1307'den çok daha az kayar.
Arduino kapandığında ya da yeniden başladığında saati unutur; kendi içindeki millis() sayacı yalnızca kart açık kaldığı sürece ilerler. Saat, takvim, zamanlı sulama ya da veri kaydı gibi projelerde gerçek zamanı tutacak ayrı bir parça gerekir. Bu yazıda DS3231 RTC modülünün nasıl bağlandığını, pilin nasıl seçildiğini, RTClib ile saatin nasıl ayarlandığını ve DS1307'den farkını anlatıyoruz.
DS3231 RTC modülü nedir?
DS3231 RTC modülü, saati, dakikayı, saniyeyi ve tarihi kendi başına sayan, düğme pil sayesinde ana güç kesildiğinde de çalışmaya devam eden bir gerçek zaman saati (Real Time Clock) kartıdır. Mikrodenetleyici zamanı istediğinde I2C hattı üzerinden okur.
DS3231'i öne çıkaran özellik, kristalin entegre içinde bulunması ve sıcaklığa göre otomatik olarak düzeltilmesidir. Veri sayfasına göre 0–40°C aralığında doğruluk ±2 ppm'dir; bu, yılda yaklaşık bir dakikalık sapmaya karşılık gelir. Entegre 2,3–5,5V aralığında çalıştığı için hem 5V Arduino hem de 3,3V ESP32 ile kullanılabilir.
Yaygın modüllerde DS3231'in yanında 24C32 EEPROM hafıza da bulunur. DS3231 hassas RTC ve 24C32 hafıza modülü bu kartın tipik örneğidir; EEPROM'u küçük ayarları ya da kayıtları saklamak için kullanabilirsiniz.
DS3231 Arduino'ya nasıl bağlanır?
DS3231 modülü Arduino Uno'ya dört kabloyla bağlanır: VCC 5V'a, GND GND'ye, SDA A4'e ve SCL A5'e. Modülün üzerindeki 32K ve SQW pinleri basit saat okuma için gerekmez.
| DS3231 pini | Arduino Uno | Arduino Mega | ESP32 |
|---|---|---|---|
| VCC | 5V | 5V | 3V3 |
| GND | GND | GND | GND |
| SDA | A4 | 20 | GPIO21 |
| SCL | A5 | 21 | GPIO22 |
- Modülün pil yuvasına düğme pili takın ve artı (+) yüzün yukarı baktığından emin olun.
- Kart USB'den ayrıyken VCC'yi 5V'a, GND'yi GND'ye bağlayın.
- SDA'yı A4'e, SCL'yi A5'e bağlayın. Erkek pinli modülü Uno'ya bağlamak için erkek-dişi jumper kablo kullanabilirsiniz.
- Arduino IDE'de Kütüphane Yöneticisi'nden Adafruit'in RTClib kütüphanesini kurun.
- Aşağıdaki örnek kodu yükleyin ve Seri Monitör'ü 9600 baud ile açın.
DS3231'in I2C adresi 0x68'dir; modüldeki EEPROM ise genellikle 0x57 adresinde görünür. Aynı hatta başka cihazlar bağlayacaksanız adres çakışmasına dikkat edin. I2C hattının çalışma mantığını I2C nedir yazımızda ayrıntılı anlattık.
DS3231'de hangi pil kullanılır?
DS3231 modülleri genellikle 2032 boyutunda 3V'luk bir düğme pille çalışır; ancak kartınızda şarj devresi olup olmadığına göre CR2032 ya da şarj edilebilir LIR2032 seçilmelidir. Yaygın ZS-042 tipi kartlarda pili şarj etmeye yönelik bir direnç ve diyot bulunur.
Şarj edilemeyen CR2032 bu devreye takıldığında pile akım basılmaya çalışılır; bu da pilin ömrünü kısaltabilir ve şişmesine yol açabilir. Kartınızda bu devre varsa LIR2032 kullanın ya da CR2032 kullanacaksanız şarj direncini devreden çıkarın. Şarj devresi olmayan kartlarda Orion CR2032 3V lityum düğme pil doğrudan kullanılabilir. Düğme pil türleri ve kodlarını CR2032 pil nedir yazımızda karşılaştırdık.
DS3231 saati nasıl ayarlanır?
DS3231'in saati en kolay şekilde RTClib kütüphanesinin adjust() fonksiyonuyla, kodun derlendiği bilgisayar saatine göre ayarlanır. Aşağıdaki kod, modül gücünü kaybetmişse saati bir kez ayarlar, ardından her saniye tarihi, saati ve modülün iç sıcaklığını yazdırır.
#include <RTClib.h>
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("DS3231 bulunamadi");
while (true);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime an = rtc.now();
Serial.print(an.day()); Serial.print('.');
Serial.print(an.month()); Serial.print('.');
Serial.print(an.year()); Serial.print(' ');
Serial.print(an.hour()); Serial.print(':');
Serial.print(an.minute()); Serial.print(':');
Serial.print(an.second());
Serial.print(" Sicaklik: ");
Serial.println(rtc.getTemperature());
delay(1000);
}
__DATE__ ve __TIME__ derleme anının tarih ve saatidir; yükleme birkaç saniye sürdüğü için saat birkaç saniye geri başlar. Saati elle ayarlamak isterseniz rtc.adjust(DateTime(2026, 11, 9, 14, 30, 0)); satırını bir kez çalıştırın, sonra bu satırı silip kodu yeniden yükleyin. Aksi hâlde kart her açıldığında saat aynı ana geri döner.
Saati bir ekranda göstermek isterseniz LCD1602 mavi ekran ve I2C arayüz modülü aynı SDA ve SCL hattına bağlanabilir. Ekran bağlantısını 16x2 LCD ekran Arduino bağlantısı yazımızda anlattık.
DS1307 ile DS3231 arasındaki fark nedir?
DS1307 ile DS3231 arasındaki temel fark doğruluktur: DS3231 sıcaklık dengelemeli dahili kristal kullanır, DS1307 ise dışarıdaki 32,768 kHz kristale bağlıdır ve sıcaklık değiştikçe daha fazla kayar. İki entegre de I2C ile haberleşir ve aynı 0x68 adresini kullanır; bu yüzden aynı hatta birlikte kullanılamaz.
| Özellik | DS3231 | DS1307 |
|---|---|---|
| Kristal | Entegre içinde, sıcaklık dengelemeli | Harici 32,768 kHz |
| Doğruluk | ±2 ppm (0–40°C) | Kristale ve sıcaklığa bağlı |
| Besleme | 2,3–5,5V | 4,5–5,5V |
| Alarm | 2 alarm | Yok |
| Sıcaklık ölçümü | Var | Yok |
| Ek RAM | Yok | 56 bayt pil destekli RAM |
| RTClib sınıfı | RTC_DS3231 | RTC_DS1307 |
DS1307 yalnızca 5V ile çalıştığı için 3,3V sistemlerde doğrudan kullanılamaz. Kısa süreli projelerde ve uygun fiyatlı çözümlerde DS1307 RTC modülü (24C32 bellekli) iş görür; uzun süre kaymadan çalışması gereken saatlerde DS3231 tercih edilir. Diğer RTC ve sensör kartları mağazamızın Arduino sensör ve modüller kategorisinde bulunur.
Sık sorulan sorular
DS3231 elektrik kesilince saati unutur mu?
Hayır, pil takılı ve dolu olduğu sürece DS3231 elektrik kesildiğinde de saymaya devam eder. Ana besleme gittiğinde entegre otomatik olarak pile geçer ve bu sırada çok az akım çeker. Pil bitmişse ya da takılı değilse saat sıfırlanır; RTClib'deki lostPower() fonksiyonu bu durumu algılar. Saat sık sık sıfırlanıyorsa önce pilin gerilimini ve yuvadaki temasını kontrol edin.
DS3231 ESP32 ile kullanılır mı?
Evet, DS3231 2,3–5,5V aralığında çalıştığı için ESP32 ile doğrudan kullanılabilir. Modülün VCC pinini ESP32'nin 3V3 pinine bağlayın; SDA için GPIO21, SCL için GPIO22 varsayılan pinlerdir. Modülü 3,3V ile beslediğinizde hat da 3,3V'a çekilir ve seviye dönüştürücü gerekmez. Kod, Arduino Uno'dakiyle aynıdır; RTClib ESP32'yi destekler.
DS3231 saati neden ileri ya da geri gidiyor?
En sık neden, saatin yanlış ayarlanmasıdır; doğruluk sorunu değil. adjust() satırı kodda kaldıysa kart her açıldığında saat derleme anına döner. Bu satırın yalnızca lostPower() koşulunda çalıştığından emin olun. Yılda bir dakikayı aşan sapma görüyorsanız modülün aşırı sıcak bir ortamda olup olmadığını ve entegrenin gerçekten DS3231 olup olmadığını kontrol edin.
DS3231 modülündeki SQW pini ne işe yarar?
SQW pini, ayarlanabilir frekansta kare dalga ya da alarm anında kesme (interrupt) sinyali verir. Alarm modunda, belirlediğiniz saatte bu pin LOW'a çekilir ve mikrodenetleyiciyi uykudan uyandırabilir. Bu özellik pille çalışan veri kaydedicilerde enerji tasarrufu sağlar. Basit saat okuma için SQW ve 32K pinlerini bağlamanız gerekmez.
DS3231 sıcaklık sensörü olarak kullanılır mı?
Sınırlı ölçüde kullanılabilir; DS3231'in içindeki sensör kristali dengelemek için tasarlanmıştır ve veri sayfasına göre doğruluğu ±3°C'dir. Çözünürlüğü 0,25°C olsa da ölçtüğü değer entegrenin kendi sıcaklığıdır. Ortam sıcaklığını kabaca izlemek için yeterlidir. Hassas ölçüm gereken projelerde DS18B20 ya da DHT22 gibi ayrı bir sensör kullanın.
Özet
- DS3231 RTC modülü Arduino Uno'ya VCC–5V, GND–GND, SDA–A4 ve SCL–A5 olarak bağlanır.
- Saat RTClib'in
adjust()fonksiyonuyla bir kez ayarlanır; satır yalnızcalostPower()koşulunda çalışmalıdır. - Şarj devreli kartlarda LIR2032, şarj devresi olmayan kartlarda CR2032 kullanılır.
- DS3231 sıcaklık dengelemeli kristali sayesinde 0–40°C'de ±2 ppm doğruluk sunar; DS1307 daha fazla kayar.
- DS3231 2,3–5,5V ile çalıştığı için ESP32 ile de doğrudan kullanılabilir.
