#include <Servo.h>
// Mendefinisikan pin yang terhubung ke servo, sensor ultrasonik, dan buzzer
const int servoPin = 9; // Ganti dengan pin yang sesuai untuk servo
const int trigPin = 2; // Ganti dengan pin yang sesuai untuk trigger ultrasonik
const int echoPin = 3; // Ganti dengan pin yang sesuai untuk echo ultrasonik
const int buzzerPin = 5; // Ganti dengan pin yang sesuai untuk buzzer
Servo myServo;
void setup() {
// Mengatur pin sebagai OUTPUT untuk servo dan buzzer
pinMode(servoPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Mengatur pin sebagai INPUT dan OUTPUT untuk sensor ultrasonik
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Menghubungkan servo ke pin yang ditentukan
myServo.attach(servoPin);
// Inisialisasi Serial Monitor
Serial.begin(9600);
}
void loop() {
// Membaca jarak dari sensor ultrasonik
int distance = readUltrasonicDistance();
// Menentukan apakah pintu rel harus terbuka atau tertutup
if (distance < 10) {
openGate(); // Jika objek terlalu dekat, buka pintu rel
} else {
closeGate(); // Jika objek cukup jauh, tutup pintu rel
}
// Memberikan efek suara buzzer sesuai dengan keadaan pintu rel
if (distance < 10) {
playTrainSound(); // Jika pintu terbuka, berikan efek suara kereta
}
// Tunggu sebentar sebelum membaca ulang sensor
delay(100);
}
int readUltrasonicDistance() {
// Kirim sinyal ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Baca durasi pulsa ultrasonik
int duration = pulseIn(echoPin, HIGH);
// Hitung jarak berdasarkan durasi pulsa
int distance = duration * 0.034 / 2;
// Tampilkan jarak pada Serial Monitor (untuk debugging)
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
return distance;
}
void openGate() {
// Buka pintu rel (gerakkan servo)
myServo.write(0);
}
void closeGate() {
// Tutup pintu rel (gerakkan servo)
myServo.write(90);
}
void playTrainSound() {
// Berikan efek suara buzzer
tone(buzzerPin, 1000); // Ganti frekuensi sesuai kebutuhan
delay(500); // Berikan efek suara selama 0.5 detik
noTone(buzzerPin); // Matikan buzzer
}