PENGHITUNG RAKAAT SHALAT
VIDEO TUTORIAL LENGKAP:
WIRING ATAU RANGKAIAN SILAHKAN BACA DI PAGE WIRING MAKE KIT ULTRASONIC
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