Een klok maken met de Arduino, een 0,91 "OLED en de DS1307 RTC

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

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

  1. Arduino Board (bijv. UNO, Mega, Nano)
  2. 0,91 "OLED -display (I2C -interface)
  3. DS1307 RTC -module
  4. Breadboard en jumper draden
  5. Een computer met de Arduino Ide geïnstalleerd
  6. 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:

  1. Adafruit SSD1306 (voor OLED)
  2. Adafruit gfx (grafische bibliotheek voor OLED)
  3. RTCLIB (voor RTC -functionaliteit)

Bibliotheken installeren

  1. Open de Arduino Ide.
  2. Gaan naar Sketch> Library innemen> Bibliotheken beheren.
  3. 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__) En F(__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:

  1. Tekstgrootte wijzigen: Gebruik display.setTextSize() Om de lettergrootte aan te passen.
  2. Graphics toevoegen: Gebruik de Adafruit GFX -bibliotheek om vormen zoals lijnen of rechthoeken te tekenen.
  3. 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

  1. OLED niet weergegeven:

    • Zorg ervoor dat het I2C -adres overeenkomt (gewoonlijk 0x3C of 0x3D).
    • Controleer de bedradingverbindingen.
  2. RTC niet gevonden:

    • Controleer SDA- en SCL -verbindingen.
    • Zorg ervoor dat de RTC -batterij correct wordt ingevoegd.
  3. Onjuiste tijd:

    • Gebruik rtc.adjust() Om de juiste tijd in te stellen.

Toepassingen

  1. DIY -bureauklok
  2. Timers en alarmen
  3. IoT-compatibele klok met extra sensoren
  4. 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!

Laat een reactie achter

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.