#include <LiquidCrystal_I2C.h>
#define LCD_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_ROWS 4
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS);
const int pirPin = 2; // PIR sensor di connect ke Digital Pin 2
const int trigPin = 7; // Trig pin ultrasonic sensor
const int echoPin = 6; // Echo pin ultrasonic sensor
void setup() {
lcd.begin(16,0); // Inisialisasi LCD dengan 16 kolom dan 0 baris
lcd.init(); // Inisialisasi tambahan untuk LCD
lcd.backlight(); // Menghidupkan lampu latar LCD
lcd.setCursor(5,0); //Baris pertama menetapkan kursor pada kolom ke-5 baris ke-0 dan mencetak teks "Motion detected".
lcd.print("Motion detected");
lcd.setCursor(0,1);
lcd.print("Opening the door"); //Baris kedua menetapkan kursor pada kolom ke-0 baris ke-1 dan mencetak teks "Opening the door".
pinMode(pirPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//mengonfigurasi mode pin untuk pin yang terhubung ke sensor PIR, pin trigPin untuk sensor ultrasonik,
// dan pin echoPin untuk sensor ultrasonik. INPUT berarti pin digunakan untuk membaca sinyal.
Serial.begin(9600);//menginisialisasi komunikasi serial pada kecepatan 9600 baud.
}
void loop() {
// PIR Sensor untuk Automatic Door
//If motion is equal to HIGH, it means motion is detected, and a message
//is printed to the Serial Monitor saying "Motion detected! Opening the door..."
int motion = digitalRead(pirPin);
if (motion == HIGH) {
Serial.println("Motion detected! Opening the door...");
}
// Ultrasonic Sensor for Touchless Faucet
//Kode mengirimkan sinyal pulsa pendek (10 mikrodetik) ke sensor ultrasonik menggunakan trigPin.
//Fungsi pulseIn(echoPin, HIGH) mengukur durasi pulsa echo yang dikembalikan oleh sensor ultrasonik.
//Jarak dalam sentimeter dihitung dengan rumus distance = duration / 58.2.
//Jika jarak yang dihitung kurang dari 10 cm, ini berarti ada objek yang terdeteksi,
//dan pesan "Object detected within 10 cm! Activating the faucet..." akan dicetak ke Serial Monitor.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration / 58.2;
if (distance < 10) {
Serial.println("Object detected within 12 cm! Activating the faucet...");
}
//delay(5000); menambahkan penundaan 5000 milidetik (5 detik) di akhir loop. Penundaan ini mungkin
//dimaksudkan untuk menghindari pemicu sensor secara terus-menerus dan cepat.
delay(5000);
}