19 May 2016

Tutorial 9 - Arduino & Real Time Clock (DS3231) - Set Alarm


Apa khabar semua? Saya doakan semua pembaca blog ini sihat - sihat belaka. Untuk post kali ini, saya ingin berkongsi cara - cara menggunakan Real Time Clock (RTC) jenis DS 3231. Kenapa saya ingin membawa tajuk ini kepada semua??? Sebab ramai yang bertanya kepada saya bagaimana boleh mengawal alatan elektrik @ apa - apa output kita dengan berpandukan masa (time based).

Sebelum saya menerangkan RTC lebih lanjut, pernahkah anda terfikir, bagaimana PC atau desktop kita sentiasa memaparkan waktu yang tepat dan betul walau dalam keadaan tiada bateri atau bekalan kuasa? Anda boleh mencuba sendiri menggunakan laptop  / PC anda. Cabut bateri, jangan sambungkan bekalan kuasa dan biarkan dalam masa 5 - 10 minit. Kemudian pasang balik bateri / pasang bekalan kuasa dan ON laptop / PC anda. Masa yang dipaparkan MASIH TEPAT. Kenapa? Ini kerana dalam laptop / PC anda, telah dipasang dengan satu peranti (device) yang dipanggil RTC. RTC ini menggunakan bateri kecil dan tidak akan terganggu operasinya jika tidak mendapat bekalan kuasa dari luar kerana dia ada bekalan kuasa yang sendiri. Segala data mengenai masa dan tarikh akan distorkan pada hari pertama anda membeli laptop (sewaktu configure OS) dan tidak akan hilang sehinggalah anda membuang data tersebut (format laptop) atau RTC ini sendiri dah rosak.

Saya ada terbaca, yang kadar ketepatan RTC sangat baik. Jika dipasang selama 1 tahun, kadar ketepatan jam anda mungkin lari dalam 2 saat sahaja. 1 tahun tau!! Lari 2 saat je!! Power la tu!

RTC DS-3231 (Front)
RTC DS-3231 (Rear)
Saya pernah membuat 2 projek yang menggunakan RTC ini. Ada yang nak kawal siraman pokok dan ada yang nak buat timer + clock (3 kali sehari) dan outputnya adalah semburan pewangi, lampu dan kipas. Harga RTC ini dalam lingkungan RM35 - RM40 sahaja. Ingat!! Ada dua jenis RTC di pasaran, DS3231 dan DS1307. DS3231 adalah lebih stabil dan upgraded version kepada DS1307. Jadi, belilah device yang paling latest. Mmmuuaaahhh cikedd!

Bateri dan module adalah dijual berasingan yer....!! Belilah dekat kedai mana pun.. Memang asing - asing. Gunakan bateri jenis XX2032 (3V - 3.7V) di kedai jam tangan.. Di Bidor, bateri ni harga dia RM9/-. Beli dekat KL, RM12/-. Hampeh!!

So, untuk tutorial kali ini, saya nak berkongsi cara menggunakan Arduino dan RTC DS3231 untuk membuat task (hidupkan LED) pada pukul 2.50 pagi dan tutup LED 10 saat kemudian. Kenapa 2.50 pagi?? Aku nak solat tahajjud!!  Hahaha!! Moh ler yeop!!

Komponen yang diperlukan:
  1. Arduino
  2. RTC DS3231
  3. 16x02 LCD Display
  4. Potentiometer 10k Ohm
  5. Resistor 220 Ohm
  6. LED
  7. Jumper Cable
  8. Breadboard
  9. USB Cable A-B type
Library yang perlu ditambah ke dalam Arduino
  1. DS3231.h 
  2. Time.h
  3. TimeAlarms.h
  4. VirtualWire.h
Cara Penyambungan


Untuk RTC DS3231 Module, ikut sambungan seperti di bawah:

      RTC                                      Arduino
      32K                                Tiada Sambungan
     SQW                               Tiada Sambungan
      SCL                                   SCL atau A4
      SDA                                  SDA atau A5
      VCC                                        5V
      GND                                      GND


Sambungan Penuh Untuk Litar

Aturcara:
  1. Untuk menggunakan RTC kali pertama (bau kedai lagi), anda dikehendaki memuat naik (upload) WAKTU yang terbaru ke dalam module RTC ini.
  2. Mana nak dapat full coding? Nah, amek ni. Jangan cakap abang tak payunggg! 
Pada baris ke-19, anda akan nampak aturcara ini:
 setDS3231time(SS,MM,JJ,H,TT,BB,YY);  

Ubah ikut panduan di bawah:

SS - saat / seconds. Jika nak set saat = 5, taip 5 sahaja. Jangan taip 05!
MM - minit / minute. Sama cara taip macam saat.
JJ - jam / hours. Guna sistem 24 jam. Kalau pukul 6 pagi, taip 6. Kalau pukul 2 petang, tulis 14
H - Hari / Day. Kalau hari Ahad, tulis 1, Isnin = 2..... hinggalah Sabtu = 7
TT - Tarikh / Date. Kalau 5hb, taip 5 shj.. Jgn 05
BB - Bulan / Month. 1 - 12. Takkan ni pun kena ajar kut.. Huhu
YY - Tahun / Year. Kalau 2016, tulis 2 angka terakhir je iaitu 16.

Sebagai contoh, saya nak setkan:
Waktu: 2.45 petang
Tarikh: 19 / 5 / 2016 (Khamis)

jadi, saya akan ubah line tadi macam ini:

setDS3231time(00,45,14,5,19,5,16); .


Lepas itu, untuk Alarm pula, kita akan upload aturcara yang berlainan. Anda tak perlu risau sebab aturcara yang ada upload sebelum ini (Set Time RTC) hanya akan hilang dalam Arduino, tetapi tidak pada RTC module. So, tak perlu risau la jam anda akan lari atau tak sama dengan yang asal.

Mana nak dapat full coding? Nah, amek lagi ni!! Jangan cakap abang tak pasang khemah! 


Pada baris 24 & 25 coding alarm ni, anda akan nampak line ni:

  Alarm.alarmRepeat(2,50,00, Alarm1High);
  Alarm.alarmRepeat(2,50,10, Alarm1Low);  

Itu maksudnya alarm akan trigger pada pukul 2:50 pagi 00 saat (setiap hari) dan juga 2:50 pagi 10 saat. Setiap hari!! Tapi kenapa saya buat alarm pada waktu yang hanya beza 10 saat?? Sebab saya bijak!! Hahaha. Takdela.. Sebab saya nak assign 2 job berbeza pada 2 waktu berbeza.

Macam ni, pada waktu 2:50 pagi 00 saat, saya nak LED saya ON dan selepas 10 saat, Alarm akan trigger sekali lagi dan kali ini saya bagi arahan dia untuk OFF  balik LED tadi. Senangkan? Kalau anda nak 20 saat, 1 minit, 1 jam, tukar je pada baris Alarm1Low.

Kalau nak 10 Alarm dalam sehari? Declare la 20 Alarm dengan nama berbeza. Kenapa 20?? Yelah, sebab 10 untuk ON, 10 lagi untuk OFF. Tak gitu? Guna la Alarm2High, Alarm2Low, Alarm3High, Alarm3Low dan seterusnya.. Lepas tu, assign void untuk setiap Alarm tadi. Simple mimple kn?

Arduino Nano + RTC DS3231 + LCD

SELAMAT MENCUBA!!