#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <DHT.h>
// Pin setup
const int trigPin = 12;
const int echoPin = 13;
const int servoPin = 9;
const int buzzerPin = 10;
const int dhtPin = 3;
const int pirPin1 = 11; // Pin untuk sensor PIR 1
const int pirPin2 = 1; // Pin untuk sensor PIR 2
const int pirPin3 = 2; // Pin untuk sensor PIR 3
const int ledPin1 = 0; // Pin untuk LED 1
const int ledPin2 = 4; // Pin untuk LED 2
// LCD setup
LiquidCrystal_I2C lcd(0x27, 16, 2);
// DHT sensor setup
#define DHTTYPE DHT22
DHT dht(dhtPin, DHTTYPE);
// Servo setup
Servo myServo;
// Variabel
int jarak;
float suhu, kelembaban;
int batasJarak = 80; // Sesuaikan batas jarak aman
int sudutMax = 180; // Sudut maksimum pergerakan servo
int statePIR1 = LOW;
int statePIR2 = LOW;
int statePIR3 = LOW;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(pirPin1, INPUT);
pinMode(pirPin2, INPUT);
pinMode(pirPin3, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
myServo.attach(servoPin);
lcd.begin(16, 2);
dht.begin();
for (int i = 0; i <= 6; i++) {
lcd.clear();
lcd.setCursor(i, 0);
lcd.print("Hallo");
lcd.setCursor(1,1);
lcd.print("SELAMAT DATANG");
delay(1000);
}
}
void loop() {
// Baca jarak
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
jarak = pulseIn(echoPin, HIGH) / 2 / 29.1; // Konversi waktu ke jarak
// Baca suhu dan kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
// Baca nilai sensor PIR
int valPIR1 = digitalRead(pirPin1);
int valPIR2 = digitalRead(pirPin2);
int valPIR3 = digitalRead(pirPin3);
// Kontrol servo
if (jarak < batasJarak) {
myServo.write(sudutMax);// Gerakkan servo ke sudut maksimum
tone(buzzerPin, 1000); // Bunyikan buzzer
delay(1000);
} else {
myServo.write(0); // Kembalikan servo ke posisi awal
noTone(buzzerPin);
}
// Kontrol LED berdasarkan sensor PIR
if (valPIR1 == HIGH || valPIR2 == HIGH || valPIR3 == HIGH) {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
tone(buzzerPin, 1000);
myServo.write(sudutMax);
} else {
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
noTone(buzzerPin);
myServo.write(0);
}
// Tampilkan data pada LCD
lcd.clear();
lcd.print("jarak: ");
lcd.print(jarak);
lcd.print("cm");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(t);
lcd.print("C");
delay(1000);
}