# PENGHITUNG RAKAAT SHALAT

## 🎥 VIDEO TUTORIAL LENGKAP

Pengen bikin alat yang bisa bantu ngitung rakaat saat shalat? Simak dulu video ini biar makin paham alurnya sebelum ngetik kodenya:

<iframe height="314" src="https://www.youtube.com/embed/AqhvBT6tZdc" style="max-width: 100%; border: none;" width="560"></iframe>

---

## 🔌 WIRING ATAU RANGKAIAN

<span style="white-space: pre-wrap;">Gak perlu tebak-tebakan kabel! Skema pemasangan lengkap bisa kamu lihat di halaman berikut ini: 👉 </span>[WIRING MAKE KIT ULTRASONIC](https://docs.ichibot.id/books/ichibot-make-kit-ultrasonic/page/wiring-make-kit-ultrasonic)

---

## 💻 SOURCE CODE

Yuk kita masuk ke bagian utama: source code! Kode berikut akan membaca jarak dari sensor ultrasonik dan menghitung rakaat berdasarkan jumlah sujud. Cukup praktis untuk digunakan saat latihan atau pembelajaran. 🚀

```c++
#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);
  }
}
```

<span style="white-space: pre-wrap;">Sudah di-copy? Sekarang tinggal upload ke board Arduino kamu! Untuk panduan lengkap cara upload program, buka: </span>[SEMUA TENTANG ARDUINO IDE](https://docs.ichibot.id/books/semua-tentang-arduino-ide)

---

## 🧠 PENJELASAN PROGRAM

- ****Sensor Ultrasonik:****<span style="white-space: pre-wrap;"> Digunakan untuk mendeteksi jarak kepala ke lantai saat sujud.</span>
- ****Deteksi Sujud:****<span style="white-space: pre-wrap;"> Jika jarak kurang dari 10 cm dan sebelumnya belum sujud → tambah 1 hitungan sujud.</span>
- ****Hitung Rakaat:****<span style="white-space: pre-wrap;"> Setiap 2 sujud dianggap 1 rakaat. Jumlah rakaat otomatis bertambah.</span>
- ****LCD 16x2:****<span style="white-space: pre-wrap;"> Menampilkan jarak + status rakaat &amp; sujud secara real-time.</span>
- ****Buzzer:****<span style="white-space: pre-wrap;"> Memberi bunyi tiap selesai 1 rakaat, jumlah beep sesuai jumlah rakaat.</span>

Alat ini cocok untuk latihan shalat mandiri, pembelajaran anak-anak, atau bahan eksperimen AIoT berbasis gesture sederhana. Cukup andal untuk digunakan sebagai pelatihan logika mikrokontroler juga!

---

**Semoga bermanfaat, dan semoga ibadahmu makin khusyuk dan teknologinya makin canggih! 🌙🤖**