Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Dijital Saat Projesi: DS3231 ve TM1637 ile Alarmlı Saat

Dijital Saat Projesi: DS3231 ve TM1637 ile Alarmlı Saat
Kısa cevap

Dijital saat projesi; Arduino Uno, DS3231 gerçek zaman saati modülü ve TM1637 dört haneli 7 segment ekranla yapılır. DS3231 zamanı düğme pille elektrik kesilse de tutar, Arduino saati ve dakikayı ekrana yazar. Bir pasif buzzer ve butonla, belirlediğiniz saatte çalan ve butonla susan bir alarm eklenir.

Kendi yaptığınız bir saatin masanızda çalışması, okul projeleri arasında hem öğretici hem de kullanışlı bir sonuçtur. Bu yazıda Arduino Uno, DS3231 saat modülü ve TM1637 ekranla dijital bir saat kuruyoruz. Saatin nasıl ayarlandığını, alarmın nasıl eklendiğini ve zamanın nasıl bu kadar doğru tutulduğunu anlatıyoruz.

Dijital saat projesi nedir?

Dijital saat projesi, zamanı bir saat yongasından okuyup sayılarla gösteren, mikrodenetleyicili bir elektronik saattir. Bizim saatimizde zamanı DS3231 tutar, Arduino okur ve TM1637 ekrana "07:30" gibi yazar. Alarm da Arduino'nun koduna eklenir.

DS3231 zamanı nasıl doğru tutar?

DS3231, içindeki sıcaklık dengelemeli kristal osilatör sayesinde zamanı çok doğru tutar. Osilatör saniyede 32.768 kez titreşir. Bu sayı 2'nin 15. kuvvetidir; 15 kez ikiye bölününce tam 1 saniye elde edilir.

Kristalin hızı sıcaklıkla biraz değişir. DS3231 sıcaklığı ölçer ve bu kaymayı kendisi düzeltir. Üretici, 0-40 °C arasında ±2 ppm doğruluk verir. Bu, günde yaklaşık 0,17 saniye, yılda yaklaşık 1 dakika sapma demektir: 0,000002 × 31.536.000 s ≈ 63 s. Modülün ayrıntıları DS3231 RTC modülü yazısında.

Arduino'nun kendi millis() sayacı da zamanı sayar, ama elektrik kesilince sıfırlanır. DS3231 ise düğme pil sayesinde Arduino kapalıyken de saymaya devam eder.

TM1637 mi 16x2 LCD mi kullanılmalı?

Yalnızca saat ve dakika gösterecekseniz TM1637 daha uygundur; tarih ve yazı da göstermek istiyorsanız 16x2 LCD seçilmelidir.

ÖzellikTM1637 (4 hane)16x2 LCD (I2C)
Gösterdiği4 rakam ve iki nokta2 satır, 16'şar karakter
OkunabilirlikKaranlıkta ve uzaktan iyiYakından iyi, arka ışıklı
BağlantıCLK ve DIO (2 pin)SDA ve SCL (A4, A5)
KütüphaneTM1637DisplayLiquidCrystal_I2C

Bu yazıda TM1637 kullanıyoruz. LCD sürümü için 16x2 LCD bağlantısı yazısına bakabilirsiniz; DS3231 ile aynı I2C hattını paylaşır.

Hangi malzemeler gerekir?

Dijital saat için Arduino Uno, DS3231 modülü, TM1637 ekran, pasif buzzer, buton, breadboard ve jumper kablo yeterlidir.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino Uno R3 (CH340)1Zamanı okur, ekrana yazar, alarmı yönetir
DS3231 RTC modülü1Zamanı doğru tutar, pil sayesinde unutmaz
TM1637 4 haneli 7 segment ekran1Saati ve dakikayı gösterir
17 mm pasif buzzer1Alarm sesini çıkarır
12×12 mm tact buton1Alarmı susturur
16x2 I2C LCD (isteğe bağlı)1Tarih ve yazı göstermek için

DS3231 modülünün pil yuvasına bir düğme pil takılır. Modülde pil şarj devresi olup olmadığını ürün sayfasından kontrol edin; varsa şarj edilebilir LIR2032 kullanın.

Devre nasıl bağlanır?

DS3231, SDA ucuyla A4'e ve SCL ucuyla A5'e; TM1637, CLK ucuyla D2'ye ve DIO ucuyla D3'e bağlanır. Buzzer D8'e, buton D4'e gider.

  • DS3231: VCC → 5V, GND → GND, SDA → A4, SCL → A5.
  • TM1637: VCC → 5V, GND → GND, CLK → D2, DIO → D3.
  • Pasif buzzer: Artı (+) bacağı D8'e, diğer bacağı GND'ye.
  • Buton: Bir ucu D4'e, çapraz karşısındaki ucu GND'ye.
Dijital saat bağlantı şeması: DS3231 RTC modülünün SDA ucu Arduino Uno A4 pinine, SCL ucu A5 pinine bağlı; TM1637 dört haneli 7 segment ekranın CLK ucu D2 pinine, DIO ucu D3 pinine bağlı ve ekranda 07:30 yazıyor; susturma butonu D4 ile GND arasına, pasif buzzer D8 pinine bağlı; modüllerin VCC uçları 5V'a, GND uçları GND'ye bağlı; DS3231 32.768 Hz osilatör kullanıyor ve ±2 ppm ile yılda yaklaşık 1 dakika sapıyor
DS3231 A4 ve A5'e, TM1637 D2 ve D3'e, buton D4'e, pasif buzzer D8'e bağlanır; alarm 07:30'da bir dakika öter.

TM1637, I2C'ye benzeyen ama ondan farklı bir iki telli yöntemle haberleşir. Bu yüzden A4 ve A5'e değil, herhangi iki dijital pine bağlanabilir. Ekranın yapısını 7 segment display bağlantısı yazısında anlattık.

Dijital saat adım adım nasıl yapılır?

Saat, kütüphaneler kurulup modüller bağlandıktan sonra kod yüklenerek yapılır; ilk yüklemede saat bilgisayarın saatine ayarlanır.

  1. Arduino IDE'de Kütüphane Yöneticisi'nden "RTClib" (Adafruit) ve "TM1637" (Avishay Orpaz) kütüphanelerini kurun.
  2. DS3231'e düğme pili takın ve modülleri yukarıdaki gibi bağlayın.
  3. Koddaki ALARM_SAAT ve ALARM_DAK değerlerini istediğiniz saate göre yazın.
  4. Kodu yükleyin. Ekranda saat görünmeli, iki nokta saniyede bir yanıp sönmelidir.
  5. Alarm saatinde buzzer bir dakika boyunca öter; butona basınca susar.
#include <RTClib.h>
#include <TM1637Display.h>
RTC_DS3231 rtc;
TM1637Display ekran(2, 3);           // CLK = D2, DIO = D3
const int BUZZER = 8, BUTON = 4;
const int ALARM_SAAT = 7, ALARM_DAK = 30;
bool sustur = false;

void setup() {
  pinMode(BUTON, INPUT_PULLUP);
  rtc.begin();
  if (rtc.lostPower()) rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  ekran.setBrightness(5);
}

void loop() {
  DateTime t = rtc.now();
  int deger = t.hour() * 100 + t.minute();          // 07:30 → 730
  uint8_t nokta = (t.second() % 2 == 0) ? 0b01000000 : 0;
  ekran.showNumberDecEx(deger, nokta, true);        // baştaki sıfırı gösterir

  bool alarmDakikasi = (t.hour() == ALARM_SAAT && t.minute() == ALARM_DAK);
  if (!alarmDakikasi) sustur = false;
  if (digitalRead(BUTON) == LOW) sustur = true;
  if (alarmDakikasi && !sustur) tone(BUZZER, 1000, 200);
  delay(250);
}

Saat yanlış görünüyorsa if (rtc.lostPower()) koşulunu geçici olarak silip adjust satırını tek başına bırakın ve kodu yükleyin. Saat düzelince koşulu geri ekleyip bir kez daha yükleyin. Aksi halde Arduino her açılışta saati, kodun derlendiği ana geri alır.

Hangi güvenlik kurallarına dikkat edilmeli?

Dijital saat 5 V ile çalışır ve güvenlidir; yine de şu kurallara uyun:

  • Saati yalnızca USB'den ya da 5V USB adaptörden besleyin; 220V'a hiçbir kablo bağlamayın.
  • Düğme pilleri küçük çocuklardan uzak tutun. Yutulan düğme pil çok tehlikelidir; böyle bir durumda hemen tıbbi yardım alın.
  • Şarj edilemeyen CR2032 pili şarj devresi olan bir modülde kullanmayın. Isınan ya da şişen pili çıkarın ve bir yetişkine söyleyin.
  • Kabloları değiştirmeden önce USB kablosunu çıkarın.
  • Saati kutuya yerleştirmek için delik açacaksanız bunu bir yetişkin gözetiminde yapın.

Ödevinizi nasıl sunarsınız?

Ödevinizi, saatinizin doğruluğunu birkaç gün boyunca ölçen bir deneyle sunabilirsiniz.

  • Doğruluk deneyi: Saati bir gün telefonun saatine eşitleyin. Bir hafta boyunca her gün aynı saatte farkı saniye olarak not edin.
  • Karşılaştırma: Aynı süre boyunca yalnızca millis() ile sayan ikinci bir kodun ne kadar kaydığını ölçün.
  • Elektrik kesintisi: USB'yi 10 dakika çıkarın, sonra takın. Saatin kaldığı yerden devam ettiğini gösterin.

Örnek hipotez: "DS3231 bir haftada birkaç saniyeden az kayar." Sonuçlarınızı bir tabloya ve grafiğe aktarın. Farklı renk ve boyuttaki ekranlar için Arduino LCD ve LED display kategorisine bakabilirsiniz.

Sık sorulan sorular

Ekranda neden hiçbir şey görünmüyor?

Ekran boşsa önce CLK ve DIO kablolarını kontrol edin; yerleri karışırsa ekran hiçbir şey göstermez. Kodda CLK D2, DIO D3 olarak tanımlıdır. Sonra VCC ve GND bağlantılarına bakın. setBrightness() satırının kodda olduğundan emin olun. Bazı modüllerde iki nokta ayrı bir segmenttir ve yalnızca 0b01000000 değeriyle yanar.

Saat her açılışta neden geri gidiyor?

Saat her açılışta aynı ana dönüyorsa adjust satırı her seferinde çalışıyor demektir. Bu genellikle pil takılı olmadığında ya da pil bittiğinde olur, çünkü DS3231 gücü kaybettiğini bildirir. Modüle sağlam bir düğme pil takın, saati bir kez ayarlayın. Kodda adjust satırının lostPower koşuluna bağlı kaldığını kontrol edin.

Saati 12 saatlik düzende gösterebilir miyim?

Evet, saati 12 saatlik düzende göstermek için koddaki saati dönüştürmeniz yeterlidir. Saat 0 ise 12, 12'den büyükse 12 çıkarılmış hali gösterilir. Örneğin 15:45, ekranda 3:45 olur. Öğleden önce ve sonrayı ayırmak için ek bir LED kullanabilirsiniz. DS3231'in içindeki zaman yine 24 saatlik tutulur.

Alarm saatini kodu değiştirmeden ayarlayabilir miyim?

Evet, iki buton daha ekleyerek alarm saatini kod değiştirmeden ayarlayabilirsiniz. Biri saati, diğeri dakikayı birer artırır; ekran ayar sırasında alarm saatini gösterir. Alarm saatinin elektrik kesilince unutulmaması için Arduino'nun EEPROM belleğine kaydedilmesi gerekir. Bu, başlangıç kodundan sonra güzel bir ikinci adımdır.

DS3231 sıcaklık da ölçebilir mi?

Evet, DS3231 kendi sıcaklık sensörüyle yaklaşık değerde sıcaklık ölçer; RTClib'de bunun için getTemperature() komutu vardır. Bu sensör asıl olarak kristali dengelemek için bulunur ve yonganın kendi sıcaklığını ölçer. Bu yüzden oda sıcaklığından biraz farklı olabilir. Saatinizin ekranında birkaç saniye sıcaklık göstermek için kullanılabilir.

Özet

  • Dijital saat; Arduino Uno, DS3231 saat modülü ve TM1637 ekrandan oluşur.
  • DS3231'in osilatörü saniyede 32.768 kez titreşir; ±2 ppm doğruluk, yılda yaklaşık 1 dakika sapma demektir.
  • Bağlantı: DS3231 SDA A4, SCL A5; TM1637 CLK D2, DIO D3; buzzer D8, buton D4.
  • Düğme pil sayesinde saat, Arduino kapalıyken de doğru kalır.
  • Alarm belirlenen dakika boyunca öter ve butonla susturulur.
  • Ödevde DS3231 ile millis() sayacının bir haftalık kaymasını karşılaştırın.

Bu yazıdaki ürünler

Diğer yazılar