# Hack Your Skills! to be Professional Mechatronics
Membuat Jam Digital Masjid dengan Arduino tanpa EEPROM
Kali ini ElangSakti.com akan berbagi source code / coding jadwal shalat dengan Arduino. Source code ini menjadi jantung dari jam digital masjid yang biasanya dipasang di dinding masjid untuk menampilkan jadwal shalat secara otomatis, atau ada juga yang menyebutnya alarm sholat otomatis. Gambar di bawah ini hanya ilustrasi. :)
Misal Anda menjual alat dengan teknik penentuan jadwal sholat ini, ada beberapa kelebihan atau kekurangan yang akan Anda alami :
Silakan dikembangkan! Jika dalam pengembangannya Anda menemukan masalah, silakan tanyakan di komentar.
Pada dasarnya nama waktu sholat adalah bahasa Inggris, namun kita modifikasi agar yang muncul bahasa Indonesia. Lalu, sebenarnya dalam library tidak dihitung waktu imsak, tapi kita modifikasi juga agar bisa menampilkan waktu imsak. Source code lengkapnya seperti ini.
Tanggal julian mencapai 2 juta lebih, sedangkan itu sudah batas atas untuk tipe data float. Pakai double juga tidak mungkin. Jadi, sempat frustasi karena nilai tanggalnya selisih 0.5 an. Hehe, memang tabiat penulis, jika ada proses yang salah, kalau dilanjutkan hasilnya akan tetap salah. Supaaya tidak buang-buang waktu, maka kita memutuskan untuk menghentikan proses konversi.
Setelah proses konversi dihentikan, selanjutnya adalah googling contoh library yang sudah jadi. Bertemulah dengan PrayerTimes buatan si asmaklad. Langsung dicoba mengubah tanggal, sudut subuh dan isyak, lalu mengubah timezone, dan yang terakhir mengubah lintang dan bujur. Hasilnya, cocok!
Kita cocokkan dengan beberapa jadwal milik kemenag di alamat http://sihat.kemenag.go.id/waktu-sholat, hasilnya lebih cepat 2 menit. Berarti dalam program sudah diberi batas aman 2 menit, atau memang yang di kemenag yang diberi batas aman 2 menit. Jadi, hasil perhitungan jadwal sholat dengan library ini sudah bagus.
Akan tetapi, ternyata ketika kita cek tanggal juliannya juga sama, hasil perhitungannya tanggal Juliannya juga overflow. Jadi, kelkeliruan data sedikit pada tanggal Julian tidak berpengaruh banyak ya... :D
Akan tetapi, selisih 2 menit bisa "diakali" dengan fasilitas untuk mengoreksi data, itu bukan masalah serius bagi Anda yang sudah terbiasa membuat program. Akhirnya, library ini sudah kita pakai untuk mengembangkan alarm adzan otomatis yang sedang kita ujicoba. :)
Jika Anda bingung, silakan tanyakan di komentar ya.
Jika ada yang kurang jelas, Anda boleh bertanya di komentar.
Update project ini bisa dibaca di Adzan & Waktu Sholat Otomatis.
Otomatis Update Selamanya tanpa EEPROM
Berbeda dengan beberapa jadwal sholat menggunakan EEPROM untuk menyimpan jadwal sholat tahunan. Source code ini sangat fleksibel dan tidak perlu update jadwal secara rutin, sebab jadwal sholat dihasilkan dari proses perhitungan sebagaimana hisab yang biasanya dilakukan oleh kementrian agama. Ada rumus yang ditanam dalam program ini. Sehingga alat ini tidak memerlukan EEPROM untuk menyimpan jadwal sholat yang biasanya hanya berisi 1 tahun saja.Misal Anda menjual alat dengan teknik penentuan jadwal sholat ini, ada beberapa kelebihan atau kekurangan yang akan Anda alami :
- Customer tidak perlu repot update jadwal setiap bulan atau setiap tahun
- Anda sebagai penjual alat juga tidak perlu repot melakukan update jadwal sholat secara berkala
- Tapi Anda sebagai penjual alat tidak akan mendapat tip tambahan karena customer tidak perlu jasa update jadwal dari Anda lagi :D
- Alat bisa dikirim ke mana saja, yang penting Anda tahu titik lintang bujurnya, Anda tidak direpotkan dengan tabel jadwal tahunan yang angkanya banyak berbaris-baris itu. :)
- Customer juga bisa dengan mudah mengganti lokasi lintang bujur apabila customer tiba-tiba berubah menjadi reseller atau agen Anda, enak kan?
- Tidak perlu ada software untuk memprogram jadwal dari komputer karena data yang dimasukkan simpel.
- Perhitungan jadwal sholat ini berlaku di seluruh kota dan kabupaten se-Indonesia!
Hanya Source Code Menghitung Jadwal Sholat
Source code yang kita bagikan hanya untuk menghitung jadwal sholat dalam 1 hari. Jika Anda berharap bahwa source code ini sudah diintegrasikand dengan RTC, LED P10, bluetooth, suara MP3, dan sebagainya dan sebagainya, maka Anda salah kamar. Jika Anda ingin belajar, coba kembangkan source code ini. Jika Anda ingin jualan, silakan kembangkan source code ini juga, Hehehe. Berikut ini adalah contoh outputd dari source code yang kita buat :Silakan dikembangkan! Jika dalam pengembangannya Anda menemukan masalah, silakan tanyakan di komentar.
Coding Arduino dan Penjelasannya
Setelah Anda copas atau melihat source code di bawah ini, silakan lanjutkan dengan membaca penjelasannya. Sebab, ada beberapa hal yang perlu Anda perhatikan agar mudah jika ingin melakukan modifikasi.Pada dasarnya nama waktu sholat adalah bahasa Inggris, namun kita modifikasi agar yang muncul bahasa Indonesia. Lalu, sebenarnya dalam library tidak dihitung waktu imsak, tapi kita modifikasi juga agar bisa menampilkan waktu imsak. Source code lengkapnya seperti ini.
#include "PrayerTimes.h" /* * Program Menentukan Waktu Shalat * Berdasarkan lokasi lintang dan bujur. * * Explored by www.ElangSakti.com * */ double waktu[sizeof(TimeName)/sizeof(char*)]; static const char* NamaWaktu[] ={ "Imsak", "Subuh", "Syuruq", "Dzuhur", "Ashar", "Terbenam", "Maghrib", "Isya'", "Count" }; const byte JUMLAH_WAKTU_DEFAULT = sizeof(waktu)/sizeof(double); const byte JUMLAH_WAKTU = sizeof(NamaWaktu)/sizeof(char*); const byte DATA_WAKTU = 2; // jam dan menit byte WaktuPenting[JUMLAH_WAKTU][DATA_WAKTU]; // pengaturan jam dan tanggal int _tahun = 2017; int _bulan = 11; int _hari = 19; // tanggal // pengaturan bujur lintang (Malang) float _lat = -7.9786395; // lintang float _lng = 112.5617424; // bujur // timezone int _timezone = 7; // zona waktu WIB=7, WITA=8, WIT=9 // sudut subuh dan maghrib Indonesia int _sudut_subuh = 20; int _sudut_isyak = 18; void setup() { Serial.begin(19200); set_calc_method(ISNA); // metode perhitungan set_asr_method(Shafii); // madzhab? set_high_lats_adjust_method(AngleBased); set_fajr_angle(_sudut_subuh); // sudut waktu subuh set_isha_angle(_sudut_isyak); // sudut waktu isyak } void loop() { WaktuShalat(WaktuPenting); CetakWaktuShalat(); delay(60000L); } void CetakWaktuShalat(){ Serial.println(" ==========================="); Serial.print(" Imsakiyah Tgl. "); Serial.print(_hari); Serial.print("/"); Serial.print(_bulan); Serial.print("/"); Serial.print(_tahun); Serial.println(); Serial.println(" ==========================="); for(byte i=0; i<JUMLAH_WAKTU-1; i++){ if( i == 5 ) continue; Serial.print("\t"); Serial.print( NamaWaktu[i] ); Serial.print("\t"); Serial.print( DuaDigit(WaktuPenting[i][0]) ); Serial.print(":"); Serial.println( DuaDigit(WaktuPenting[i][1]) ); } Serial.println(); } void WaktuShalat(byte WaktuShalat[JUMLAH_WAKTU][DATA_WAKTU]){ get_prayer_times(_tahun, _bulan, _hari, _lat, _lng, _timezone, waktu); byte waktu_custom = 0; for(byte i=0; i<JUMLAH_WAKTU_DEFAULT-1; i++){ int jam, menit; get_float_time_parts(waktu[i], jam, menit); if( i == 0 ){ WaktuPenting[waktu_custom][0] = jam; WaktuPenting[waktu_custom][1] = menit-10; waktu_custom++; WaktuPenting[waktu_custom][0] = jam; WaktuPenting[waktu_custom][1] = menit; } else { WaktuPenting[waktu_custom][0] = jam; WaktuPenting[waktu_custom][1] = menit; } waktu_custom++; } } String DuaDigit(byte angka){ if( angka > 9 ){ return String(angka); } else { String tmp = "0"; tmp.concat(angka); return tmp; } }
Cerita tentang Library dan Perhitungannya
Library yang kita gunakan untuk perhitungan adalah PrayerTimes buatan asmaklad (bisa didownload dari https://github.com/asmaklad/Arduino-Prayer-Times). Sebenarnya saya mencoba untuk mengonversi program PrayTimes buatan Hamid Zarraby - Zadeh dkk yang bisa bisa didownload di http://praytimes.org/code/. Akan tetapi proses konversi menjadi mandeg, sebab hasil perhitungan tanggal Juliannya overflow. :PTanggal julian mencapai 2 juta lebih, sedangkan itu sudah batas atas untuk tipe data float. Pakai double juga tidak mungkin. Jadi, sempat frustasi karena nilai tanggalnya selisih 0.5 an. Hehe, memang tabiat penulis, jika ada proses yang salah, kalau dilanjutkan hasilnya akan tetap salah. Supaaya tidak buang-buang waktu, maka kita memutuskan untuk menghentikan proses konversi.
Setelah proses konversi dihentikan, selanjutnya adalah googling contoh library yang sudah jadi. Bertemulah dengan PrayerTimes buatan si asmaklad. Langsung dicoba mengubah tanggal, sudut subuh dan isyak, lalu mengubah timezone, dan yang terakhir mengubah lintang dan bujur. Hasilnya, cocok!
Kita cocokkan dengan beberapa jadwal milik kemenag di alamat http://sihat.kemenag.go.id/waktu-sholat, hasilnya lebih cepat 2 menit. Berarti dalam program sudah diberi batas aman 2 menit, atau memang yang di kemenag yang diberi batas aman 2 menit. Jadi, hasil perhitungan jadwal sholat dengan library ini sudah bagus.
Akan tetapi, ternyata ketika kita cek tanggal juliannya juga sama, hasil perhitungannya tanggal Juliannya juga overflow. Jadi, kelkeliruan data sedikit pada tanggal Julian tidak berpengaruh banyak ya... :D
Akan tetapi, selisih 2 menit bisa "diakali" dengan fasilitas untuk mengoreksi data, itu bukan masalah serius bagi Anda yang sudah terbiasa membuat program. Akhirnya, library ini sudah kita pakai untuk mengembangkan alarm adzan otomatis yang sedang kita ujicoba. :)
Keterangan Program
Saat Anda mulai memodifikasi program di atas, silakan perhatikan baik-baik variabel ini:// pengaturan jam dan tanggal int _tahun = 2017; int _bulan = 11; int _hari = 19; // tanggal // pengaturan lintang bujur (Malang) float _lat = -7.9786395; // lintang float _lng = 112.5617424; // bujur // timezone int _timezone = 7; // zona waktu WIB=7, WITA=8, WIT=9 // sudut subuh dan Isya' Indonesia int _sudut_subuh = 20; int _sudut_isyak = 18;
Pengaturan Tanggal
Untuk coba-coba, Anda bisa mengisi tanggal (hari, bulan, dan tahun) secara manual. Akan tetapi, jika ingin otomatis, silakan kombinasikan dengan RTC. Anda bisa mencoba RTC DS1307 atau DS1302. Jika ingin digunakan dalam jangka panjang dan lebih valid, gunakan RTC DS3231.Pengaturan Lintang dan Bujur
Lintang dan bujur bisa Anda cari di google maps. Atau, beberapa website di internet juga menginformasikan lintang dan bujur kota dan kabupaten di Indonesia. Anda bisa mengacu pada lintag dan bujur tersebut. Cara lain untuk mengetahui lintang dan bujur adalah dengan aplikasi WA (Whatsapp), silakan aktifkan GPS Anda, lalu kirim lokasi Anda ke temannya. Nanti lokasi yang terkirim bisa digunakan untuk mengetahui lintang dan bujur posisi Anda saat ini.Jika Anda bingung, silakan tanyakan di komentar ya.
Pengaturan Timezone
Zona waktu di Indonesia ada 3, yaitu WIB (Waktu Indonesia Barat), WITA (Waktu Indonesia Tengah), dan WIT (Waktu Indonesia Timur). WIB, WITA, dan WIB memiliki nilai masing-masing. WIB = 7, WITA = 8, dan WIT = 9. Jika Anda di posisi WITA, silakan isi _timezone dengan angka 8.Jika ada yang kurang jelas, Anda boleh bertanya di komentar.
Pengaturan Sudut Subuh dan Isya'
Berdasarkan ketetapan (ini juga dipakai oleh kemenag), bahwa sudut subuh dan isyak untuk seluruh Indonesia sudah ditetapkan. Jadi, jika Anda membuat alat yang akan digunakan di seluruh Indonesia, Anda tidak perlu mengganti nilai _sudut_subuh dan _sudut_isyak.Update project ini bisa dibaca di Adzan & Waktu Sholat Otomatis.
Top Artikel :
Written by ElangSakti
Membuat Jam Digital Masjid dengan Arduino tanpa EEPROM
Bahasan: Kali ini ElangSakti.com akan berbagi source code / coding jadwal shalat dengan Arduino . Source code ini menjadi jantung dari jam digital ...
Published at Minggu, 19 November 2017, Updated at Minggu, 19 November 2017
Reviewed by dr. on
Rating: 4.7
Membuat Jam Digital Masjid dengan Arduino tanpa EEPROM
Bahasan: Kali ini ElangSakti.com akan berbagi source code / coding jadwal shalat dengan Arduino . Source code ini menjadi jantung dari jam digital ...
Published at Minggu, 19 November 2017, Updated at Minggu, 19 November 2017
Reviewed by dr. on
Rating: 4.7
Langganan:
Posting Komentar
(
Atom
)
Saya bingung konversi waktu sholat dengan jam .selalu error terus...
BalasHapusBisa bantu caranya ...:(
Saya bingung konversi waktu sholat dengan jam .selalu error terus...
BalasHapusBisa bantu caranya ...:(
Saya bingung konversi waktu sholat dengan jam .selalu error terus...
BalasHapusBisa bantu caranya ...:(
Mas, mau nanyak jika saya mau membuat bel sekolah otomatis menggunakan suara bahan apa aja yg di butuhkan, mohon totorialnya mas.
BalasHapusAssalamualaikum saudara,
BalasHapussaya sahabat dari Malaysia,
saya sedang berusaha membuat jam solat seperti yang saudara kongsikan. Namun ketika saya cuba verify program yang saudara berikan, saya menghadapi masalah tertulis 'JUMLAH_WAKTU' was not declared in this scope. Mohon bantuan saudara, apa yang harus saya lakukan. terima kasih.
Wa'alaikumussalam.
HapusTiap variabel yg ada harus dideklarasikan dlu saudara.
Bikin nama variabel dan tipe datanya di awal terlebih dahulu
Apakah produk di atas ada yg dijual dan bisa langsung digunakan? Harga berapa? Saya butuh untuk mesjid di kampung saya
BalasHapus...cuba program guna module GPS murah NEO-6M asal China...fungsi automatic bacaan long & lat, Altitude ,speed (halaju) mengunakan satelite US percuma...hanya mengunakan 3 wire...vcc=3v3 ,GND, TX NEO ke UNO RX...
BalasHapusSaya ingin membeli modul mp3
BalasHapusga ada gmbar pcb layaut nya..
BalasHapusmas untuk mengeluarkan azan otomatis pas dengan jam sholat itu, untuk speaker menggunakan modul apa?
BalasHapusAssalamualaikum...bisa minta no kontak WA
BalasHapusGan skema rangkaiannya ada?
BalasHapusKelemahan metode lintang bujur ini kadang tidak sesuai.dg tabel jadwal sholat yg sudah di pakai oleh masjid.
BalasHapusMetode pengisian ke eeprom lebih saya suka karena bisa measukan data jadwal sholat sesuai permintaan customer.
untuk saat ini memang rata-rata seperti itu, tapi ke depan tiap masjid akan punya jadwal awal waktu sholat masing-masing sesuai titik lokasi dan perhitungan ilmu falak.
Hapus