Tworzenie zegara z Arduino, OLED 0,91 "i DS1307 RTC

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

Budowanie zegara z Arduino, wyświetlaczem OLED i modułem ds1307 zegar w czasie rzeczywistym (RTC) to zabawny i praktyczny projekt. Moduł RTC DS1307 utrzymuje dokładny czas, nawet gdy Arduino jest wyłączone, podczas gdy OLED zapewnia elegancki interfejs do wyświetlania bieżącego czasu. Ten samouczek poprowadzi Cię krok po kroku proces.


Czego będziesz potrzebować

  1. Board Arduino (np. Uno, Mega, Nano)
  2. 0,91 "wyświetlacz OLED (Interfejs I2C)
  3. Moduł RTC DS1307
  4. Druty chleba i skoczków
  5. Komputer z zainstalowanym Arduino IDE
  6. Biblioteki: Adafruit SSD1306, Adafruit GFX i RTCLIB

Krok 1: Okablowanie komponentów

Okablowanie wyświetlania OLED (I2C)

PIN OLED PIN Arduino
VCC 5v
GND GND
SDA A4
Scl A5

DS1307 Moduł RTC (I2C)

Pin RTC PIN Arduino
VCC 5v
GND GND
SDA A4
Scl A5

Notatka: Jeśli korzystasz z płyty Arduino z dedykowanymi pinami SDA i SCL (np. Mega), zamiast tego podłącz do nich piny OLED i RTC SCL.


Krok 2: Instalowanie wymaganych bibliotek

Aby pracować z OLED Display i DS1307 RTC, potrzebujesz następujących bibliotek:

  1. Adafruit SSD1306 (dla OLED)
  2. Adafruit GFX (Biblioteka graficzna dla OLED)
  3. Rtclib (dla funkcji RTC)

Instalowanie bibliotek

  1. Otwórz Arduino IDE.
  2. Idź do Szkic> Dołącz bibliotekę> Zarządzaj bibliotekami.
  3. Wyszukaj i zainstaluj:
    • „Adafruit SSD1306”
    • „Adafruit GFX Library”
    • „RTCLIB”

Krok 3: Przesłanie kodu

Oto kod wyświetlania bieżącego czasu na OLED za pomocą modułu RTC DS1307:

Przykładowy kod

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

Krok 4: Dostosowanie czasu

Jeśli RTC nie jest uruchomiony lub czas musi zostać zaktualizowany, następujący wiersz w setup() Funkcja ustawia RTC na bieżący czas:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) I F(__TIME__) to makra, które automatycznie ustawiają datę i godzinę z komputera podczas przesyłania kodu.

Aby ustawić określony czas ręcznie, użyj:

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

Krok 5: Dostosowywanie wyświetlacza

Możesz dostosować wyświetlacz zegara przez:

  1. Zmieniający rozmiar tekstu: Używać display.setTextSize() Aby dostosować rozmiar czcionki.
  2. Dodawanie grafiki: Użyj biblioteki Adafruit GFX, aby narysować kształty takie jak linie lub prostokąty.
  3. Czas formatowania: Dodaj AM/PM lub 24-godzinny format w razie potrzeby.

Przykład: dodanie 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);

Rozwiązywanie problemów

  1. OLED Nie wyświetla się:

    • Upewnij się, że adresy adresu I2C (powszechnie 0x3C Lub 0x3D).
    • Sprawdź połączenia okablowania.
  2. RTC nie znaleziono:

    • Sprawdź połączenia SDA i SCL.
    • Upewnij się, że akumulator RTC jest poprawnie włożony.
  3. Nieprawidłowy czas:

    • Używać rtc.adjust() Aby ustawić prawidłowy czas.

Zastosowania

  1. Zegar biurka DIY
  2. Timery i alarmy
  3. Zegar z obsługą IoT z dodatkowymi czujnikami
  4. Projekty edukacyjne

Wniosek

Łącząc Arduino, OLED 0,91 "i DS1307 RTC, możesz stworzyć dokładny i atrakcyjny wizualnie zegar. Przy kilku poprawkach możesz dostosować zegar do potrzeb lub zintegrować go z większymi projektami. Eksperymentuj z dodatkowymi funkcjami Jak alarmy lub synchronizacja internetowa, aby przenieść Twój projekt na wyższy poziom!

Zostaw komentarz

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.