Construirea unui ceas cu un Arduino, un ecran OLED și modulul DS1307 Clock în timp real (RTC) este un proiect distractiv și practic. Modulul DS1307 RTC păstrează timp exact chiar și atunci când Arduino este alimentat, în timp ce OLED oferă o interfață elegantă pentru afișarea timpului curent. Acest tutorial vă va ghida prin proces pas cu pas.
Ce vei avea nevoie
- Board Arduino (de exemplu, Uno, Mega, Nano)
- Afișaj OLED de 0,91 " (Interfață I2C)
- DS1307 Modul RTC
- Tablă de pâine și jumper
- Un computer cu IDE Arduino instalat
- Biblioteci: Adafruit SSD1306, Adafruit GFX și RTCLIB
Pasul 1: Cablarea componentelor
OLED Display Cabling (I2C)
Pinul Oled | Pinul Arduino |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
Cablajul modulului DS1307 RTC (I2C)
PIN RTC | Pinul Arduino |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
Nota: Dacă utilizați o placă Arduino cu pini dedicat SDA și SCL (de exemplu, mega), conectați pinii OLED și RTC SDA/SCL la acestea.
Pasul 2: Instalarea bibliotecilor necesare
Pentru a lucra cu afișajul OLED și DS1307 RTC, aveți nevoie de următoarele biblioteci:
- Adafruit SSD1306 (pentru OLED)
- Adafruit GFX (biblioteca grafică pentru OLED)
- Rtclib (pentru funcționalitatea RTC)
Instalarea bibliotecilor
- Deschideți IDE Arduino.
- Du -te la Schiță> Includeți biblioteca> Gestionați bibliotecile.
- Căutați și instalați:
- "Adafruit SSD1306"
- "Adafruit GFX Library"
- "Rtclib"
Pasul 3: Încărcarea codului
Iată codul pentru a afișa timpul curent pe OLED folosind modulul RTC DS1307:
Cod de exemplu
#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
}
Pasul 4: Reglarea timpului
Dacă RTC nu rulează sau timpul trebuie actualizat, următoarea linie din setup()
Funcția stabilește RTC la ora curentă:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
şiF(__TIME__)
Sunt macro -uri care setează automat data și ora de pe computer la încărcarea codului.
Pentru a seta un anumit timp manual, utilizați:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Pasul 5: Personalizarea afișajului
Puteți personaliza afișarea ceasului de către:
-
Modificarea dimensiunii textului: Utilizare
display.setTextSize()
Pentru a regla dimensiunea fontului. - Adăugarea grafică: Utilizați biblioteca Adafruit GFX pentru a desena forme precum linii sau dreptunghiuri.
- Timp de formatare: Adăugați format AM/PM sau 24 de ore, după cum este necesar.
Exemplu: Adăugarea 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);
Depanare
-
OLED nu se afișează:
- Asigurați -vă că adresa I2C se potrivește (în mod obișnuit
0x3C
sau0x3D
). - Verificați conexiunile de cablare.
- Asigurați -vă că adresa I2C se potrivește (în mod obișnuit
-
RTC nu a fost găsit:
- Verificați conexiunile SDA și SCL.
- Asigurați -vă că bateria RTC este introdusă corect.
-
Timp incorect:
- Utilizare
rtc.adjust()
pentru a seta timpul corect.
- Utilizare
Aplicații
- Ceas de birou DIY
- Cronometre și alarme
- Ceas activat IoT cu senzori suplimentari
- Proiecte educaționale
Concluzie
Combinând Arduino, un OLED de 0,91 "și DS1307 RTC, puteți crea un ceas precis și atrăgător vizual. Cu câteva modificări, puteți personaliza ceasul pentru a se potrivi nevoilor dvs. sau a -l integra în proiecte mai mari. Experimentați cu funcții suplimentare Cum ar fi alarmele sau sincronizarea internetului pentru a vă duce proiectul la nivelul următor!