#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <DHT.h>
#define PIR_PIN 2
#define SERVO_PIN 9
#define RELAY_PIN 7
#define LED_PIN 13
#define BUTTON_PIN 3
#define DHT_PIN 4
#define TRIGGER_PIN 5
#define ECHO_PIN 6
#define BUZZER_PIN 8
Servo myservo;
DHT dht(DHT_PIN, DHT11);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD dengan alamat 0x27, 16 kolom dan 2 baris
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0, 0);
lcd.print("IoT Security");
myservo.attach(SERVO_PIN);
dht.begin();
Serial.begin(9600);
}
void loop() {
int pirState = digitalRead(PIR_PIN);
Serial.print("PIR State: ");
Serial.println(pirState); // Debugging dengan mencetak nilai PIR_PIN ke Serial Monitor
if (pirState == HIGH) {
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
lcd.setCursor(0, 1);
lcd.print("Gerakan Terdeteksi");
delay(1000);
digitalWrite(LED_PIN, LOW); // Matikan LED
lcd.clear();
// Gerakkan servo
myservo.write(90);
delay(1000);
myservo.write(0);
// Aktifkan relay
digitalWrite(RELAY_PIN, HIGH);
// Bunyikan buzzer
tone(BUZZER_PIN, 1000, 500);
delay(500);
noTone(BUZZER_PIN);
}
else {
digitalWrite(LED_PIN, LOW); // Pastikan LED mati jika tidak ada gerakan
}
// Baca tombol tekan
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) {
lcd.setCursor(0, 0);
lcd.print("Tombol Ditekan");
delay(1000);
lcd.clear();
}
// Baca suhu dan kelembaban
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban: ");
lcd.print(humidity);
lcd.print(" %");
delay(2000);
lcd.clear();
// Baca jarak dari sensor ultrasonik
long duration, distance;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm");
delay(2000);
lcd.clear();
}