Zegar na Arduino z modułem czasu rzeczywistego DS1307 i LCD 16×2
Montaż i konfiguracja krok po kroku
W internecie można znaleźć wiele schematów zegarów opartych na Arduino. Często takie projekty wykorzystują adapter I²C do wyświetlacza LCD, aby zmniejszyć liczbę przewodów. Jest to wygodne rozwiązanie, jednak wprowadza do konstrukcji dodatkową płytkę i kolejny element pośredni.
W tym projekcie wyświetlacz podłączony jest bezpośrednio w trybie 4-bitowym — bez dodatkowych sterowników. Im mniej komponentów i płytek pośrednich znajduje się w urządzeniu, tym prostsza konstrukcja i większa niezawodność.
Teoretycznie zegar można zrealizować bez osobnego modułu czasu — Arduino może odliczać sekundy programowo. Jednak po odłączeniu zasilania czas zostałby utracony.
Dlatego zastosowano moduł czasu rzeczywistego (RTC — Real-Time Clock) DS1307. Przechowuje on datę i godzinę niezależnie od Arduino dzięki wbudowanej baterii podtrzymującej.
W efekcie otrzymujemy autonomiczne urządzenie, które:
- wyświetla aktualny czas,
- wyświetla datę,
- zachowuje ustawienia po odłączeniu zasilania,
- umożliwia ustawienie czasu przez komputer.
Wymagane elementy
Do budowy potrzebne będą:
- Arduino Uno (lub kompatybilna płytka),
- moduł RTC DS1307,
- wyświetlacz LCD 16×2,
- płytka stykowa (breadboard),
- przewody połączeniowe,
- potencjometr 10 kΩ (regulacja kontrastu),
- rezystor 1–2 kΩ (podświetlenie LCD),
- kabel USB.

Moduł DS1307 wyposażony jest w baterię, dzięki której czas jest zachowany nawet po odłączeniu zasilania Arduino.
Podłączenie komponentów
Przed podaniem zasilania należy dokładnie sprawdzić połączenia według schematu montażowego i ideowego.
1. Podłączenie modułu DS1307
Moduł podłączany jest przez magistralę I²C:
- SDA → A4
- SCL → A5
- VCC → 5V
- GND → GND
Należy upewnić się, że zasilanie i masa są podłączone poprawnie — błędne połączenie może spowodować niestabilną pracę modułu.
2. Podłączenie LCD 16×2
Wyświetlacz pracuje w trybie 4-bitowym.
Połączenia linii sygnałowych:
- RS → 9
- E → 8
- D4 → 7
- D5 → 6
- D6 → 5
- D7 → 4
Regulacja kontrastu:
- skrajne wyprowadzenia potencjometru → 5V i GND
- środkowe wyprowadzenie → VO wyświetlacza
Kontrast należy ustawić tak, aby znaki były wyraźne, ale tło nie było zbyt ciemne.
🔧 Rezystor podświetlenia LCD
Wyświetlacz LCD 16×2 posiada wbudowane podświetlenie LED.
W większości modeli wymagany jest rezystor ograniczający prąd.
W tej konstrukcji zastosowano rezystor o wartości 2 kΩ.
Podłączenie:
- A (LED+) → przez rezystor 2 kΩ → 5V
- K (LED−) → GND
Rezystor ogranicza prąd płynący przez diody LED i zapobiega ich przegrzewaniu.
W niektórych wersjach LCD rezystor może być wbudowany w moduł. W przypadku wyświetlaczy uniwersalnych warto zastosować rezystor zewnętrzny, aby zapewnić bezpieczną pracę.
Zaleca się staranne rozprowadzenie zasilania na płytce stykowej oraz minimalizację długości przewodów sygnałowych. Zmniejsza to ryzyko zakłóceń i poprawia stabilność działania.
Poniżej znajduje się schemat ideowy, który pozwala zweryfikować poprawność połączeń przed pierwszym uruchomieniem.

Podłączenie do komputera
Podłącz Arduino do komputera za pomocą kabla USB.
Po podłączeniu:
- Otwórz Arduino IDE.
- Wybierz:
- Narzędzia → Płytka → Arduino Uno
- Narzędzia → Port → odpowiedni port COM

Utworzenie nowego szkicu
Wybierz:
Plik → New Sketch

Otworzy się nowe, puste okno programu.

Usuń zawartość domyślnego szkicu i wklej pełny kod projektu.
Pełny kod programu
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
String inputString = "";
boolean stringComplete = false;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
tmElements_t tm;
if (stringComplete) {
tm.Day = (int(inputString[0]) - 48) * 10 + (int(inputString[1]) - 48);
tm.Month = (int(inputString[3]) - 48) * 10 + (int(inputString[4]) - 48);
tm.Year = CalendarYrToTm(
(int(inputString[6]) - 48) * 1000 +
(int(inputString[7]) - 48) * 100 +
(int(inputString[8]) - 48) * 10 +
(int(inputString[9]) - 48)
);
tm.Hour = (int(inputString[11]) - 48) * 10 + (int(inputString[12]) - 48);
tm.Minute = (int(inputString[14]) - 48) * 10 + (int(inputString[15]) - 48);
tm.Second = (int(inputString[17]) - 48) * 10 + (int(inputString[18]) - 48);
RTC.write(tm);
inputString = "";
stringComplete = false;
}
if (RTC.read(tm)) {
print2digits(tm.Hour, 0, 0);
lcd.print(":");
print2digits(tm.Minute, 3, 0);
lcd.print(":");
print2digits(tm.Second, 6, 0);
print2digits(tm.Day, 0, 1);
lcd.print("/");
print2digits(tm.Month, 3, 1);
lcd.print("/");
lcd.print(tmYearToCalendar(tm.Year));
}
else {
lcd.clear();
lcd.setCursor(0, 0);
if (RTC.chipPresent()) {
lcd.print("DS1307 is stopped");
} else {
lcd.print("DS1307 read error");
}
delay(5000);
}
delay(1000);
}
void print2digits(int number, int col, int row) {
lcd.setCursor(col, row);
if (number >= 0 && number < 10) {
lcd.print("0");
}
lcd.print(number);
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Zapisz plik.
4. Sprawdzenie kompilacji
Kliknij przycisk Sprawdź (ikona ✓).
Jeśli wszystko przebiegło poprawnie, w dolnej części okna pojawi się komunikat o pomyślnej kompilacji.

Jeśli pojawi się błąd:
DS1307RTC.h: No such file or directory
oznacza to, że biblioteka nie jest zainstalowana..

5. Instalacja bibliotek
Przejdź do:
Szkic → Dołącz bibliotekę → Zarządzaj bibliotekami
Wyszukaj i zainstaluj:
- DS1307RTC
- Time

Po instalacji ponownie sprawdź kompilację.
6. Wgrywanie programu
Kliknij przycisk:
Wgraj

Po zakończeniu pojawi się komunikat:
„Wgrywanie zakończone”.
7. Ustawienie czasu
Należy jednorazowo ustawić aktualny czas.
Otwórz:
Narzędzia → Monitor portu szeregowego

Ustaw prędkość:
9600 baud
Wpisz datę i godzinę w formacie:
DD/MM/YYYY HH:MM:SS
Przykład:
21/02/2026 12:09:04

Naciśnij Enter.
Arduino zapisze dane do pamięci modułu RTC.
Od tej chwili czas będzie przechowywany autonomicznie, nawet po odłączeniu zasilania. Ponowne ustawienie wymagane jest tylko przy wymianie baterii lub pełnym resecie modułu.
Rezultat
Po chwili na wyświetlaczu pojawi się ustawiony czas.
- Pierwsza linia — aktualna godzina
- Druga linia — aktualna data
Wyświetlacz odświeżany jest co sekundę, natomiast sam moduł RTC odlicza czas niezależnie od programu.
Jeśli moduł nie odpowiada, na ekranie pojawi się komunikat o błędzie.
Uwagi praktyczne
- Używaj krótkich przewodów.
- Oddzielaj linie zasilania od sygnałowych.
- Sprawdzaj poprawność polaryzacji.
- Jeśli czas się resetuje — sprawdź baterię RTC.
Rozwój projektu
Projekt można rozszerzyć o:
- przyciski do ustawiania czasu bez komputera,
- czujnik temperatury (np. DS18B20),
- funkcję budzika,
- automatyczną regulację podświetlenia,
- obudowę,
- zastosowanie dokładniejszego modułu DS3231.
Projekt może stać się podstawą stacji pogodowej lub wyświetlacza informacyjnego.
Czytaj dalej
Jeśli chcesz rozwijać się dalej:
🔧 Dział „Urządzenia” — analiza rzeczywistych układów i sprzętu.
📘 Dział „Edukacja” — uporządkowane materiały z podstaw elektroniki.
💬 Forum — pytania, dyskusje i wymiana doświadczeń.
Praktyka jest najlepszym sposobem na rozwijanie zrozumienia.