//NAMA : HILMY WIRAWAN
//NPM : 203510216
// Program ini menggunakan sensor ultrasonik untuk mengukur jarak dan memberikan peringatan berupa suara alarm
// serta lampu LED yang berkedip dengan kecepatan yang bervariasi berdasarkan jarak yang diukur.
// Mendefinisikan pin untuk sensor ultrasonik, LED, dan speaker
#define trigerPin 12
#define echoPin 13
#define ledPin 2
#define speakerPin 10
// Variabel untuk menyimpan durasi dan jarak yang diukur
double duration, distance;
// Jarak minimum dan maksimum yang dapat diukur oleh sensor
int minDistance = 1;
int maxDistance = 150;
void setup() {
// Memulai komunikasi serial untuk debugging
Serial.begin(9600);
// Mengatur mode pin sebagai output atau input sesuai kebutuhan
pinMode(trigerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(speakerPin, OUTPUT);
}
void loop() {
// Mengirimkan pulse ultrasonik untuk mengukur jarak
digitalWrite(trigerPin, LOW);
delayMicroseconds(2);
digitalWrite(trigerPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigerPin, LOW);
delayMicroseconds(2);
// Menerima durasi pantulan dan menghitung jarak
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) * 0.0343;
// Memastikan jarak berada dalam batas minimum dan maksimum
if (distance < minDistance) {
distance = minDistance;
} else if (distance > maxDistance) {
distance = maxDistance;
}
// Menghitung waktu jeda berdasarkan jarak untuk mengatur kecepatan alarm
int delayTime;
if (distance <= 50) {
delayTime = map(distance, 2, 50, 2000, 500); // Jarak 2-50: dari sangat lambat ke cepat
} else if (distance <= 100) {
delayTime = map(distance, 50, 100, 500, 250); // Jarak 50-100: dari cepat ke sangat cepat
} else {
delayTime = map(distance, 100, maxDistance, 250, 100); // Jarak 100-150: dari sangat cepat ke sangat sangat cepat
}
// Memberikan peringatan suara dan visual jika jarak kurang dari maksimum
if (distance < maxDistance) {
digitalWrite(ledPin, HIGH);
tone(speakerPin, 400, delayTime);
delay(1000);
digitalWrite(ledPin, LOW);
noTone(speakerPin);
delay(50);
} else {
digitalWrite(ledPin, LOW);
noTone(speakerPin);
}
}