Das Erstellen einer Uhr mit einem Arduino, einem OLED-Display und dem RTC-Modul (DS1307) ist ein lustiges und praktisches Projekt. Das DS1307 RTC -Modul hält eine genaue Zeit, selbst wenn der Arduino ausgeschaltet wird, während die OLED eine schlanke Schnittstelle zum Anzeigen der aktuellen Zeit bietet. Dieses Tutorial führt Sie Schritt für Schritt durch den Prozess.
Was Sie brauchen werden
- Arduino Board (z. B. Uno, Mega, Nano)
- 0,91 "OLED -Anzeige (I2C -Schnittstelle)
- DS1307 RTC -Modul
- Breadboard- und Jumper -Drähte
- Ein Computer mit der Arduino -IDE installiert
- Bibliotheken: Adafruit SSD1306, Adafruit GFX und RTCLIB
Schritt 1: Verkabelung der Komponenten
OLED -Displaykabel (I2C)
OLED -Stift | Arduino Pin |
---|---|
VCC | 5v |
GND | GND |
SDA | A4 |
Scl | A5 |
DS1307 RTC -Modulverkabelung (I2C)
RTC Pin | Arduino Pin |
---|---|
VCC | 5v |
GND | GND |
SDA | A4 |
Scl | A5 |
Notiz: Wenn Sie ein Arduino -Board mit dedizierten SDA- und SCL -Stiften (z. B. Mega) verwenden, verbinden Sie stattdessen die OLED- und RTC -SDA/SCL -Stifte.
Schritt 2: Installation der erforderlichen Bibliotheken
Um mit dem OLED -Display und DS1307 RTC zu arbeiten, benötigen Sie die folgenden Bibliotheken:
- Adafruit SSD1306 (für OLED)
- Adafruit GFX (Grafikbibliothek für OLED)
- RTCLIB (für RTC -Funktionalität)
Bibliotheken installieren
- Öffnen Sie die Arduino -IDE.
- Gehen zu Skizze> Bibliothek einschließen> Bibliotheken verwalten.
- Suche nach und installieren:
- "Adafruit SSD1306"
- "Adafruit GFX Library"
- "Rtclib"
Schritt 3: Hochladen des Code
Hier ist der Code, mit dem die aktuelle Zeit auf dem OLED mit dem DS1307 RTC -Modul angezeigt wird:
Beispielcode
#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
}
Schritt 4: Anpassung der Zeit
Wenn der RTC nicht ausgeführt wird oder die Zeit aktualisiert werden muss, die folgende Zeile in der setup()
Die Funktion setzt den RTC auf die aktuelle Zeit:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
UndF(__TIME__)
sind Makros, die das Datum und die Uhrzeit automatisch von Ihrem Computer von Ihrem Computer festlegen, wenn Sie den Code hochladen.
Um eine bestimmte Zeit manuell festzulegen, verwenden Sie:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Schritt 5: Anpassen der Anzeige
Sie können die Uhr -Anzeige anpassen nach:
-
Textgröße ändern: Verwenden
display.setTextSize()
um die Schriftgröße einzustellen. - Grafik hinzufügen: Verwenden Sie die Adafruit GFX -Bibliothek, um Formen wie Linien oder Rechtecke zu zeichnen.
- Formatierungszeit: Fügen Sie nach Bedarf AM/PM- oder 24-Stunden-Format hinzu.
Beispiel: Hinzufügen von 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);
Fehlerbehebung
-
OLED nicht angezeigt:
- Stellen Sie sicher, dass die I2C -Adresse übereinstimmt (häufig
0x3C
oder0x3D
). - Überprüfen Sie die Verkabelungsverbindungen.
- Stellen Sie sicher, dass die I2C -Adresse übereinstimmt (häufig
-
RTC nicht gefunden:
- Überprüfen Sie die SDA- und SCL -Verbindungen.
- Stellen Sie sicher, dass die RTC -Batterie korrekt eingefügt wird.
-
Falsche Zeit:
- Verwenden
rtc.adjust()
die richtige Zeit festlegen.
- Verwenden
Anwendungen
- DIY -Schreibtischuhr
- Timer und Alarme
- IoT-fähige Uhr mit zusätzlichen Sensoren
- Bildungsprojekte
Abschluss
Durch die Kombination des Arduino, eines 0,91 "OLED und des DS1307 RTC können Sie eine genaue und visuell ansprechende Uhr erstellen. Mit wenigen Änderungen können Sie die Uhr an Ihre Anforderungen anpassen oder in größere Projekte integrieren. Experimentieren Sie mit zusätzlichen Funktionen Wie Alarme oder Internetsynchronisation, um Ihr Projekt auf die nächste Stufe zu bringen!