# ALAT UKUR TINGGI BADAN DIGITAL

## 📏 ALAT UKUR TINGGI BADAN OTOMATIS

Proyek ini menggunakan sensor ultrasonik untuk mengukur tinggi badan secara otomatis. Saat dinyalakan, alat akan kalibrasi jarak ke lantai selama 3 detik, lalu siap digunakan. Hasil pengukuran akan ditampilkan di layar selama 10 detik agar mudah dibaca!

---

## 🔌 WIRING

<table id="bkmrk-komponenpin-arduinoh"><colgroup><col></col><col></col></colgroup><tbody><tr><th>Komponen

</th><th>Pin Arduino

</th></tr><tr><td>HC-SR04 VCC

</td><td>5V

</td></tr><tr><td>HC-SR04 GND

</td><td>GND

</td></tr><tr><td>HC-SR04 TRIG

</td><td>D9

</td></tr><tr><td>HC-SR04 ECHO

</td><td>D10

</td></tr><tr><td>LCD I2C SDA

</td><td>A4

</td></tr><tr><td>LCD I2C SCL

</td><td>A5

</td></tr><tr><td>Buzzer (+)

</td><td>D8

</td></tr><tr><td>Buzzer (–)

</td><td>GND

</td></tr></tbody></table>

---

## 💻 SOURCE CODE

```c++
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

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

LiquidCrystal_I2C lcd(0x27, 16, 2);

long lantai = 0;
bool sudahKalibrasi = false;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Kalibrasi...");
  
  // Kalibrasi lantai (ambil rata-rata 30x)
  long total = 0;
  for (int i = 0; i < 30; i++) {
    total += bacaJarak();
    delay(100);
  }
  lantai = total / 30;
  sudahKalibrasi = true;
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Siap ukur!");
  delay(2000);
  lcd.clear();
}

void loop() {
  if (!sudahKalibrasi) return;

  // Tunggu benda mendekat (kepala)
  if (bacaJarak() < lantai - 10) {
    lcd.setCursor(0,0);
    lcd.print("Mengukur...");
    
    long total = 0;
    for (int i = 0; i < 30; i++) {
      total += bacaJarak();
      delay(100);
    }
    long rata2 = total / 30;
    long tinggi = lantai - rata2;

    tone(buzzerPin, 2000);
    delay(500);
    noTone(buzzerPin);

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Tinggi:");
    lcd.setCursor(0,1);
    lcd.print(tinggi);
    lcd.print(" cm");

    delay(10000); // tahan tampilan selama 10 detik
    lcd.clear();
    lcd.print("Siap ukur!");
    delay(1000);
    lcd.clear();
  }

  delay(300);
}

long bacaJarak() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long durasi = pulseIn(echoPin, HIGH);
  return durasi * 0.0343 / 2; // dalam cm
}
```

---

## 🧠 PENJELASAN PROGRAM

- ****Kalibrasi Awal:****<span style="white-space: pre-wrap;"> Alat mengukur jarak ke lantai selama 3 detik pertama (30x pengukuran) untuk mengetahui tinggi referensi lantai.</span>
- ****Pengukuran:****<span style="white-space: pre-wrap;"> Ketika ada objek mendekat (kepala), alat mengukur ulang dan menghitung tinggi = lantai - kepala.</span>
- ****Rata-rata:****<span style="white-space: pre-wrap;"> Setiap hasil adalah rata-rata dari 30 pembacaan untuk menghindari error.</span>
- ****Output:****<span style="white-space: pre-wrap;"> Nilai tinggi ditampilkan di LCD selama 10 detik, dengan buzzer menandakan selesai ukur.</span>

🧒 Cocok untuk alat pengukur tinggi di rumah, sekolah, atau lab sains mini!

---

**Yuk bikin versi digital pengukur tinggi kamu sendiri! Tambahkan fitur NFC, logging ke SD card, atau bahkan upload ke IoT kalau mau lebih keren 😎**