Membuat jam dengan Arduino, OLED 0,91 ", dan DS1307 RTC

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

Membangun jam dengan Arduino, layar OLED, dan modul DS1307 Real-Time-Time (RTC) adalah proyek yang menyenangkan dan praktis. Modul RTC DS1307 menjaga waktu yang akurat bahkan ketika Arduino ditenagai, sementara OLED menyediakan antarmuka yang ramping untuk menampilkan waktu saat ini. Tutorial ini akan memandu Anda melalui proses langkah demi langkah.


Apa yang Anda Butuhkan

  1. Dewan Arduino (mis., uno, mega, nano)
  2. Tampilan 0,91 "OLED (Antarmuka I2C)
  3. DS1307 Modul RTC
  4. Papan tempat memotong papan dan kabel jumper
  5. Komputer dengan IDE Arduino diinstal
  6. Perpustakaan: Adafruit SSD1306, Adafruit GFX, dan RTCLIB

Langkah 1: Kabel komponen

OLED Display Wiring (I2C)

Pin OLED Pin Arduino
Vcc 5v
Gnd Gnd
SDA A4
Scl A5

DS1307 RTC Module Wiring (I2C)

PIN RTC Pin Arduino
Vcc 5v
Gnd Gnd
SDA A4
Scl A5

Catatan: Jika menggunakan papan Arduino dengan pin SDA dan SCL khusus (mis., Mega), hubungkan pin OLED dan RTC SDA/SCL ke yang malah.


Langkah 2: Memasang pustaka yang diperlukan

Untuk bekerja dengan layar OLED dan DS1307 RTC, Anda memerlukan perpustakaan berikut:

  1. Adafruit SSD1306 (untuk OLED)
  2. Adafruit GFX (Perpustakaan Grafis untuk OLED)
  3. Rtclib (Untuk fungsionalitas RTC)

Menginstal perpustakaan

  1. Buka Ide Arduino.
  2. Pergi ke Sketsa> Sertakan Perpustakaan> Kelola Perpustakaan.
  3. Cari dan instal:
    • "Adafruit SSD1306"
    • "Perpustakaan Adafruit GFX"
    • "Rtclib"

Langkah 3: Mengunggah kode

Inilah kode untuk menampilkan waktu saat ini pada OLED menggunakan modul DS1307 RTC:

Kode contoh

#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
}

Langkah 4: Menyesuaikan waktu

Jika RTC tidak berjalan atau waktu perlu diperbarui, baris berikut di setup() Fungsi mengatur RTC ke waktu saat ini:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) Dan F(__TIME__) adalah makro yang secara otomatis mengatur tanggal dan waktu dari komputer Anda saat mengunggah kode.

Untuk mengatur waktu tertentu secara manual, gunakan:

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

Langkah 5: Menyesuaikan tampilan

Anda dapat menyesuaikan tampilan jam dengan:

  1. Mengubah ukuran teks: Menggunakan display.setTextSize() untuk menyesuaikan ukuran font.
  2. Menambahkan Grafik: Gunakan perpustakaan Adafruit GFX untuk menggambar bentuk seperti garis atau persegi panjang.
  3. Waktu pemformatan: Tambahkan format AM/PM atau 24 jam sesuai kebutuhan.

Contoh: Menambahkan AM/PM

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);

Pemecahan masalah

  1. OLED Tidak menampilkan:

    • Pastikan alamat I2C cocok (umumnya 0x3C atau 0x3D).
    • Periksa koneksi kabel.
  2. RTC tidak ditemukan:

    • Verifikasi koneksi SDA dan SCL.
    • Pastikan baterai RTC dimasukkan dengan benar.
  3. Waktu yang salah:

    • Menggunakan rtc.adjust() untuk mengatur waktu yang benar.

Aplikasi

  1. Jam meja DIY
  2. Pengatur waktu dan alarm
  3. Jam berkemampuan IoT dengan sensor tambahan
  4. Proyek Pendidikan

Kesimpulan

Dengan menggabungkan Arduino, OLED 0,91 ", dan DS1307 RTC, Anda dapat membuat jam yang akurat dan menarik secara visual. Dengan beberapa tweak, Anda dapat menyesuaikan jam yang sesuai dengan kebutuhan Anda atau mengintegrasikannya ke dalam proyek yang lebih besar. Eksperimen dengan fitur tambahan tambahan Seperti alarm atau sinkronisasi internet untuk membawa proyek Anda ke tingkat berikutnya!

Tinggalkan komentar

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.