#include <OneWire.h>
#include <SoftwareWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <DHT22.h>
#include <Servo.h>
// setup dht22
#define DHTPIN 12
DHT22 dht22(DHTPIN);
// setup lcd
#define LCD_COLUMNS 18
#define LCD_LINES 2
LiquidCrystal_I2C lcd(0x27, LCD_COLUMNS, LCD_LINES);
// setup sensor DS
OneWire dsWire(13);
DallasTemperature sensorDS(&dsWire);
// setup pirmotion & buzzer
int pirInput = 10;
int buzzpin = 4;
// setup ultrasonic & servo
int trig = 9;
int echo = 8;
Servo myservo;
float cekJarakUltrasonic(){
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
return duration / 58;
}
void setup() {
lcd.init();
lcd.backlight();
pinMode(trig, OUTPUT);
Serial.begin(115200);
myservo.attach(5);
delay(2);
sensorDS.begin();
delay(20);
// put your setup code here, to run once:
}
// fungsi untuk mengambil input dari DS18B20
float getTempDS(){
sensorDS.requestTemperatures();
return sensorDS.getTempCByIndex(0);
}
void loop() {
// tampilkan hasil DS18B20 ke lcd
lcd.setCursor(0, 0);
lcd.print("temp : ");
lcd.print(getTempDS());
lcd.print((char)223);
lcd.print("C");
// tampilkan hasil dht22 ke lcd
lcd.setCursor(0,1);
lcd.print("hum : ");
lcd.print(dht22.getHumidity());
lcd.print("%");
// jika pirmotion mendeteksi gerakan maka akan menyalakan buzzer
bool val = digitalRead(pirInput);
if (val){
tone(buzzpin,262,250);
}else{
noTone(buzzpin);
}
// jika jarak benda dari sensor ultrasonic lebih kecil atau sama dengan 100 maka servo akan bergerak 90 derajat
float ultrasonic = cekJarakUltrasonic();
if (ultrasonic<=100){
myservo.write(90);
}else{
myservo.write(0);
}
}