#include <Servo.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define SERVO_PIN 11
#define MAX_DISTANCE 20
Servo servo;
bool isOpen = false;
void setup() {
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
}
void loop() {
long duration, distance;
// Mengirim sinyal ultrasonik
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
// Mengukur durasi dan menghitung jarak
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) / 29.1;
// Validasi jarak
if (distance < 0 || distance > MAX_DISTANCE) {
distance = MAX_DISTANCE + 1; // Atur ke nilai yang lebih besar dari MAX_DISTANCE
}
// Kontrol servo berdasarkan jarak
if (distance <= MAX_DISTANCE && !isOpen) {
servo.write(90); // Buka tutup
isOpen = true;
delay(1000); // Tunggu selama 1 detik
} else if (distance > MAX_DISTANCE && isOpen) {
servo.write(0); // Tutup tutup
isOpen = false;
}
// Menampilkan jarak di Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(100); // Tunggu sebelum pembacaan berikutnya
}open
close