Een klok bouwen met een Arduino, een OLED-display en de DS1307 real-time klok (RTC) -module is een leuk en praktisch project. De DS1307 RTC -module blijft nauwkeurige tijd, zelfs wanneer de Arduino wordt uitgeschakeld, terwijl de OLED een slanke interface biedt voor het weergeven van de huidige tijd. Deze zelfstudie leidt u stap voor stap door het proces.
Wat u nodig hebt
- Arduino Board (bijv. UNO, Mega, Nano)
- 0,91 "OLED -display (I2C -interface)
- DS1307 RTC -module
- Breadboard en jumper draden
- Een computer met de Arduino Ide geïnstalleerd
- Bibliotheken: Adafruit SSD1306, Adafruit GFX en RTCLIB
Stap 1: De componenten bedraden
OLED Display bedrading (I2C)
OLED PIN | Arduino Pin |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
DS1307 RTC -module bedrading (I2C)
RTC -pin | Arduino Pin |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
Opmerking: Als u een Arduino -bord gebruikt met speciale SDA- en SCL -pennen (bijv. Mega), verbind dan de OLED- en RTC SDA/SCL -pennen in plaats daarvan.
Stap 2: De vereiste bibliotheken installeren
Om samen te werken met het OLED -display en DS1307 RTC, hebt u de volgende bibliotheken nodig:
- Adafruit SSD1306 (voor OLED)
- Adafruit gfx (grafische bibliotheek voor OLED)
- RTCLIB (voor RTC -functionaliteit)
Bibliotheken installeren
- Open de Arduino Ide.
- Gaan naar Sketch> Library innemen> Bibliotheken beheren.
- Zoeken en installeren:
- "Adafruit SSD1306"
- "Adafruit GFX Library"
- "RTCLIB"
Stap 3: De code uploaden
Hier is de code om de huidige tijd op de OLED weer te geven met behulp van de DS1307 RTC -module:
Voorbeeldcode
#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
}
Stap 4: De tijd aanpassen
Als de RTC niet draait of de tijd moet worden bijgewerkt, is de volgende regel in de setup()
Functie stelt de RTC in op de huidige tijd:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
EnF(__TIME__)
zijn macro's die de datum en tijd automatisch van uw computer instellen bij het uploaden van de code.
Gebruik: om een specifieke tijd handmatig in te stellen:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Stap 5: het display aanpassen
U kunt het klokdisplay aanpassen door:
-
Tekstgrootte wijzigen: Gebruik
display.setTextSize()
Om de lettergrootte aan te passen. - Graphics toevoegen: Gebruik de Adafruit GFX -bibliotheek om vormen zoals lijnen of rechthoeken te tekenen.
- Opmaaktijd: Voeg AM/PM of 24-uurs formaat toe indien nodig.
Voorbeeld: AM/PM toevoegen
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);
Problemen oplossen
-
OLED niet weergegeven:
- Zorg ervoor dat het I2C -adres overeenkomt (gewoonlijk
0x3C
of0x3D
). - Controleer de bedradingverbindingen.
- Zorg ervoor dat het I2C -adres overeenkomt (gewoonlijk
-
RTC niet gevonden:
- Controleer SDA- en SCL -verbindingen.
- Zorg ervoor dat de RTC -batterij correct wordt ingevoegd.
-
Onjuiste tijd:
- Gebruik
rtc.adjust()
Om de juiste tijd in te stellen.
- Gebruik
Toepassingen
- DIY -bureauklok
- Timers en alarmen
- IoT-compatibele klok met extra sensoren
- Educatieve projecten
Conclusie
Door de Arduino, een 0,91 "OLED en de DS1307 RTC te combineren, kunt u een nauwkeurige en visueel aantrekkelijke klok maken. Met een paar tweaks kunt u de klok aanpassen om aan uw behoeften te voldoen of deze te integreren in grotere projecten. Experimenteer met extra functies. Zoals alarmen of internetsynchronisatie om uw project naar een hoger niveau te tillen!