Skapa en klocka med Arduino, en 0,91 "OLED och DS1307 RTC

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

Att bygga en klocka med en Arduino, en OLED-skärm och DS1307 Real Time Clock (RTC) är ett roligt och praktiskt projekt. DS1307 RTC -modulen håller korrekt tid även när Arduino är avstängd, medan OLED tillhandahåller ett elegant gränssnitt för att visa aktuell tid. Denna handledning kommer att vägleda dig genom processen steg för steg.


Vad du behöver

  1. Arduinstyrelse (t.ex. Uno, Mega, Nano)
  2. 0,91 "OLED -display (I2c gränssnitt)
  3. DS1307 RTC -modul
  4. Breadboard och jumpertrådar
  5. En dator med Arduino Ide installerad
  6. Bibliotek: Adafruit SSD1306, Adafruit GFX och RTCLIB

Steg 1: Koppling av komponenterna

OLED Display ledningar (I2C)

Oledstift Arduinosnål
Vcc 5V
Gard Gard
SDA A4
SCL A5

DS1307 RTC Module Wiring (I2C)

RTC -stift Arduinosnål
Vcc 5V
Gard Gard
SDA A4
SCL A5

Notera: Om du använder ett Arduino -kort med dedikerade SDA- och SCL -stift (t.ex. MEGA), anslut OLED och RTC SDA/SCL -stift till dem istället.


Steg 2: Installera de nödvändiga biblioteken

För att arbeta med OLED -skärmen och DS1307 RTC behöver du följande bibliotek:

  1. Adafruit SSD1306 (för OLED)
  2. Adafruit GFX (Grafikbibliotek för OLED)
  3. Rtclib (för RTC -funktionalitet)

Installera bibliotek

  1. Öppna Arduino IDE.
  2. Gå till Skiss> Inkludera bibliotek> Hantera bibliotek.
  3. Sök efter och installera:
    • "Adafruit SSD1306"
    • "Adafruit GFX Library"
    • "Rtclib"

Steg 3: Ladda upp koden

Här är koden för att visa aktuell tid på OLED med DS1307 RTC -modulen:

Exempelkod

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

Steg 4: Justera tiden

Om RTC inte körs eller tiden måste uppdateras, följande rad i setup() Funktionen ställer in RTC till nuvarande tid:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) och F(__TIME__) är makron som automatiskt ställer in datum och tid från din dator när du laddar upp koden.

För att ställa in en viss tid manuellt, använd:

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

Steg 5: Anpassa displayen

Du kan anpassa klockvisningen av:

  1. Ändra textstorlek: Använda display.setTextSize() För att justera teckensnittsstorleken.
  2. Lägga till grafik: Använd Adafruit GFX -biblioteket för att rita former som linjer eller rektanglar.
  3. Formateringstid: Lägg till AM/PM eller 24-timmarsformat efter behov.

Exempel: Lägga till 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);

Felsökning

  1. OLED visar inte:

    • Se till att I2C -adressmatchningar (vanligtvis 0x3C eller 0x3D).
    • Kontrollera ledningsanslutningar.
  2. RTC hittades inte:

    • Verifiera SDA- och SCL -anslutningar.
    • Se till att RTC -batteriet sätts in korrekt.
  3. Felaktig tid:

    • Använda rtc.adjust() för att ställa in rätt tid.

Ansökningar

  1. DIY -skrivklocka
  2. Timers och larm
  3. IoT-aktiverad klocka med ytterligare sensorer
  4. Utbildningsprojekt

Slutsats

Genom att kombinera Arduino, en 0,91 "OLED och DS1307 RTC kan du skapa en korrekt och visuellt tilltalande klocka. Med några tweaks kan du anpassa klockan för att passa dina behov eller integrera den i större projekt. Experiment med ytterligare funktioner Som larm eller internet -synkronisering för att ta ditt projekt till nästa nivå!

Lämna en kommentar

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.