#define PIN_ECHO 8 // Definisi pin untuk input sensor ultrasonik (echo)
#define PIN_TRIG 7 // Definisi pin untuk output sensor ultrasonik (trigger)
#define pinBuzzer 13 // Definisi pin untuk buzzer
#include <Servo.h> // Mengimpor library untuk mengontrol servo motor
Servo myservo; // Objek untuk mengontrol servo motor
int rotasi = 90; // Variabel untuk menyimpan posisi rotasi servo motor
int interval = 0; // Variabel untuk menyimpan interval
// Fungsi untuk membaca jarak dari sensor ultrasonik dalam sentimeter
float readDistanceCM(){
digitalWrite(PIN_TRIG, LOW); // Mengirimkan sinyal rendah ke trigger sensor
delayMicroseconds(2); // Delay 2 mikrodetik
digitalWrite(PIN_TRIG, HIGH); // Mengirimkan sinyal tinggi ke trigger sensor
delayMicroseconds(10); // Delay 10 mikrodetik
digitalWrite(PIN_TRIG, LOW); // Mengirimkan sinyal rendah ke trigger sensor
int duration = pulseIn(PIN_ECHO, HIGH); // Mengukur durasi sinyal pantul
return duration * 0.034/2; // Mengonversi durasi menjadi jarak dalam sentimeter
}
// Fungsi untuk memainkan suara buzzer berdasarkan interval yang ditentukan
void soundBuzzer(){
if(interval < 500){
tone(pinBuzzer, 250); // Memainkan suara buzzer dengan frekuensi 250 Hz
}else
if(interval > 500){
tone(pinBuzzer, 100,800); // Memainkan suara buzzer dengan frekuensi 100 Hz selama 800 ms
};
}
// Fungsi untuk konfigurasi awal
void setup() {
pinMode(PIN_TRIG, OUTPUT); // Mengatur pin trigger sebagai output
pinMode(PIN_ECHO, INPUT); // Mengatur pin echo sebagai input
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200
pinMode(pinBuzzer, OUTPUT); // Mengatur pin buzzer sebagai output
myservo.attach(9); // Menghubungkan servo motor ke pin 9
myservo.write(90); // Mengatur posisi awal servo motor pada 90 derajat
}
// Fungsi utama yang akan terus diulang
void loop() {
tutupPalang(); // Memanggil fungsi untuk mengontrol palang
interval +=100; // Menambahkan nilai interval sebesar 100
if(interval>1000) interval = 0; // Mengatur ulang interval jika sudah melebihi 1000
}
// Fungsi untuk mengontrol palang
void tutupPalang(){
float jarak = readDistanceCM(); // Membaca jarak dari sensor ultrasonik
if(jarak > 0 && jarak < 50 ){ // Jika jarak dalam rentang 0 hingga 50 cm
soundBuzzer(); // Memainkan suara buzzer
tutup(); // Menutup palang
}else{
buka(); // Membuka palang
noTone(pinBuzzer); // Mematikan suara buzzer
}
}
// Fungsi untuk menutup palang dengan menggerakkan servo motor
void tutup(){
if(rotasi <= 90){
myservo.write(rotasi); // Menggerakkan servo motor sesuai posisi rotasi
delay(100); // Delay 100 milidetik
rotasi--; // Mengurangi nilai rotasi
}
if(rotasi <= 0 ) rotasi = 0; // Jika rotasi mencapai 0, tetapkan ke 0
}
// Fungsi untuk membuka palang dengan menggerakkan servo motor
void buka(){
if(rotasi <= 90){
myservo.write(rotasi); // Menggerakkan servo motor sesuai posisi rotasi
delay(100); // Delay 100 milidetik
rotasi+=4; // Menambah nilai rotasi
}
if(rotasi >= 90 ) rotasi = 90; // Jika rotasi mencapai 90, tetapkan ke 90
}