#45Pemula

Menyiapkan Modul Jam RTC DS1302

4.5(23)
31 selesai
Menyiapkan Modul Jam RTC DS1302
Kamu menjalankan modul jam kecil yang tidak pernah lupa waktu, bahkan ketika Arduino dimatikan. Modul ini punya baterai mungilnya sendiri, dan begitu jamnya diatur, tanggal dan waktu tercetak di layar komputermu setiap detik. Alarm, timer, dan setiap proyek yang mencatat log dimulai dari langkah ini.

Video

Skema rangkaian

Menyiapkan Modul Jam RTC DS1302 - Circuit

Kode sumber

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Menyiapkan Modul Jam RTC DS1302
4// ─────────────────────────────────────────
5// Jika waktu RTC tidak valid (modul baru, baterai habis) sketch menulis
6// tanggal dan waktu kompilasi ke DS1302 sekali, lalu mengirim tanggal dan
7// waktu ke Serial Monitor setiap detik. Baterai modul menjaga waktu ketika
8// daya mati; start berikutnya tidak mengaturnya lagi.
9//
10// Pin:
11//   D6 -> CLK RTC
12//   D7 -> DAT RTC
13//   D8 -> RST RTC
14//   VCC RTC ke 5V, GND ke GND
15
16#include <virtuabotixRTC.h>   // Library DS1302
17
18// Pin: CLK, DAT, RST
19virtuabotixRTC myRTC(6, 7, 8);
20
21void setup() {
22  Serial.begin(9600);   // Serial pada 9600 baud
23
24  // Baca RTC dulu. Tahun di bawah 2024 atau bulan di luar 1-12 berarti waktu belum pernah diatur;
25  // tulis waktu kompilasi. Jika valid biarkan, sehingga upload ulang atau mematikan-menyalakan
26  // Arduino tetap menjaga waktu.
27  myRTC.updateTime();
28  if (myRTC.year < 2024 || myRTC.month < 1 || myRTC.month > 12) {
29    setFromCompileTime();
30  }
31}
32
33// Menulis waktu kompilasi (__DATE__ "Oct 28 2026", __TIME__ "13:42:15") ke RTC. Upload memakan
34// beberapa detik, jadi jam mulai terlambat sebanyak itu.
35void setFromCompileTime() {
36  const char *date = __DATE__;
37  const char *time = __TIME__;
38  const char *months = "JanFebMarAprMayJunJulAugSepOctNovDec";
39  char monthName[4] = {date[0], date[1], date[2], '\0'};
40
41  int month = (strstr(months, monthName) - months) / 3 + 1;   // "Oct" -> 10
42  int day = atoi(date + 4);
43  int year = atoi(date + 7);
44  int hour = atoi(time);
45  int minute = atoi(time + 3);
46  int second = atoi(time + 6);
47
48  // Hari dalam minggu (metode Sakamoto), 0 = Minggu
49  int offsets[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
50  int y = year - (month < 3);
51  int weekday = (y + y / 4 - y / 100 + y / 400 + offsets[month - 1] + day) % 7;
52  if (weekday == 0) {
53    weekday = 7;   // Senin = 1 ... Minggu = 7
54  }
55
56  // Urutan: s, min, h, weekday, day, month, year
57  myRTC.setDS1302Time(second, minute, hour, weekday, day, month, year);
58}
59
60void loop() {
61  // Baca waktu sekarang dari modul RTC
62  myRTC.updateTime();
63
64  // Kirim waktu (hari/bulan/tahun j:m:d)
65  Serial.print("Current Date/Time: ");
66  Serial.print(myRTC.dayofmonth);
67  Serial.print("/");
68  Serial.print(myRTC.month);
69  Serial.print("/");
70  Serial.print(myRTC.year);
71  Serial.print("  ");
72  Serial.print(myRTC.hours);
73  Serial.print(":");
74  Serial.print(myRTC.minutes);
75  Serial.print(":");
76  Serial.println(myRTC.seconds);
77
78  delay(1000);   // Tunggu 1 s
79}
80

FAQ

Apa fungsi modul RTC?

Modul jam real-time (RTC) mempertahankan waktu dan tanggal meskipun Arduino dimatikan, berkat baterai bawaannya. Karena penghitung millis() Arduino kembali ke nol setiap kali Arduino dinyalakan, RTC dibutuhkan untuk informasi waktu yang akurat.

Apakah cukup mengatur waktunya sekali saja?

Ya. Kode pertama-tama membaca waktu dari modul; jika belum pernah diatur, kode menulis tanggal dan waktu ketika kamu mengompilasi kode itu sekali. Jika waktunya sah, kode membiarkannya, jadi meng-upload lagi atau mematikan dan menyalakan Arduino tidak merusak jamnya. Kamu tidak perlu menjadikan baris apa pun komentar secara manual.

Jamnya lambat, apakah itu normal?

DS1302 berbasis kristal dan bisa meleset beberapa detik per hari. Untuk jam yang lebih akurat, disarankan modul DS3231 yang berkompensasi suhu (sekitar ±1 menit per tahun).

Apa yang terjadi ketika baterai di modul habis?

Jam tetap berjalan selama Arduino diberi daya; jika daya terputus dan baterainya habis, jam kembali ke awal dan harus diatur lagi. Baterai CR2032 biasanya bertahan beberapa tahun.