#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIG_PIN 3
#define ECHO_PIN 2
#define SERVO_PIN 6
#define BUZZER_PIN 4
#define ledr 8
#define ledh 9
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD, ukuran 20x4
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ledr, OUTPUT);
pinMode(ledh, OUTPUT);
myServo.attach(SERVO_PIN);
pinMode(BUZZER_PIN, OUTPUT);
// Inisialisasi servo ke posisi tertutup (misalnya 0 derajat)
myServo.write(0);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("SMART DOOR");
lcd.setCursor(7, 1);
lcd.print("Assiap");
}
void loop() {
long duration, distance;
bool isOpen = false;\
// Mengirimkan sinyal ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mengukur durasi sinyal balik
duration = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak dalam cm
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
// Menampilkan jarak pada LCD
lcd.setCursor(0, 2);
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm");
// Jika jarak kurang dari 10 cm, buka pintu dan bunyikan buzzer
if (distance <= 20) {
myServo.write(90); // Buka pintu (misalnya 90 derajat)
digitalWrite(ledr, LOW);
digitalWrite(ledh, HIGH);
tone(BUZZER_PIN, 10000); // Buzzer berbunyi dengan frekuensi 1000 Hz
delay(1000); // Tunggu 1 detik
noTone(BUZZER_PIN); // Matikan buzzer
isOpen = true;
// delay(5000); // Tunggu 1 detik sebelum menutup pintu
} else {
myServo.write(0); // Tutup pintu
digitalWrite(ledh, LOW);
digitalWrite(ledr, HIGH);
}
static bool lastStatus = false;
if (isOpen != lastStatus) {
lcd.setCursor(0, 3);
if (isOpen) {
lcd.print("Pintu Terbuka ");
} else {
lcd.print("Pintu Tertutup ");
}
lastStatus = isOpen;
}
delay(500); // Tunggu 0.5 detik sebelum mengukur lagi
}