#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>
#include <DHT.h>
#define DHT_PIN 3 // pin sensor DHT dihubungkan ke pin digital 2
#define DHT_TYPE DHT22 // sensor DHT yang digunakan adalah DHT22
DHT dht(DHT_PIN, DHT_TYPE); // inisialisasi objek dht
#define SERIAL_OPTION 0
LiquidCrystal_I2C lcd(0x27,16,2);
RTC_DS1307 RTC;
int servoPin = 8;
int buzzer_pin = 11;
int trigger_pin = 12;
int echo_pin = 13;
int inputPin = 2;
int val = 0;
int time;
int distance;
Servo servo1;
void setup() {
pinMode(buzzer_pin, OUTPUT);
Serial.begin(9600);
servo1.attach(servoPin);
lcd.begin(16, 2);
pinMode(4,OUTPUT);
pinMode(8,OUTPUT);
pinMode(inputPin,INPUT);
pinMode (trigger_pin, OUTPUT);
pinMode (echo_pin, INPUT);
digitalWrite(3,OUTPUT);
dht.begin(); // inisialisasi sensor DHT
RTC.begin();
}
void loop() {
//Bagian RTC jam
DateTime now=RTC.now();
if (SERIAL_OPTION) {
Serial.print(now.year()); Serial.print("/");
Serial.print(now.month()); Serial.print("/");
Serial.print(now.day()); Serial.print(" ");
Serial.print(now.hour()); Serial.print(":");
Serial.print(now.minute()); Serial.print(":");
Serial.print(now.second()); Serial.print("\n");
}
lcd.setCursor(0,0); lcd.print("DATE: ");
lcd.print(now.year()); lcd.print("/"); lcd.print(now.month()); lcd.print("/"); lcd.print(now.day());
lcd.setCursor(0,1); lcd.print("TIME: ");
lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.print(":"); lcd.print(now.second());
delay(1000);
long duration, cm;
digitalWrite(trigger_pin, LOW);
delayMicroseconds(2);
digitalWrite(trigger_pin, HIGH);
delayMicroseconds(5);
digitalWrite(echo_pin, LOW);
duration = pulseIn(echo_pin, HIGH);
cm = duration * 0.034 / 2;
servo1.write(0);
lcd.clear();
//Bagian Sensor Suhu dan kelembapan
float temperature = dht.readTemperature();
lcd.setCursor(0,0);
lcd.print("Tmp:");
lcd.print(temperature);
if (temperature > 30) {
tone(buzzer_pin, 440);
delay(500);
noTone(buzzer_pin);
} else {
digitalWrite(buzzer_pin, LOW);
}
// Bagian sensor PIR
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(4, HIGH); // turn LED ON
lcd.setCursor(10,0);
lcd.print("ON");
delay(500);
Serial.println("Motion detected!");
} else {
digitalWrite(4, LOW); // turn LED OFF
lcd.setCursor(12,0);
lcd.print("OFF");
Serial.println("Motion ended!");
}
// Bagian sensor Jarak
if(cm < 40){
servo1.write(90);
lcd.setCursor(0,1);
lcd.print("Door:OPEN");
delay (500);
}
else {
servo1.write(0);
lcd.setCursor(0,1);
lcd.print("Door:CLOSED");
delay(500);
}
delay(2000);
//Serial.print(" : ");
//Serial.println(cm);
lcd.clear();
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}