#include <DHT.h>
#include <Servo.h>
#define LED_PIN 15
#define RELAY_PIN 4
#define BUZZER_PIN 16
#define SERVO_PIN 17
#define LDR_PIN 34
#define TRIG_PIN 12
#define ECHO_PIN 14
#define DHT_PIN 5
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
Servo myServo;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
dht.begin();
myServo.attach(SERVO_PIN);
Serial.println("System initialized");
}
void loop() {
// Mengukur cahaya menggunakan LDR
int ldrValue = analogRead(LDR_PIN);
Serial.print("LDR Value: ");
Serial.println(ldrValue);
if (ldrValue < 1000) {
digitalWrite(LED_PIN, HIGH); // Hidupkan LED jika gelap
} else {
digitalWrite(LED_PIN, LOW); // Matikan LED jika terang
}
// Mengukur suhu dan kelembaban menggunakan DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
if (temperature > 30) {
digitalWrite(RELAY_PIN, HIGH); // Aktifkan relay jika suhu di atas 30°C
} else {
digitalWrite(RELAY_PIN, LOW); // Matikan relay jika suhu di bawah 30°C
}
// Mengukur jarak menggunakan sensor ultrasonik
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 10) {
digitalWrite(BUZZER_PIN, HIGH); // Aktifkan buzzer jika jarak kurang dari 10 cm
myServo.write(90); // Pindahkan servo ke posisi 90 derajat
} else {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer jika jarak lebih dari 10 cm
myServo.write(0); // Kembalikan servo ke posisi awal
}
delay(1000); // Tunda 1 detik sebelum looping ulang
}