RTC Module (DS3231) – Fungsi Jam Arduino

RTC Module adalah Module yang dapat menyimpan MAKLUMAT MASA.
Tidak semua MicroController Arduino (UNO/NANO/MEGA/ESP32/ESP8266) mampu menyimpan maklumat masa, kecuali board-board yang advance seperti Arduino Due dan lain-lain.

Ini adalah kerana, apabila Arduino di-Power-Off, semua sistemnya akan terpadam.

RTC Module mempunyai battery tersendiri yang mampu menyalakan unit RTC walaupun Power sudah dipadamkan. Tambahan pula, RTC Module mempunyai Clock-Crystal dalaman yang mampu menyimpan DETIK-MASA ketika Power di-Offkan.

Bagi Board WiFi seperti NodeMCU ESP8266 dan ESP32 pula, RTC Module tidak diperlukan kerana mereka dapat mengambil masa dari internet dengan Time Library. Kecuali, jika WiFi tidak digunakan atau tiada sambungan internet.

RTC MODULE DS3231

Terdapat pelbagai jenis model Module RTC dan fungsi mereka sehampirnya sama.
Dalam guide ini, kami akan menunjukkan kaedah menggunakan RTC Module DS3231.

DISCLAIMER:

Isi kandung Blog-Content ini, diolah dari rujukan web www.create.arduino.cc untuk memberi pemahaman lebih pada Komuniti Arduino Malaysia.

Link Rujukan: https://create.arduino.cc/projecthub/electropeak/interfacing-ds1307-rtc-module-with-arduino-make-a-reminder-08cb61

Module RTC DS3231, mempunyai Bateri jenis 2025 di belakang.

WIRING & CONNECTION

Jika dilihat pada Pin Module RTC ini, terdapat hanya 4 pin penting.

  • Pin VCC – Power 5V
  • Pin GND – Ground
  • SDA – I2C Connection
  • SCL – I2C Connection

Pin-pin lain tidak diperlukan.

I2C PORT PADA BOARD ARDUINO

Pada Board Arduino UNO dan NANO, pin I2C adalah pada A4 (SDA) dan A5 (SCL).

Pada Board Arduino MEGA pula, pin I2C adalah pada D20 (SDA) dan D21 (SCL).

Dengan itu kaedah sambunganya hanyalah:

  • SDA RTC – SDA Board
  • SCL RTC – SCL Board

I2C ADDRESS MODULE RTC DS3231

By default, I2C Address untuk semua Module DS3231 adalah sama, iaitu 0x68.
Oleh itu, dalam coding, address ini telah diletakkan secara default dalam Library.

LIBRARY RTCLib (Edited oleh MatGyver)

Terdapat pelbagai Version Library RTC atau Library DS3231 dalam internet. Untuk beginners ia banyak menimbulkan kekeliruan, dan terdapat fungsi-fungsi dan syntax-syntax yang berbeza untu ksetiap Library.

Namun, hasil kajian kami, Library berikut adalah antara Library termudah untuk diikuti bersam Example yang jelas.
(Klik untuk download Library)

Library RTCLib

Kami telah menambahkan example coding yang Beginner-Friendly.

Disebabkan Library ini dalam bentuk file .zip , gunakan fungsi Add .ZIP Library dalam Arduino IDE, untuk install/tambahkan library ini dalam computer.

MENGGUNAKAN LIBRARY RTCLib

File > Examples > RTCLib > DS3231_Set_Time_PC

Apabila Library telah berjaya di-Install, navigasi ke example code di atas
DS3231_Set_Time_PC

Berikut ada isi kandung library tersebut:

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
//Edited Oleh : MatGyver

#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;

//Variable di bawah diperlukan untuk memberi tahu Hari
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  //Mulakan Serial Monitor 9600 BaudRate
  Serial.begin(9600);

  //Sedikit Delay
  delay(100); //Tidak Wajib

  //Memulakan RTC dan memberikan notifikasi jika RTC tidak dijumpai
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1); //Constant loop, sila restart Arduino
  }

  //RTC.LostPower digunakan untuk check samada 
  //RTC kehilangan power atau tidak ketika Arduino Start
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    
    //Syntax berikut setkan masa dan tarikh RTC dari PC
    //mengikut waktu Program diUpload
    //pastikan computer mempunyai masa yang betul
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    //Untuk mengubah masa dan tarikh secara manual
    //Gunakan syntax di bawah
    //Contoh :January 21, 2014 at 3am you would call:
    //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  
}//END VOID SETUP

void loop () {
    //Dapatkan masa terkini dan simpan dalam Object "now"
    DateTime now = rtc.now();

    //Print/Paparkan maklumat masa/tarikh pada Serial Monitor
    Serial.print(now.year(), DEC);  //Nombor Tahun (2021)
    Serial.print('/');              //Tanda sempadan
    Serial.print(now.month(), DEC); //Nombor Tahun (6)
    Serial.print('/');              //Tanda sempadan
    Serial.print(now.day(), DEC);   //Nombor Tahun (17)
    
    Serial.print(" (");             //Kurungan untuk hari
    Serial.print(daysOfTheWeek[now.daysOfTheWeek()]); //Print hari
    Serial.print(") ");             //Kurungan untuk hari
    
    Serial.print(now.hour(), DEC);  //Nombor Jam 
    Serial.print(':');              //Tanda sempadan
    Serial.print(now.minute(), DEC);//Nombor Minit 
    Serial.print(':');              //Tanda sempadan
    Serial.print(now.second(), DEC);//Nombor Saat 
    Serial.println();
    
    Serial.println();
    delay(3000);
    
}//END VOID LOOP

MENTAPKAN MASA DAN TARIKH

Module RTC yang baru pertama kali dinyalakan, tidak akan mempunyai Tarikh dan Masa yang terkini.

Oleh itu, jika anda perhatikan dalam coding di atas, terdapat syntax seperti berikut:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

Ini adalah suatu kelainan, berbanding library-library lain, di mana, fungsi F(__DATE__) dan juga F(__TIME__) sangat mudah, ia merujuk kepada masa PC kita sewaktu Program Arduino di upload.

Dengan 2 syntax ini, setiap kali program diupload, RTC akan diupdate dengan maklumat MASA dan TARIKH yang terkini dari PC Computer.

Walaubagaimanapun, terdapat juga Kaedah Alternatif untuk menetapkan Masa dan Tarikh secara manual, melalui syntax di bawah:

rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

Syntax di atas, akan menetapkan maklumat masa dan tarikh dalam bentuk berikut:

January 21, 2014 at 3:00 am

MEMANGGIL MAKLUMAT MASA DAN TARIKH TERKINI

Setiap kali maklumat masa dan tarikh terkini ingin dipanggil, syntax berikut perlu dipanggil:

DateTime now = rtc.now();

Syntax ini, akan Update Object-Variable now , dengan maklumat terkini.

MEMANGGIL MAKLUMAT TERPERINCI

Selepas memanggil maklumat terkini, kesemua maklumat Tahun, Bulan, Hari, Jam, Minit dan saat, boleh dipanggil secara individu dengan Syntax-syntax berikut:

tahun = now.year();
bulan = now.month();
hari = now.day();
jam = now.hour();
minit = now.minute();
saat = now.second();

Kesemua variable tahun,bulan, hari,jam... perlu di-Declare sebelum digunakan.

PERSEDIAAN UNTUK KE CODING ARDUINO

Jika anda menghadapi kesukara dalam menggunakan atau memahamkan Arduino dan Coding, kami sarankan anda ikuti E-Learning E-Kursus Pemantapan Asas Arduino MatGyver ini.

Sebelum membuat sebarang Project Arduino, kita perlu tahu dahulu Fundamental Hardware dan juga Fundamental C++ Coding supaya kita dapat kenal-pasti sebarang masalah atau error-error basic yang bakal terjadi ketika membuat project ini.

Jika anda mempunyai sebarang PERTANYAAN berkenaan artikel ini, anda boleh maklumkan dalam bahagian COMMENT.

Selamat Mempelajari Module RTC DS3231!


Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: