Egy óra létrehozása az Arduino -val, egy 0,91 "-es OLED -vel és a DS1307 RTC -vel

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

Egy óra felépítése Arduino, OLED kijelző és a DS1307 valós idejű óra (RTC) modul egy szórakoztató és gyakorlati projekt. A DS1307 RTC modul pontos időt tart még akkor is, ha az Arduino kikapcsol, míg az OLED karcsú felületet biztosít az aktuális idő megjelenítéséhez. Ez az oktatóanyag lépésről lépésre végigvezeti Önt a folyamaton.


Mire lesz szüksége

  1. Arduino Board (például Uno, Mega, Nano)
  2. 0,91 "OLED kijelző (I2C interfész)
  3. DS1307 RTC modul
  4. Kenyérlemez és jumper vezetékek
  5. Egy számítógép, amelyen az Arduino IDE telepített
  6. Könyvtárak: Adafrut SSD1306, ADAFruit GFX és RTCLIB

1. lépés: Az alkatrészek bekötése

OLED kijelző huzalozása (I2C)

OLED PIN Arduino Pin
VCC 5 V -os
GND GND
SDA A4
SCL A5

DS1307 RTC modul vezetéke (I2C)

RTC PIN Arduino Pin
VCC 5 V -os
GND GND
SDA A4
SCL A5

Jegyzet: Ha Arduino táblát használnak dedikált SDA és SCL csapokkal (például MEGA), csatlakoztassa az OLED és az RTC SDA/SCL csapokat ehelyett.


2. lépés: A szükséges könyvtárak telepítése

Az OLED kijelzővel és a DS1307 RTC -vel való együttműködéshez a következő könyvtárakra van szüksége:

  1. Adafrut SSD1306 (OLED számára)
  2. Adafruit GFX (grafikus könyvtár az OLED számára)
  3. RTCLIB (RTC funkcionalitáshoz)

Könyvtárak telepítése

  1. Nyissa meg az Arduino IDE -t.
  2. Elindul Vázlat> Könyvtár> Könyvtárak kezelése.
  3. Keresés és telepítés:
    • "Adafrut SSD1306"
    • "Adafrut GFX könyvtár"
    • "RTCLIB"

3. lépés: A kód feltöltése

Itt van a kód, amely az OLED aktuális idejét a DS1307 RTC modul segítségével jeleníti meg:

Példakód

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

4. lépés: Az idő módosítása

Ha az RTC nem fut, vagy az időt frissíteni kell, akkor a következő sor a setup() A funkció az RTC -t az aktuális időre állítja:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) és F(__TIME__) olyan makrók, amelyek automatikusan beállítják a számítógépről a dátumot és az időt, amikor feltöltik a kódot.

A konkrét idő kézi beállításához használja:

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

5. lépés: A kijelző testreszabása

Testreszabhatja az órás kijelzőt:

  1. A szöveg méretének megváltoztatása: Használat display.setTextSize() A betűméret beállításához.
  2. Grafika hozzáadása: Használja az AdaFruit GFX könyvtárat olyan formák rajzolására, mint a vonalak vagy a téglalapok.
  3. Formázási idő: Adjon hozzá AM/PM vagy 24 órás formátumot, ha szükséges.

Példa: AM/PM hozzáadása

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);

Hibaelhárítás

  1. Az OLED nem jelenik meg:

    • Győződjön meg arról, hogy az I2C cím mérkőzések (általában 0x3C vagy 0x3D).
    • Ellenőrizze a kábelezési csatlakozásokat.
  2. Az RTC nem található:

    • Ellenőrizze az SDA és az SCL kapcsolatokat.
    • Győződjön meg arról, hogy az RTC akkumulátor helyesen van behelyezve.
  3. Helytelen idő:

    • Használat rtc.adjust() A helyes idő beállításához.

Alkalmazások

  1. Diy asztali óra
  2. Időzítők és riasztások
  3. IoT-kompatibilis óra további érzékelőkkel
  4. Oktatási projektek

Következtetés

Az Arduino, a 0,91 "-es OLED és a DS1307 RTC kombinálásával létrehozhat egy pontos és vizuálisan vonzó órát. Néhány csípéssel testreszabhatja az órát, hogy megfeleljen az Ön igényeinek, vagy integrálja azt nagyobb projektekbe. Kísérletezzen további funkciókkal. Kísérletezzen további funkciókkal. Mint a riasztások vagy az internetes szinkronizálás, hogy a projektet a következő szintre hozza!

Hagyj egy megjegyzést

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.