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ć
- Board Arduino (np. Uno, Mega, Nano)
- 0,91 "wyświetlacz OLED (Interfejs I2C)
- Moduł RTC DS1307
- Druty chleba i skoczków
- Komputer z zainstalowanym Arduino IDE
- 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:
- Adafruit SSD1306 (dla OLED)
- Adafruit GFX (Biblioteka graficzna dla OLED)
- Rtclib (dla funkcji RTC)
Instalowanie bibliotek
- Otwórz Arduino IDE.
- Idź do Szkic> Dołącz bibliotekę> Zarządzaj bibliotekami.
- 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__)
IF(__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:
-
Zmieniający rozmiar tekstu: Używać
display.setTextSize()
Aby dostosować rozmiar czcionki. - Dodawanie grafiki: Użyj biblioteki Adafruit GFX, aby narysować kształty takie jak linie lub prostokąty.
- 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
-
OLED Nie wyświetla się:
- Upewnij się, że adresy adresu I2C (powszechnie
0x3C
Lub0x3D
). - Sprawdź połączenia okablowania.
- Upewnij się, że adresy adresu I2C (powszechnie
-
RTC nie znaleziono:
- Sprawdź połączenia SDA i SCL.
- Upewnij się, że akumulator RTC jest poprawnie włożony.
-
Nieprawidłowy czas:
- Używać
rtc.adjust()
Aby ustawić prawidłowy czas.
- Używać
Zastosowania
- Zegar biurka DIY
- Timery i alarmy
- Zegar z obsługą IoT z dodatkowymi czujnikami
- 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!