#include <Servo.h>
#include <DHT.h>
#include <LiquidCrystal.h>
#define DHTTYPE DHT22
#define DHT_PIN 7 // DHT sensor sambung ke digital pin 7
#define PIR_SENSOR_PIN 2 // PIR motion sensor sambung ke digital pin 2
#define RED_LED_PIN 8 // Red LED sambung ke digital pin 8
#define GREEN_LED_PIN 9 // Green LED sambung ke digital pin 9
#define SERVO_PIN 10 // Servo motor sambung ke digital pin 10
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
Servo servo;
const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
bool motionDetected = false; // bool dipakai untuk menyimpan 2 value true dan false
void setup() {
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(PIR_SENSOR_PIN, INPUT);
lcd.begin(16, 2);
servo.attach(SERVO_PIN);
dht.begin();
Serial.begin(9600);
}
void loop() {
// membaca motion sensor
int motionState = digitalRead(PIR_SENSOR_PIN);
// membaca temperatur dari DHT
float temperature = dht.readTemperature();
float f = dht.readTemperature(true); //mendeklarasi variabel temperatur
// Nge cek Motion
if (motionState == HIGH && temperature > 24) {
motionDetected = true; // ketika ada gerakan + suhu melewati 24 derajat celcius, nyala
lcd.setCursor(0,0); lcd.print("Suhu : "); lcd.print(temperature); lcd.print("C");
lcd.setCursor(0,1); lcd.print("Gerak Terdeteksi");
digitalWrite(RED_LED_PIN, HIGH); // LED Putih nyala
digitalWrite(GREEN_LED_PIN, LOW); // LED Merah mati
for (int pos = 0; pos <= 180; pos += 1) {
servo.write(pos); // Penggerak Servo
delay(20);
}
for (int pos = 180; pos >= 0; pos -= 1) {
servo.write(pos); // Penggerak Servo
delay(20);
}
} else {
motionDetected = false;
lcd.setCursor(0,0); lcd.print("Suhu : "); lcd.print(temperature); lcd.print("C");
lcd.setCursor(0,1); lcd.print("TidakAda Gerakan");
digitalWrite(RED_LED_PIN, LOW); // LED Putih mati
digitalWrite(GREEN_LED_PIN, HIGH); // LED Merah nyala
servo.write(90); // arah servo ke tengah
}
delay(2000); // delay dalam program mebaca
}