#include <Servo.h>
const int trigPin = 2; // Pin trigger sensor ultrasonik
const int echoPin = 3; // Pin echo sensor ultrasonik
const int servoPin = 9; // Pin servo
const int buzzerPin = 5; // Pin buzzer
Servo myServo; // Objek servo
long distanceThreshold = 20; // Ambang batas jarak untuk menutup palang
void setup() {
Serial.begin(9600); // Inisialisasi komunikasi serial
pinMode(trigPin, OUTPUT); // Set pin trigger sebagai output
pinMode(echoPin, INPUT); // Set pin echo sebagai input
myServo.attach(servoPin); // Menghubungkan servo ke pin yang ditentukan
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai output
}
void loop() {
long distance = getDistance(); // Mendapatkan jarak dari sensor ultrasonik
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < distanceThreshold) {
// Jika kereta api mendekati, tutup palang
moveBarrier(true);
// Berikan peringatan suara menggunakan buzzer
soundAlarm();
} else {
// Jika tidak ada kereta api, buka palang
moveBarrier(false);
}
delay(1000); // Tunggu sejenak sebelum membaca lagi
}
// Fungsi untuk mendapatkan jarak dari sensor ultrasonik
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}
// Fungsi untuk menggerakkan servo untuk membuka atau menutup palang
void moveBarrier(bool close) {
if (close) {
myServo.write(0); // Tutup palang
Serial.println("Palang Ditutup");
} else {
myServo.write(90); // Buka palang
Serial.println("Palang Dibuka");
}
}
// Fungsi untuk memberikan peringatan suara menggunakan buzzer
void soundAlarm() {
tone(buzzerPin, 1000, 500); // Mainkan nada 1000 Hz selama 500ms
Serial.println("Peringatan: Kereta Api Mendekati!");
delay(500); // Tunggu sejenak sebelum membaca lagi
noTone(buzzerPin); // Matikan buzzer
}