#include <OneWire.h> // Library untuk DS18B20
#include <DallasTemperature.h> // Library untuk DS18B20
#include <DHT.h> // Library untuk DHT22
#include <Wire.h> // Library untuk I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD
#include <Servo.h> // Library untuk Servo
// **PIN SETUP**
#define ONE_WIRE_BUS 2 // DS18B20 DATA pin
#define DHTPIN 3 // DHT22 DATA pin
#define DHTTYPE DHT22 // DHT22 tipe sensor
#define TRIG_PIN 4 // Ultrasonik Trig pin
#define ECHO_PIN 5 // Ultrasonik Echo pin
#define SERVO_PIN 6 // Servo Motor pin
// Inisialisasi objek sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature ds18b20(&oneWire);
DHT dht(DHTPIN, DHTTYPE);
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel
float temperatureDS18B20;
float temperatureDHT22;
float humidityDHT22;
float distance;
void setup() {
// Inisialisasi serial monitor
Serial.begin(9600);
// Inisialisasi
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Sistem Siap");
delay(2000);
lcd.clear();
// Inisialisasi sensor
ds18b20.begin();
dht.begin();
myServo.attach(SERVO_PIN);
// Konfigurasi Ultrasonik
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// **1. Membaca suhu dari DS18B20**
ds18b20.requestTemperatures();
temperatureDS18B20 = ds18b20.getTempCByIndex(0);
// **2. Membaca suhu dan kelembapan dari DHT22**
temperatureDHT22 = dht.readTemperature();
humidityDHT22 = dht.readHumidity();
// **3. Membaca jarak dari sensor ultrasonik**
distance = getDistance();
// **4. Kontrol Servo berdasarkan jarak**
if (distance < 10) {
myServo.write(0); // Servo bergerak ke posisi 0 derajat
} else if (distance < 20) {
myServo.write(90); // Servo berge rak ke posisi 90 derajat
} else {
myServo.write(180); // Servo bergerak ke posisi 180 derajat
}
// **5. Menampilkan data di LCD**
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DS18B20: ");
lcd.print(temperatureDS18B20, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("DHT: ");
lcd.print(temperatureDHT22, 1);
lcd.print("/");
lcd.print(humidityDHT22, 1);
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(distance, 1);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Servo: ");
lcd.print(getServoPosition());
delay(2000);
}
// Fungsi untuk membaca jarak dari sensor Ultrasonik
float getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicrosecon ds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
return distan ce;
}
// Fungsi untuk mendapatkan posisi servo
int getServoPosition() {
if (distance < 10) return 0;
if (distance < 20) return 90;
return 180;
}