Arduino, 0.91 "OLED ve DS1307 RTC ile bir saat oluşturmak

Creating a Clock with the Arduino, a 0.91" OLED, and the DS1307 RTC

Arduino, OLED ekran ve DS1307 Gerçek Zamanlı Saat (RTC) modülü ile bir saat oluşturmak eğlenceli ve pratik bir projedir. DS1307 RTC modülü, Arduino güçlendirildiğinde bile doğru bir zaman tutarken, OLED mevcut zamanı görüntülemek için şık bir arayüz sağlar. Bu öğretici, adım adım işlem boyunca size rehberlik edecektir.


Ne İhtiyacınız Olacak

  1. Arduino Kurulu (örneğin, UNO, Mega, Nano)
  2. 0.91 "OLED ekran (I2C arayüzü)
  3. DS1307 RTC Modülü
  4. Breadboard ve jumper telleri
  5. Arduino IDE kurulu bir bilgisayar
  6. Kütüphaneler: Adafruit SSD1306, Adafruit GFX ve RTCLIB

1. Adım: Bileşenlerin kablolanması

OLED Ekran Kabloları (I2C)

OLED PIN Arduino pimi
VCC 5V
Gnd Gnd
SDA A4
Scl A5

DS1307 RTC Modül Kablolama (I2C)

RTC PIN Arduino pimi
VCC 5V
Gnd Gnd
SDA A4
Scl A5

Not: Özel SDA ve SCL pimleri (örn. Mega) ile bir Arduino kartı kullanıyorsanız, OLED ve RTC SDA/SCL pinlerini bunun yerine bunlara bağlayın.


2. Adım: Gerekli kütüphanelerin yüklenmesi

OLED ekran ve DS1307 RTC ile çalışmak için aşağıdaki kütüphanelere ihtiyacınız var:

  1. Adafruit SSD1306 (OLED için)
  2. Adafruit GFX (OLED için Grafik Kütüphanesi)
  3. Rtclib (RTC işlevselliği için)

Kütüphaneler yükleme

  1. Arduino IDE'yi açın.
  2. Gidip gelmek Eskiz> Kütüphane Ekle> Kütüphaneleri Yönetin.
  3. Arayın ve yükleyin:
    • "Adafruit SSD1306"
    • "Adafruit GFX Kütüphanesi"
    • "Rtclib"

Adım 3: Kodu yükleme

DS1307 RTC modülünü kullanarak OLED'de geçerli saati görüntüleyen kod:

Örnek Kodu

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

// OLED display width and height
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Create an instance of the RTC
RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);

  // Initialize the OLED display
  if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  display.clearDisplay();

  // Initialize the RTC
  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  // Check if the RTC is running
  if (!rtc.isrunning()) {
    Serial.println("RTC is NOT running! Setting the time...");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  DateTime now = rtc.now(); // Get the current time

  // Clear the display
  display.clearDisplay();

  // Display the time
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.print(now.hour(), DEC);
  display.print(":");
  if (now.minute() < 10) {
    display.print("0");
  }
  display.print(now.minute(), DEC);

  // Display the date
  display.setTextSize(1);
  display.setCursor(0, 20);
  display.print(now.day(), DEC);
  display.print("/");
  display.print(now.month(), DEC);
  display.print("/");
  display.print(now.year(), DEC);

  // Show the display buffer
  display.display();

  delay(1000); // Update every second
}

4. Adım: Zamanı ayarlamak

RTC çalışmıyorsa veya zamanın güncellenmesi gerekiyorsa, setup() Fonksiyon RTC'yi geçerli zamana ayarlar:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) Ve F(__TIME__) kodu yüklerken bilgisayarınızdan tarih ve saati otomatik olarak ayarlayan makrolardır.

Belirli bir zamanı manuel olarak ayarlamak için:

rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS

Adım 5: Ekranı Özelleştirme

Saat ekranını şu şekilde özelleştirebilirsiniz:

  1. Metin Boyutunu Değiştirme: Kullanmak display.setTextSize() Yazı tipi boyutunu ayarlamak için.
  2. Grafik ekleme: Çizgiler veya dikdörtgenler gibi şekiller çizmek için Adafruit GFX kütüphanesini kullanın.
  3. Biçimlendirme süresi: Gerektiğinde AM/PM veya 24 saatlik format ekleyin.

Örnek: AM/PM ekleme

int hour = now.hour();
String period = "AM";
if (hour >= 12) {
  period = "PM";
  if (hour > 12) hour -= 12;
}
if (hour == 0) hour = 12;

display.print(hour);
display.print(":");
if (now.minute() < 10) {
  display.print("0");
}
display.print(now.minute());
display.print(" ");
display.print(period);

Sorun giderme

  1. OLED görüntülemiyor:

    • I2C adres eşleşmelerini sağlayın (yaygın olarak 0x3C veya 0x3D).
    • Kablo bağlantılarını kontrol edin.
  2. RTC bulunamadı:

    • SDA ve SCL bağlantılarını doğrulayın.
    • RTC pilinin doğru yerleştirildiğinden emin olun.
  3. Yanlış Zaman:

    • Kullanmak rtc.adjust() doğru zamanı ayarlamak için.

Başvuru

  1. DIY Masa Saati
  2. Zamanlayıcılar ve alarmlar
  3. Ek sensörlerle IoT özellikli saat
  4. Eğitim projeleri

Çözüm

Arduino, 0.91 "OLED ve DS1307 RTC'yi birleştirerek, doğru ve görsel olarak çekici bir saat oluşturabilirsiniz. Birkaç ince ayar ile saati ihtiyaçlarınıza uygun hale getirebilir veya daha büyük projelere entegre edebilirsiniz. Projenizi bir sonraki seviyeye taşımak için alarmlar veya internet senkronizasyonu gibi!

Yorum bırak

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.