Saya mengajak teman-teman untuk dapat membuat jam sholat secara mandiri menggunakan Arduino. Di postingan saya memberikan kode program dasar untuk dapat menampilkan jadwal atau waktu sholat secara otomatis hanya dengan memasukkan koordinat, zona waktu, tanggal, bulan serta tahun seperti yang ditunjukkan pada gambar berikut ini:
Saya mendapatkan sebuah library yang sangat bagus di Github bernama Arduino-Prayer-Times yang di posting oleh asmaklad (tidak tahu apakah nama seseorang). Library merupakan hasil konversi dari http://praytimes.org/manual/. Terima kasih prayertimes.org dan asmaklad!
Setelah saya mencoba library , saya membandingkan dengan waktu sholat KEMENAG dan memiliki selisih perbedaan. Dari itu, saya sedikit memodifikasi library Prayer Times tersebut. Link Library yang sudah di edit dapat teman-teman download dengan klik tombol download berikut:
Kode Program
Contoh kode adalah sebagai berikut:
/*
Library milik www.github.com/asmaklad
Kode dasar dari www.ElangSakti.com
Kode modifikasi oleh www.chippiko.com
*/
#include "PrayerTimes.h"
// Array untuk menyimpan waktu shalat
double waktu[sizeof(TimeName) / sizeof(char*)];
// Nama-nama waktu shalat
static const char* NamaWaktu[] = {
"Imsak",
"Subuh",
"Terbit",
"Dzuhur",
"Ashar",
"Terbenam",
"Maghrib",
"Isya'",
"Count"
};
// Konstanta untuk jumlah waktu shalat default, jumlah waktu shalat, dan data waktu (jam dan menit)
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 tanggal, dan zona waktu
int _tahun = 2024;
int _bulan = 2;
int _hari = 8; // tanggal
// Lintang dan bujur dapat diambil dari google maps
float _lat = 4.160260; // lintang
float _lng = 96.132695; // bujur
int _timezone = 7; // zona waktu WIB=7, WITA=8, WIT=9
// Sudut subuh dan isyak Indonesia
int _sudut_subuh = 20;
int _sudut_isyak = 18;
// Koreksi waktu sholat dalam menit:
int koreksiImsak = 10;
int koreksiSubuh = 3;
int koreksiTerbit = -4;
int koreksiZuhur = 3;
int koreksiAshar = 3;
int koreksiTerbenam = -10;
int koreksiMagrib = 3;
int koreksiIsya = 2;
void setup() {
Serial.begin(9600);
// CalculationMethod:
// Jafari, Ithna Ashari
// Karachi, University of Islamic Sciences, Karachi
// ISNA, Islamic Society of North America (ISNA)
// MWL, Muslim World League (MWL)
// Makkah, Umm al-Qura, Makkah
// Egypt, Egyptian General Authority of Survey
// Custom, Custom Setting
set_calc_method(Makkah);
//--------------------------------------------------
// set_asr_method:
//Shafii, // Shafii (standard)
//Hanafi, // Hanafi
set_asr_method(Shafii);
//--------------------------------------------------
// AdjustingMethod:
// None, // No adjustment
// MidNight, // middle of night
// OneSeventh, // 1/7th of night
// AngleBased, // angle/60th of night
set_high_lats_adjust_method(AngleBased);
//-------------------------------------------------
set_fajr_angle(_sudut_subuh); // sudut waktu subuh
set_isha_angle(_sudut_isyak); // sudut waktu isyak
// Menghitung waktu shalat dan mencetaknya
WaktuShalat(WaktuPenting);
CetakWaktuShalat();
}
void loop() {
}
// Fungsi untuk mencetak waktu shalat ke Serial Monitor
void CetakWaktuShalat() {
Serial.println(" ===========================");
Serial.print(" Jadwal Sholat : ");
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++) {
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();
}
// Fungsi untuk menghitung waktu shalat
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);
// Menambahkan koreksi waktu sesuai dengan waktu shalat
if (i == 0) { // Subuh
menit += koreksiSubuh;
//Tampilkan waktu Imsak
WaktuPenting[waktu_custom][0] = jam;
WaktuPenting[waktu_custom][1] = menit - koreksiImsak;
} else if (i == 1) { // Terbit
menit += koreksiTerbit;
} else if (i == 2) { // Dzuhur
menit += koreksiZuhur;
} else if (i == 3) { // Ashar
menit += koreksiAshar;
} else if (i == 4) { // Terbenam
menit += koreksiTerbenam;
} else if (i == 5) { // Maghrib
menit += koreksiMagrib;
} else if (i == 6) { // Isya
menit += koreksiIsya;
}
// Jika menit melebihi 60, tambahkan satu jam
if (menit >= 60) {
jam++;
menit -= 60;
}
waktu_custom++;
WaktuPenting[waktu_custom][0] = jam;
WaktuPenting[waktu_custom][1] = menit;
}
}
// Fungsi untuk memastikan angka dua digit
String DuaDigit(byte angka) {
if (angka > 9) {
return String(angka);
} else {
String tmp = "0";
tmp.concat(angka);
return tmp;
}
}
Hasil
Setelah kode di upload ke Arduino, buka serial monitor dan kita akan mendapatkan hasil sebagai gambar berikut:
Semoga artikel Kode Progam Jadwal Sholat Arduino C++ ini bermanfaat. Jika teman-teman ada saran dan kritikan, mohon komentar dibawah.