Sourche Code untuk project ini dapat di download di google drive saya melalui link nerikut :
https://drive.google.com/open?id=0B7t_g4hdtuILczh2RV9tS0IybUU
Membuat Digital Clock + Prayer Time + Thermometer dengan LCD TFT 2.4" dan RTC DS3231
Module yang dibutuhkan dalam Project ini :
- 1 Unit Arduino Uno Atmega328- 1 Unit Module RTC DS3231
- 1 Unit Module LCD TFT 2,4 inch dengan Chip Controller ILI9328 / ILI9325 / ILI9341
- Beberapa pcs kabel Jumper Dupont Male-Female dan Female-Female
(Apabila anda mempunyai LCD TFT 2,4 yang berbeda Seri Chip Driver Controllernya mungkin tidak
bisa berjalan dengan Library Adafruit dan HARUS menggunakan library mcufriend_kbv atau Uglib
sehingga harus ada modifikasi coding pada bagian tampilan display nya )
Library Arduino yang dibutuhkan dalam Project ini :
- Library SPFD5408 untuk LCD TFT dengan chip ILI9325/9328 download disini.- Library Adafruit_LCD_TFT untuk LCD TFT dengan chip ILI9341/Other Chip download disini.
- Library mcufriend_kbv untuk LCD TFT yang tidak mau jalan dengan Lib Adafruit download disini.
- Library RTC DS3231 download disini.
(Beberapa kasus apabila anda menggunakan LCD TFT 2,4 yang menggunakan library selain
SPFD5408 (mcufriend dan Adafrui TFT_LCD) harus mengatur ulang posisi cursor text & shape.
Wiring Module ke Arduino Board Project ini :
Menghubungkan Arduino uno dengan Module LCD TFT 2,4"-Karena Module LCD TFT 2,4" sudah berbentuk Uno Shiled maka tidak perlu adanya Wiring jumper dari module ini ke Arduino Board.Yang perlu kita perhatikan adalah adanya pin yang nantinya akan dipakai bersama oleh Module LCD TFT dan Module RTC DS3231 yaitu pin Analog A4.
-Pin A4 pada Arduino dipakai oleh Module TFT LCD sebagai RESET PIN yang fungsinya sebagai Trigger LCD BEGIN atau untuk memulai penggunaan LCD dan pengkosongan layar
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_TFTLCD.h> // Hardware-specific library // The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example). #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
Pada sample coding dari library kita dapat melihat bahwa pin Analog A0 sampai dengan A4 digunakan oleh LCD termasuk A4 sebagai LCD RESET.
Pada sample diatas juga disebutkan bahwa pin LCD RESET dapat menggunakan pin selain A4 (Apabila pin A4 akan digunakan untuk keperluan lain.misal komunikasi i2c/iic/twi) yaitu dengan menggabungkan pin LCD RESET dengan PIN RESET (RST) pada board Arduino.
Saya tidak menyarankan anda menggunakan metode diatas (LCD RESET ke Arduino RESET pin) karena LCD tidak akan langsung bekerja saat arduino mendapatkan power supply dan akan BLANK putih sampai anda menekan tombol reset pada Arduino baru LCD akan Start.
Hal ini bisa kita akali dengan menggunakan pin yang tersisa (yang tidak digunakan oleh LCD) yaitu pin A5, D0 dan D1. Ketiga pin tersebut adalah sisa pin pada Arduino Uno setelah menggunakan LCD TFT 2,4+Touchscreen+Memory Card/data logger.
Kita tidak akan menggunakan pin A5 karena A5 adalah pin SCL yang akan kita gunakan untuk komunikasi i2c dengan RTC DS3231.Pin D0 juga adalah Pin RX Arduino artinya kalau kita menggunakanya maka Arduino akan mengalami Error saat Upload Program dari USB.Jadi kita akan menggunakan Pin D1 sebagai pin trigger LCD RESET sebagai pengganti PIN A4.
Maka pada Define pin LCD akan kita rubah seperti di bawah ini :
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_TFTLCD.h> // Hardware-specific library // The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example). #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET 1 // Pin D1 Arduino kita fungsikan sebagai pin LCD RESET
Pada penggunaan LCD nya kita tidak boleh memasukan pin LCD Reset ke dalam lubang A4 pada Board Arduino karena kita akan menghubungkanya dengan pin D1.Jadi Jika kita akan menghubungkan langsung LCD ke Arduino Board kita harus "membengkokan" pin LCD Reset ke dalam atau keluar agar tidak masuk ke lubang A4 kemudian kita dapat menggunakan kabel Jumper untuk menghubungkan pin LCD RESET dengan Pin D1 (TX) pada Arduino Uno Board.
(Perhatikan gambar diatas, Jumper kabel warna hitam dari pin LCD RST menghubung ke pin D1 Arduino)
Catatan : Karena pin D1 adalah pin TX Serial Arduino dan kita gunakan untuk keperluan selain Serial Comunication maka kita tidak boleh mengaktifkan fungsi Serial pada Arduino ( Serial.begin();), jika Serial pada arduino diaktifkan maka LCD akan terus Restart jika ada signal TTL/serial keluar dari PIN TX(D1)
Menghubungkan Arduino uno dengan Module RTC DS3231
RTC DS3231 < --> Arduino Uno
VCC <--> pin 5V Arduino
GND <--> pin GND Arduino
SDA <--> pin SDA Arduino (A4)
SCL <--> pin SCL Arduino (A5)
Karena bagian depan PIN Arduino sudah penuh tertutup LCD Shiled maka anda bisa menggunakan bagian belakang Arduino untuk mengambil jalur kabel jumper duppont untuk Module DS3231.
Apabila Anda menggunakan Arduino Uno Clone CK340 dengan dilengkapi lubang (troughhole) disisi dalam Female Header Arduino,anda bisa memasang MALE HEADER (pin tulang ikan) pada lubang tersebut melalui sisi belakang Board Arduino Uno Clone CH340.
Sketch Coding Arduino :
Berikut adalah Sketch Coding Arduino unuk project iniPastikan anda sudah download semua library yang dibutuhkan dan memasukanya ke dalam folder Libraries pada Folder Installer Arduino IDE.
Untuk program ini saya menyarankan untuk menggunakan Versi Arduino IDE diatas Ver.1.6.5
Copy semua coding dibawah ini kemudian Upload ke Arduino Board anda.
/////////////////////////////////////////////// // Coding ini dibuat Oleh Dani Rajacell /////// // Untuk www.belajarduino.com ///////////////// // Support by www.tokopedia.com/rajacell ////// // Copyright 27/8/2016 Rev.0.1 //////////////// /////////////////////////////////////////////// #include <DS3231.h> //Memanggil RTC3231 Library #include <Wire.h> // i2C Conection Library //#include <Adafruit_TFTLCD.h> // Hardware-specific library #include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library #include "Jadwal_Sholat_Bekasi.h" //File jadwal Shollat untuk Bekasi //#include "Jadwal_Sholat_JakPus.h" //File jadwal Shollat untuk Jakarta Pusat //untuk library jadwal sholat daerah lain bisa hubungi admin web ini #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET 1 // Can alternately just connect to Arduino's reset pin #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Init RTC DS3231 DS3231 rtc(SDA, SCL); // Init a Time-data structure Time t; //pencacah string time() //Mengambil waktu jam dari waktu Compile/Upload di system Windows //digunakan untuk setting RTC pertama kali uint8_t hh = 0, mm = 0, ss = 0, dd = 0, bb = 0; int yy = 0; String Day = " "; String Month = " "; //analog clock float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0; // Saved H, M, S x & y multipliers float sdeg = 0, mdeg = 0, hdeg = 0; uint16_t osx = 120, osy = 120, omx = 120, omy = 120, ohx = 120, ohy = 120; // Saved H, M, S x & y coords void setup() { //pinMode (0, OUTPUT); //Untuk Fungsi Alarm rtc.begin(); //Memulai RTC tft.reset(); //Memulai LCD tft.begin(0x9328); //LCD Address ILI9328 tft.setRotation (3); //Set LCD to Lanscape tft.fillScreen (BLACK); //Set Background Color //Gunakan untuk setting RTC pertama kali (setelah RTC di setup upload ulang tanpa kode set RTC) rtc.setTime (15, 37, 00); //set jam (hh,mm,ss) //rtc.setDate(23, 8, 2016); //set tanggal (dd,bb,yyyy) } /////////////////////////////////////////////// // Coding ini dibuat Oleh Dani Rajacell /////// // Untuk www.belajarduino.com ///////////////// // Support by www.tokopedia.com/rajacell ////// // Copyright 27/8/2016 Rev.0.1 //////////////// /////////////////////////////////////////////// void loop(){ t = rtc.getTime(); Day = rtc.getDOWStr(); //mengambil data String nama Hari Month = rtc.getMonthStr(1); //mengambil data String nama Bulan hh = t.hour,DEC; mm = t.min,DEC; ss = t.sec,DEC; dd = t.date,DEC; bb = t.mon,DEC; yy = t.year,DEC; analogClock (); //menjalankan tampilan jam analog if (hh==0&&mm==0&&ss==1){tft.fillScreen (BLACK);} //menjalankan running text dibagian atas tft.fillRect (0,0,319,10,BLACK); tft.setTextColor (WHITE,BLACK); tft.setTextSize (1); tft.setCursor (ss*3.3,1); tft.print (F("www.belajarduino.com")); //Menampilkan data 'Date" dari RTC tft.setTextColor (YELLOW,BLACK); tft.setTextSize (2); tft.setCursor (20,20); tft.print (dd); tft.print (F(".")); tft.print (Month); tft.print (F(".")); tft.print (yy); //Menampilkan data Suhu dari RTC tft.setCursor (220,20); tft.setTextColor (RED,BLACK); tft.print (rtc.getTemp()); tft.print (F("'C")); //JAM UTAMA tft.setTextColor (rainbow(ss*2),BLACK); tft.setTextSize (6); tft.setCursor (20,50); if(hh<10){tft.print (F("0"));} tft.print (hh); tft.print (":"); if(mm<10){tft.print (F("0"));} tft.print (mm); tft.print (":"); if(ss<10){tft.print (F("0"));} tft.print (ss); //Menampilkan data nama Hari (now) tft.setTextColor (MAGENTA,BLACK); tft.setTextSize (3); if (Day.length()==8){tft.setCursor (152,103);} else if (Day.length()==7){tft.setCursor (166,103);} else {tft.setCursor (180,103);} tft.print (Day); //Menampilkan Jadwal Solat String pTime =" "; if (bb==8){pTime = Aug[dd-1];} //if (bb==9){pTime = Sep[dd-1];} // Untuk bulan September 2016 //if (bb==10){pTime = Okt[dd-1];} // Untuk bulan Oktober 2016 //data jadwal sholat diambil dari www.jadwalsholat.org //Menampilkan Jadwal Sholat tft.setTextColor (rainbow(120-(ss*2)),BLACK); tft.setTextSize (2); tft.setCursor (145,140); tft.print (F("Shubuh = ")); tft.print(pTime.substring(0,5)); tft.setCursor (145,158); tft.print (F("Dzuhur = ")); tft.print(pTime.substring(18,23)); tft.setCursor (145,176); tft.print (F("Ashar = ")); tft.print(pTime.substring(24,29)); tft.setCursor (145,194); tft.print (F("Magrib = ")); tft.print(pTime.substring(30,35)); tft.setCursor (145,212); tft.print (F("Isya' = ")); tft.print(pTime.substring(36,41)); } /////////////////////////////////////////////// // Coding ini dibuat Oleh Dani Rajacell /////// // Untuk www.belajarduino.com ///////////////// // Support by www.tokopedia.com/rajacell ////// // Copyright 27/8/2016 Rev.0.1 //////////////// /////////////////////////////////////////////// //Membuat Rainbow TFT SetColor untuk mengganti ganti warna jam unsigned int rainbow(byte value) { byte red = 0; byte green = 0; byte blue = 0; byte quadrant = value / 32; if (quadrant == 0) { blue = 31; green = 2 * (value % 32); red = 0; } if (quadrant == 1) { blue = 31 - (value % 32); green = 63; red = 0; } if (quadrant == 2) { blue = 0; green = 63; red = value % 32; } if (quadrant == 3) { blue = 0; green = 63 - 2 * (value % 32); red = 31; } return (red << 11) + (green << 5) + blue; } /////////////////////////////////////////////// // Coding ini dibuat Oleh Dani Rajacell /////// // Untuk www.belajarduino.com ///////////////// // Support by www.tokopedia.com/rajacell ////// // Copyright 27/8/2016 Rev.0.1 //////////////// /////////////////////////////////////////////// //Jam analog void analogClock () { boolean initial = 1; uint16_t xpos = 65; // x posisi jam sdeg = ss * 6; mdeg = mm * 6 + sdeg * 0.01666667; hdeg = hh * 30 + mdeg * 0.0833333; hx = cos((hdeg - 90) * 0.0174532925); hy = sin((hdeg - 90) * 0.0174532925); mx = cos((mdeg - 90) * 0.0174532925); my = sin((mdeg - 90) * 0.0174532925); sx = cos((sdeg - 90) * 0.0174532925); sy = sin((sdeg - 90) * 0.0174532925); if (ss == 0 || initial) { initial = 0; // Erase hour and minute hand positions every minute tft.drawLine(ohx, ohy, xpos, 171, BLACK); ohx = hx * 62 + xpos + 1; ohy = hy * 62 + 171; tft.drawLine(omx, omy, xpos, 171, BLACK); omx = mx * 84 + xpos; omy = my * 84 + 171; } // Redraw new hand positions, hour and minute hands not erased here to avoid flicker tft.drawLine(osx, osy, xpos, 171, BLACK); osx = sx * 90 + xpos + 1; osy = sy * 90 + 171; tft.drawLine(osx, osy, xpos, 171, RED); tft.drawLine(ohx, ohy, xpos, 171, CYAN); tft.drawLine(omx, omy, xpos, 171, WHITE); tft.drawLine(osx, osy, xpos, 171, RED); tft.fillCircle(xpos, 171, 3, RED); tft.drawRoundRect(xpos-50, 121, 100, 100, 10, WHITE); }
Untuk .ino file dan sample library jadwal sholat silahkan download disini.
Coding ini tidak akan bekerja tanpa library jadwal sholat (.h file) yang disimpan bersama ino filenya.
Video Review :
Membuat Library Jadwal Sholat dari data www.jadwalsholat.org
1.Buka situs www.jadwalsholat.org2.Pilih nama kota anda (atau kota terdekat bila tidak ada)
3.Pilih Bulan dan tahun dari data yang akan diambil
4.Blok data dari angka 01 (pada tanggal) hingga jam terakhir (jam isya tanggal terakhir)
5.Buka Arduino IDE dan New File, hapus semua text
6. ketik char* Aug[] = {
kemudian paste data dari jadwalsholat yang sudah di copy tadi
Hilangkan/hapus nomor tanggal (group kolom pertama) dan data Imsyak (group kolom kedua) seperti yang saya kotakin diatas.sehingga nampak seperti dibawah ini :
Apit sediap baris data dengan tanda (") agar setiap baris data menjadi sebuah String kemudian
tambahkan tanda koma (,) didepan setiap baris data mulai data baris kedua (data baris pertama jangan dikasih koma) sebagai pemisah data string tanggal pertama dengan taggal berikutnya.
Terakhir tambahkan tanda (;) setelah } sebagai tanda akhir perintah (jadi };).
Perhatikan gambar dibawah :
Kemudian Save as Sketch code tersebut menjadi sebuah H file.
Klik File -> Save as -> Nama File.h
Simpan h file ini 1 folder dengan .ino file program ini dan pastikan nama file yang anda masukan pada sketch Jam Digital sama dengan nama file library (.h file) yang anda buat.
Komentar ini telah dihapus oleh pengarang.
BalasHapusmantaaaaap gan makasih gan... kalo hanya untuk jam ama thermo contol gan gimana gan..?
BalasHapusOm bikin speedo pake lcd tft...
BalasHapusNanti ane belanja lg ma si om nya lg hehehe
selamat pagi gan..mau tanya untuk library jadwal sholat, ada cara kah biar bisa sedikit variabel globalnyanya,,
BalasHapusdi isi jadwal pada semua bulan sram bisa mencapai 13 kb,,,
boleh minta library untuk daerah Kota Surakarta
BalasHapusgan itu bakai lcd yang berapa kali berapa
BalasHapusgan punya simulasinya di proteus dan untuk library proteus tambahan. klo boleh minta tolong kirim ke e-mail saya
BalasHapusbagussusilo646@gmail.com
mas dani kalau di tambahi dipflayer suara adzan bisa orak mas? pengen buat mas
BalasHapusmin kalo coba diproteus search komponen ds3231 apa min? saya cari library nya susah min. makasih min
BalasHapussaat di verivikasi file.h memiliki kesalhan
BalasHapusmin..kalau tulisanya kebalik gimana ya?jadi yang harusnya misal ngadep ke depan ini ngadepnya kebelakang
BalasHapusGan untuk board arduino mega...apakah source kodenya sama
BalasHapusMAshaAllah I want to do the same application. But I am using TFT LCD TActile 2.8 instead of 2.4 is it possible to help me
BalasHapusbuat p10 dong gan
BalasHapusAda yang menggunakan seven segmen gak mas?
BalasHapusbisakah jam ini library untuk waktu sholatnya dibuat abadai dengan memasukkan rumus penghitungan hisab? mohon pencerahan
BalasHapusHi
BalasHapusVery good project.
How I can get contact with you?
I need your support.
gan mau tanya, saya pake arduino auto adzan saya matikan lampu , pada saat saya buat cooding di skecth kok begitu tampilan di serial monitor, jam dan trigger waktunya tidak bisa tampil sedangkan time RTC dan triggernya ada. mohon pencerahan
BalasHapusOm Dani, projeknya bagus sekali, saya sudah coba tapi layar tft kaya semut ( kaya televisi ga dapet antena), Saat RTC module belum dikonek gambar semutnya diam, saat RTC dikonek tetap semut tapi bergerak. Mohon pencerahannya, terima kasih sebelumnya
BalasHapusSudah saya temukan solusinya, ternyata setelah pakai library mcufriend_kbv tampilan sudah bisa sesuai. terima kasih
BalasHapusBeautiful watch!
BalasHapusI would like to use it with the tft ili9341 SPI Breakout display and need to know how to connect the pins, which are different;
And what should be changed in the sketch; Help, Thanks