Skip to main content

PENGHITUNG RAKAAT SHALAT

  1. VIDEO TUTORIAL LENGKAP:
  2. WIRING ATAU RANGKAIAN SILAHKAN BACA DI PAGE WIRING MAKE KIT ULTRASONIC
  3. SOURCE CODE:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define trigPin 9
#define echoPin 10
#define buzzerPin 8

LiquidCrystal_I2C lcd(0x27, 16, 2);

int sujudCount = 0;
int rakaatCount = 0;
bool isSujud = false; // status sebelumnya

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Hitung Rakaat");
  delay(1500);
  lcd.clear();
}

void loop() {
  long duration;
  float distance;

  // Baca jarak dari sensor ultrasonik
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration * 0.0343) / 2;

  // Tampilkan jarak di LCD baris 1
  lcd.setCursor(0, 0);
  lcd.print("Jarak: ");
  lcd.print(distance, 1);
  lcd.print(" cm   ");

  // Deteksi sujud (misalnya kepala <10 cm dari sensor)
  if (distance < 10 && !isSujud) {
    sujudCount++;
    tampilkanSujud(sujudCount);
    isSujud = true;

    // Cek jika sudah genap 2 sujud => 1 rakaat
    if (sujudCount % 2 == 0) {
      rakaatCount++;
      tampilkanRakaat(rakaatCount);
      bunyikanBeep(rakaatCount);
    }
  }

  // Reset status saat tidak sujud (jarak lebih dari threshold)
  if (distance > 30) {
    isSujud = false;
  }

  delay(100);
}

void tampilkanRakaat(int rakaat) {
  lcd.setCursor(0, 1);
  lcd.print("Rakaat: ");
  lcd.print(rakaat);
  lcd.print("   ");
}

void tampilkanSujud(int sujud) {
  lcd.setCursor(13, 1);
  lcd.print("S");
  lcd.print(sujud);
  lcd.print("   ");
}

void bunyikanBeep(int jumlah) {
  for (int i = 0; i < jumlah; i++) {
    tone(buzzerPin, 1000);
    delay(200);
    noTone(buzzerPin);
    delay(200);
  }
}

SILAHKAN DI-COPY LALU DI UPLOAD, CARA UPLOAD BISA LIHAT DI BOOK SEMUA TENTANG ARDUINO IDE