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
- Arduino Board (például Uno, Mega, Nano)
- 0,91 "OLED kijelző (I2C interfész)
- DS1307 RTC modul
- Kenyérlemez és jumper vezetékek
- Egy számítógép, amelyen az Arduino IDE telepített
- 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:
- Adafrut SSD1306 (OLED számára)
- Adafruit GFX (grafikus könyvtár az OLED számára)
- RTCLIB (RTC funkcionalitáshoz)
Könyvtárak telepítése
- Nyissa meg az Arduino IDE -t.
- Elindul Vázlat> Könyvtár> Könyvtárak kezelése.
- 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__)
ésF(__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:
-
A szöveg méretének megváltoztatása: Használat
display.setTextSize()
A betűméret beállításához. - 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.
- 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
-
Az OLED nem jelenik meg:
- Győződjön meg arról, hogy az I2C cím mérkőzések (általában
0x3C
vagy0x3D
). - Ellenőrizze a kábelezési csatlakozásokat.
- Győződjön meg arról, hogy az I2C cím mérkőzések (általában
-
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.
-
Helytelen idő:
- Használat
rtc.adjust()
A helyes idő beállításához.
- Használat
Alkalmazások
- Diy asztali óra
- Időzítők és riasztások
- IoT-kompatibilis óra további érzékelőkkel
- 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!