Pendahuluan

Pada tutorial ini, kita akan membahas cara menggunakan modul RTC DS3231 dengan Arduino UNO dan menampilkan data waktu pada LCD 16×2 menggunakan I2C. RTC (Real-Time Clock) merupakan komponen penting untuk menyimpan dan mengakses informasi waktu secara akurat, dan modul DS3231 adalah salah satu yang populer karena akurasinya yang tinggi.

 

Komponen Yang Digunakan

Berikut adalah daftar komponen yang digunakan dalam proyek ini beserta link pembelian di Golite Store:

  1. Arduino UNO – Beli Disini
  2. Modul RTC DS3231 – Beli Disini
  3. LCD 16×2 I2C – Beli Disini
  4. Kabel Jumper – Beli Disini

 

Skema Sistem

Konfigurasi Pinout

  • Arduino UNO -> Modul RTC DS3231
    • 5V -> VCC
    • GND -> GND
    • A4 -> SDA
    • A5 -> SCL
  • Arduino UNO -> LCD 16×2 I2C
    • 5V -> VCC
    • GND -> GND
    • A4 -> SDA
    • A5 -> SCL

Pada skema di atas, terlihat koneksi antara Arduino UNO dan modul RTC DS3231 menggunakan pin SDA dan SCL untuk komunikasi I2C. Koneksi antara Arduino UNO dan LCD 16×2 dilakukan melalui jalur I2C dengan bantuan kabel jumper.

 

Program Arduino

Program Set Data Tanggal di Modul RTC

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
  bool parse = false;
  bool config = false;

  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }

  Serial.begin(115200);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time=\"");
    Serial.print(__TIME__);
    Serial.print("\", Date=\"");
    Serial.print(__DATE__);
    Serial.println("\"");
  }
}

void loop() {
}

bool getTime(const char *str)
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}

bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}

 

Program Pembacaan Data Tanggal dan Tampil di LCD

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

LiquidCrystal_I2C lcd (0x27, 16, 2);

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("  Jam Arduino  ");
  lcd.setCursor(0,1);
  lcd.print("   RTC DS3231   ");
  delay(3000);
  lcd.clear();
  Serial.println("DS1307RTC Read");
  Serial.println("-------------------");
}

void loop() {
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(monthName[tm.Month - 1]);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
    
    lcd.setCursor(0,0);
    lcd.print("   ");
    lcd.print(tm.Day);
    lcd.print("/");
    lcd.print(monthName[tm.Month - 1]);
    lcd.print("/");
    lcd.print(tmYearToCalendar(tm.Year));
    lcd.setCursor(0,1);
    lcd.print("    ");
    lcd.print(tm.Hour);
    lcd.print(":");
    lcd.print(tm.Minute);
    lcd.print(":");
    lcd.print(tm.Second);
    lcd.print("   ");
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

 

Library yang harus di download :

 

Penjelasan Program

  1. Program Set Data Tanggal di Modul RTC:
    • Menggunakan library Wire, TimeLib, dan DS1307RTC.
    • Setup mencoba membaca tanggal dan waktu dari compiler.
    • Jika berhasil, konfigurasi RTC dengan informasi ini.
  2. Program Pembacaan Data Tanggal dan Tampil di LCD:
    • Menggunakan library Wire, LiquidCrystal_I2C, TimeLib, dan DS1307RTC.
    • Setup menginisialisasi LCD dan menampilkan pesan pembuka.
    • Loop membaca data tanggal dan waktu dari RTC dan menampilkannya di Serial Monitor dan LCD.

 

Pengujian

Pada pengujian, data tanggal dan waktu berhasil ditampilkan dengan benar pada LCD.

Kesimpulan

Dengan mengikuti tutorial ini, Kita telah berhasil menggunakan modul RTC DS3231 dengan Arduino UNO dan menampilkan data waktu pada LCD 16×2. Proyek ini dapat diperluas dengan menambahkan fitur-fitur tambahan atau digunakan sebagai dasar untuk proyek-proyek lain yang melibatkan waktu dan tanggal. Selamat mencoba dan eksplorasi lebih lanjut!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *






Hubungi Kami

Hubungi Kami

Kami menyediakan jasa proyek Arduino, Electrical, dan IoT (Internet of Things):
- Penyediaan komponen.
- Perancangan hardware dan software.
- Pemrograman.
- Hingga deploy server.


Cocok untuk hobi, edukasi (skripsi atau tugas akhir), dan industri.
Serahkan kepada kami, Anda tinggal terima hasil jadi!



Hubungi via WhatsApp



Ikuti Kami di TikTok (Inspirasi Project IoT)



Kunjungi YouTube Kami (Tutorial Project IoT)



Temukan Kami di Facebook



Beli Komponen Di GoLite Store