Author : Ila MulyandiNo comments
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 ini
Pastikan 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.org
2.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
Posted On : Wednesday, February 1, 2017Time : 6:01 AM