Arduino ezan okuyan saat projesi, İslami ibadet gereksinimlerini teknoloji ile birleştiren özel bir dijital saat sistemidir. DS1302 gerçek zamanlı saat modülü ile doğru zamanı takip eden, SD kart üzerinde saklanan ezan ses dosyalarını belirlenen vakitlerde otomatik olarak çalan akıllı İslami saat projesidir. Bu proje, modern teknoloji ile dini değerleri harmanlayan anlamlı bir elektronik uygulamasıdır.
Ezan okuyan saat, DS1302 RTC modülü ile sürekli zaman takibi yapar ve önceden programlanmış namaz vakitlerini kontrol eder. Belirlenen ezan vakti geldiğinde, SD kart modülü üzerinden ezan ses dosyasını okuyarak hoparlörden yayınlar. LCD ekranda anlık saat, tarih ve sonraki ezan vakti bilgileri görüntülenir.
👉 Arduino Ezan Okuyan Saat Projesi – Video Rehber
Video içeriği: DS1302 RTC programlama, SD kart WAV oynatma, namaz vakitleri hesaplama, İslami takvim entegrasyonu ve estetik saat kasası yapımı
#include <SD.h>
#include <TMRpcm.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <LiquidCrystal_I2C.h>
[Üye Girişi Yaparak Tüm Kodlara Erişin]
Premium paket: GPS koordinat hesaplama, otomatik vakit güncelleme, Hijri takvim, Kıble yönü gösterge, hava durumu entegrasyonu, WiFi zaman senkronizasyonu
#include <SD.h>
#include <TMRpcm.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <LiquidCrystal_I2C.h>
// Pin tanımlamaları
#define SD_CS_PIN 4
#define SPEAKER_PIN 9
#define RTC_CLK_PIN 6
#define RTC_DAT_PIN 7
#define RTC_RST_PIN 8
// RTC ve LCD nesneleri
ThreeWire myWire(RTC_DAT_PIN, RTC_CLK_PIN, RTC_RST_PIN);
RtcDS1302<ThreeWire> rtc(myWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
TMRpcm audio;
// Namaz vakitleri (saat:dakika formatında)
struct PrayerTime {
int hour;
int minute;
String name;
String audioFile;
};
// İstanbul için örnek namaz vakitleri (dinamik hesaplama yapılabilir)
PrayerTime prayerTimes[] = {
{5, 30, "SABAH", "sabah.wav"},
{12, 15, "OGLE", "ogle.wav"},
{15, 45, "IKINDI", "ikindi.wav"},
{18, 20, "AKSAM", "aksam.wav"},
{19, 50, "YATSI", "yatsi.wav"}
};
const int numPrayers = 5;
// Durum değişkenleri
bool azanPlaying = false;
unsigned long azanStartTime = 0;
int currentPrayerIndex = -1;
bool timeSet = false;
// Ayarlar
bool azanEnabled = true;
int volumeLevel = 20; // 0-30 arası
bool hijriCalendar = false;
void setup() {
Serial.begin(9600);
// RTC başlatma
rtc.Begin();
// LCD başlatma
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ezan Saati v1.0");
lcd.setCursor(0, 1);
lcd.print("Baslatiliyor...");
// SD kart başlatma
if (!SD.begin(SD_CS_PIN)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SD Kart Hatasi!");
while (1);
}
// Audio başlatma
audio.speakerPin = SPEAKER_PIN;
audio.setVolume(volumeLevel);
// RTC durumu kontrol
if (!rtc.IsDateTimeValid()) {
Serial.println("RTC saat bilgisi geçersiz, ayarlanıyor...");
// Derleme zamanı ile saat ayarlama
RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
rtc.SetDateTime(compiled);
}
if (!rtc.GetIsRunning()) {
Serial.println("RTC çalışmıyor, başlatılıyor...");
rtc.SetIsRunning(true);
}
Serial.println("Arduino Ezan Saati başlatıldı");
// Başlangıç melodisi
playStartupSound();
delay(2000);
}
void loop() {
// Mevcut zamanı al
RtcDateTime now = rtc.GetDateTime();
if (!now.IsValid()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Saat Hatasi!");
delay(1000);
return;
}
// LCD'yi güncelle
updateDisplay(now);
// Namaz vakti kontrolü
checkPrayerTimes(now);
// Ezan çalma kontrolü
if (azanPlaying) {
// Ezan 3 dakika çalsın
if (millis() - azanStartTime > 180000) {
stopAzan();
}
}
// Seri port komutları (test ve ayar için)
if (Serial.available()) {
processSerialCommands();
}
delay(1000); // 1 saniye güncelleme
}
void updateDisplay(const RtcDateTime& dt) {
// İlk satır: Tarih ve saat
lcd.setCursor(0, 0);
if (hijriCalendar) {
// Hijri takvim gösterimi (basitleştirilmiş)
lcd.print("1445/");
if (dt.Month() < 10) lcd.print("0");
lcd.print(dt.Month());
lcd.print("/");
if (dt.Day() < 10) lcd.print("0");
lcd.print(dt.Day());
} else {
// Miladi takvim
if (dt.Day() < 10) lcd.print("0");
lcd.print(dt.Day());
lcd.print("/");
if (dt.Month() < 10) lcd.print("0");
lcd.print(dt.Month());
lcd.print("/");
lcd.print(dt.Year());
}
lcd.print(" ");
if (dt.Hour() < 10) lcd.print("0");
lcd.print(dt.Hour());
lcd.print(":");
if (dt.Minute() < 10) lcd.print("0");
lcd.print(dt.Minute());
// İkinci satır: Sonraki namaz vakti
lcd.setCursor(0, 1);
int nextPrayer = getNextPrayerIndex(dt);
if (nextPrayer != -1) {
lcd.print("Sonraki: ");
lcd.print(prayerTimes[nextPrayer].name);
lcd.print(" ");
if (prayerTimes[nextPrayer].hour < 10) lcd.print("0");
lcd.print(prayerTimes[nextPrayer].hour);
lcd.print(":");
if (prayerTimes[nextPrayer].minute < 10) lcd.print("0");
lcd.print(prayerTimes[nextPrayer].minute);
} else {
lcd.print("Sabah: ");
if (prayerTimes[0].hour < 10) lcd.print("0");
lcd.print(prayerTimes[0].hour);
lcd.print(":");
if (prayerTimes[0].minute < 10) lcd.print("0");
lcd.print(prayerTimes[0].minute);
lcd.print(" ");
}
}
void checkPrayerTimes(const RtcDateTime& dt) {
if (!azanEnabled || azanPlaying) return;
int currentHour = dt.Hour();
int currentMinute = dt.Minute();
int currentSecond = dt.Second();
// Sadece 0. saniyede kontrol et (saniye başında bir kez)
if (currentSecond != 0) return;
for (int i = 0; i < numPrayers; i++) {
if (currentHour == prayerTimes[i].hour &&
currentMinute == prayerTimes[i].minute) {
playAzan(i);
break;
}
}
}
void playAzan(int prayerIndex) {
if (prayerIndex < 0 || prayerIndex >= numPrayers) return;
Serial.println("Ezan çalıyor: " + prayerTimes[prayerIndex].name);
// LCD'de ezan bilgisi göster
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EZAN VAKTI");
lcd.setCursor(0, 1);
lcd.print(prayerTimes[prayerIndex].name + " NAMAZI");
// Ezan ses dosyasını çal
if (SD.exists(prayerTimes[prayerIndex].audioFile.c_str())) {
audio.play(prayerTimes[prayerIndex].audioFile.c_str());
azanPlaying = true;
azanStartTime = millis();
currentPrayerIndex = prayerIndex;
} else {
Serial.println("Ezan dosyası bulunamadı: " + prayerTimes[prayerIndex].audioFile);
// Alternatif: Buzzer ile basit ezan sesi
playSimpleAzanTone();
}
}
void stopAzan() {
audio.stopPlayback();
azanPlaying = false;
currentPrayerIndex = -1;
Serial.println("Ezan tamamlandı");
// Normal ekrana dön
lcd.clear();
}
int getNextPrayerIndex(const RtcDateTime& dt) {
int currentMinutes = dt.Hour() * 60 + dt.Minute();
for (int i = 0; i < numPrayers; i++) {
int prayerMinutes = prayerTimes[i].hour * 60 + prayerTimes[i].minute;
if (currentMinutes < prayerMinutes) {
return i;
}
}
return -1; // Bugün başka namaz vakti yok, yarın sabah
}
void playStartupSound() {
// Basit başlangıç melodisi
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (int i = 0; i < 8; i++) {
tone(SPEAKER_PIN, melody[i], 200);
delay(250);
}
noTone(SPEAKER_PIN);
}
void playSimpleAzanTone() {
// SD kart dosyası yoksa basit ton ile ezan uyarısı
for (int i = 0; i < 5; i++) {
tone(SPEAKER_PIN, 800, 500);
delay(600);
tone(SPEAKER_PIN, 600, 500);
delay(600);
}
noTone(SPEAKER_PIN);
}
void processSerialCommands() {
String command = Serial.readString();
command.trim();
if (command == "TIME") {
RtcDateTime now = rtc.GetDateTime();
printDateTime(now);
}
else if (command.startsWith("SET_TIME:")) {
// Format: SET_TIME:YYYY,MM,DD,HH,MM,SS
setTimeFromString(command.substring(9));
}
else if (command == "AZAN_ON") {
azanEnabled = true;
Serial.println("Ezan aktif");
}
else if (command == "AZAN_OFF") {
azanEnabled = false;
Serial.println("Ezan kapalı");
}
else if (command.startsWith("VOLUME:")) {
int vol = command.substring(7).toInt();
setVolume(vol);
}
else if (command == "TEST_AZAN") {
playAzan(0); // Sabah ezanını test et
}
else if (command == "PRAYERS") {
printPrayerTimes();
}
else if (command == "HIJRI_ON") {
hijriCalendar = true;
Serial.println("Hijri takvim aktif");
}
else if (command == "HIJRI_OFF") {
hijriCalendar = false;
Serial.println("Miladi takvim aktif");
}
}
void setTimeFromString(String timeStr) {
// Format: YYYY,MM,DD,HH,MM,SS
int year = timeStr.substring(0, 4).toInt();
int month = timeStr.substring(5, 7).toInt();
int day = timeStr.substring(8, 10).toInt();
int hour = timeStr.substring(11, 13).toInt();
int minute = timeStr.substring(14, 16).toInt();
int second = timeStr.substring(17, 19).toInt();
RtcDateTime newTime(year, month, day, hour, minute, second);
rtc.SetDateTime(newTime);
Serial.println("Saat ayarlandı: " + timeStr);
}
void setVolume(int volume) {
volumeLevel = constrain(volume, 0, 30);
audio.setVolume(volumeLevel);
Serial.println("Ses seviyesi: " + String(volumeLevel));
}
void printDateTime(const RtcDateTime& dt) {
Serial.print("Tarih/Saat: ");
Serial.print(dt.Day());
Serial.print("/");
Serial.print(dt.Month());
Serial.print("/");
Serial.print(dt.Year());
Serial.print(" ");
Serial.print(dt.Hour());
Serial.print(":");
Serial.print(dt.Minute());
Serial.print(":");
Serial.println(dt.Second());
}
void printPrayerTimes() {
Serial.println("Namaz Vakitleri:");
for (int i = 0; i < numPrayers; i++) {
Serial.print(prayerTimes[i].name);
Serial.print(": ");
if (prayerTimes[i].hour < 10) Serial.print("0");
Serial.print(prayerTimes[i].hour);
Serial.print(":");
if (prayerTimes[i].minute < 10) Serial.print("0");
Serial.println(prayerTimes[i].minute);
}
}
// Gelişmiş özellikler için fonksiyonlar
void calculatePrayerTimes(float latitude, float longitude) {
// Astronomik hesaplamalara dayalı otomatik vakit hesaplama
// Bu fonksiyon coğrafi koordinatlara göre gerçek vakitleri hesaplar
}
void updatePrayerTimesFromInternet() {
// WiFi modülü ile internet'ten güncel vakit bilgilerini çekme
}
void showQiblaDirection() {
// Dijital pusula ile Kıble yönü gösterimi
}
void playQuranRecitation() {
// SD karttan Kuran-ı Kerim tilaveti oynatma
}
Doğruluk: ±2ppm (parts per million)
Aylık Sapma: ±5.26 saniye
Yıllık Sapma: ±1.05 dakika
Sıcaklık Etkisi: -0.04%/°C
// Güneş açısı hesaplama
float sunAngle = asin(sin(declination) * sin(latitude) +
cos(declination) * cos(latitude) * cos(hourAngle));
// Namaz vakti hesaplama
float prayerTime = 12 + (timeZone - longitude/15) -
acos(-tan(latitude) * tan(declination))/15;
/
├── sabah.wav (Sabah ezanı)
├── ogle.wav (Öğle ezanı)
├── ikindi.wav (İkindi ezanı)
├── aksam.wav (Akşam ezanı)
├── yatsi.wav (Yatsı ezanı)
├── dua.wav (Namaz sonrası dua)
└── config.txt (Ayar dosyası)
| Şehir | Enlem | Boylam | Saat Dilimi |
|---|---|---|---|
| İstanbul | 41.01° | 28.97° | UTC+3 |
| Ankara | 39.92° | 32.85° | UTC+3 |
| Mekke | 21.42° | 39.82° | UTC+3 |
| Medine | 24.47° | 39.61° | UTC+3 |
| Kudüs | 31.77° | 35.23° | UTC+2 |
// Basitleştirilmiş vakit hesaplama
struct Location {
float latitude;
float longitude;
int timezone;
};
void calculatePrayerTimes(Location loc, int day, int month) {
float declination = 23.45 * sin(360 * (284 + day) / 365);
float timeCorrection = 4 * (loc.longitude - 15 * loc.timezone);
// Güneş doğuş/batış hesaplama
float hourAngle = acos(-tan(loc.latitude) * tan(declination));
float sunrise = 12 - hourAngle / 15 - timeCorrection / 60;
float sunset = 12 + hourAngle / 15 - timeCorrection / 60;
// Namaz vakitleri
prayerTimes[0] = {(int)(sunrise - 1.5), (int)((sunrise - 1.5 - (int)(sunrise - 1.5)) * 60)}; // Sabah
prayerTimes[1] = {12, 15}; // Öğle (güneş tepe + 15 dk)
prayerTimes[2] = {(int)(sunrise + 6), 0}; // İkindi (basitleştirilmiş)
prayerTimes[3] = {(int)sunset, (int)((sunset - (int)sunset) * 60)}; // Akşam
prayerTimes[4] = {(int)(sunset + 1.5), (int)((sunset + 1.5 - (int)(sunset + 1.5)) * 60)}; // Yatsı
}| Özellik | Arduino Ezan Saati | Geleneksel Saat | Cami Hoparlörü | Mobil Uygulama |
|---|---|---|---|---|
| Hassasiyet | Çok Yüksek | Orta | Yüksek | Yüksek |
| Kişiselleştirme | Tam | Sınırlı | Yok | Orta |
| Ses Kalitesi | İyi | Düşük | Çok İyi | İyi |
| Güç Tüketimi | Düşük | Çok Düşük | Yüksek | Orta |
| Maliyet | 150-300 TL | 50-100 TL | Ücretsiz | Ücretsiz |
| Bakım | Minimal | Yok | Cami bakımı | Güncelleme |
| Özellik | Çok Zengin | Basit | Tek Amaç | Zengin |
| Malzeme | Ortalama Fiyat (TL) |
|---|---|
| Arduino Uno R3 | 45-60 |
| DS1302 RTC Modülü | 8-15 |
| SD Kart Modülü | 10-18 |
| MicroSD Kart 16GB | 25-40 |
| Hoparlör 8Ω 2W | 12-25 |
| LM386 Amplifikatör | 5-10 |
| 16×2 LCD Panel | 12-18 |
| CR2032 Pil | 3-5 |
| Jumper Kablolar | 8-12 |
| Breadboard/PCB | 10-15 |
| Ahşap Kasa | 20-40 |
| Diğer Elektronik | 10-20 |
| Toplam | 168-278 TL |
Arduino ezan okuyan saat projesi, teknoloji ile manevi değerleri harmanlayan özel bir elektronik projesidir. Bu proje ile hem İslami ibadet gereksinimlerini karşılayabilir hem de modern elektronik teknolojileri öğrenebilirsiniz. DS1302 RTC modülü ile hassas zaman takibi, SD kart ile kaliteli ses sistemi ve LCD ile kullanıcı dostu arayüz sunan bu proje, İslami yaşam tarzını destekleyen teknolojik bir çözümdür.
Anahtar Kelimeler: Arduino ezan saati, İslami dijital saat, DS1302 RTC modülü, SD kart audio player, namaz vakti uyarı sistemi, Arduino İslami proje, ezan okuyan saat yapımı, dini elektronik proje, namaz vakitleri hesaplama, İslami teknoloji
Devre Şeması


Çalışma Videosu
Not : Yapamazsanız. Lütfen önce videoyu dikkatlice izleyiniz.