#include <Servo.h> // Menggunakan Library Servo untuk mengontrol motor servo
const int triggerPin = 7; // Pin trigger sensor ultrasonik
const int echoPin = 6; // Pin echo sensor ultrasonik
const int servoPin = 9; // Pin kontrol motor servo
const int buzzerPin = 8; // Pin kontrol buzzer
Servo servo; // Inisialisasi objek Servo untuk mengontrol motor servo
long duration; // Variabel untuk menyimpan waktu perjalanan gelombang ultrasonik
int distance; // Variabel untuk menyimpan jarak dari sensor ultrasonik ke objek
bool isOpen = false; // Variabel untuk menyimpan status tempat minum (buka atau tutup)
void setup() {
pinMode(triggerPin, OUTPUT); // Mengatur pin trigger sebagai OUTPUT
pinMode(echoPin, INPUT); // Mengatur pin echo sebagai INPUT
pinMode(buzzerPin, OUTPUT); // Mengatur pin buzzer sebagai OUTPUT
servo.attach(servoPin); // Menghubungkan objek Servo dengan pin kontrol motor servo
}
void loop() {
digitalWrite(triggerPin, LOW); // Menghentikan sinyal trigger ultrasonik
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH); // Memulai sinyal trigger ultrasonik
delayMicroseconds(10);
digitalWrite(triggerPin, LOW); // Menghentikan sinyal trigger ultrasonik
duration = pulseIn(echoPin, HIGH); // Mengukur durasi sinyal echo dari sensor ultrasonik
distance = duration * 0.034 / 2; // Menghitung jarak berdasarkan durasi sinyal echo
if (distance < 10) { // Jarak kurang dari 10 cm (tergantung ukuran gelas)
if (!isOpen) { // Jika tempat minum belum terbuka
servo.write(90); // Buka tempat minum (motor servo bergerak ke posisi 90 derajat)
isOpen = true; // Update status tempat minum menjadi terbuka
}
digitalWrite(buzzerPin, HIGH); // Mengaktifkan buzzer (membunyikan buzzer)
} else {
if (isOpen) { // Jika tempat minum sudah terbuka
servo.write(0); // Tutup tempat minum (motor servo bergerak ke posisi 0 derajat)
isOpen = true; // Update status tempat minum menjadi terbuka
}
digitalWrite(buzzerPin, LOW); // Mematikan buzzer
}
}