#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define PIN_SUHU 2 // Pin yang terhubung ke DQ sensor suhu DS18B20
#define LCD_ADDRESS 0x27 // Alamat I2C display LCD
#define LED_PIN 13 // Pin LED terhubung ke pin digital 13 Arduino Uno
#define BUZZER_PIN 8 // Pin buzzer terhubung ke pin digital 8 Arduino Uno
// Definisi pin untuk sensor ultrasonik HC-SR04
const int trigPin = 9;
const int echoPin = 10;
OneWire oneWire(PIN_SUHU);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(LCD_ADDRESS, 20, 4); // Inisialisasi display LCD
void setup() {
Serial.begin(9600);
sensors.begin();
lcd.init();
lcd.backlight();
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Baca jarak dari sensor ultrasonik
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // Menghitung jarak dalam cm
// Cek apakah suhu harus dideteksi berdasarkan jarak
bool detectTemperature = (distance <= 20); // Suhu hanya dideteksi jika jarak kurang dari atau sama dengan 20 cm
if (detectTemperature) {
sensors.requestTemperatures();
float suhuC = sensors.getTempCByIndex(0);
Serial.print("Suhu: ");
Serial.print(suhuC);
Serial.println(" °C");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhuC);
lcd.print(" °C");
// Bunyikan buzzer selama 1 detik ketika suhu terdeteksi
tone(BUZZER_PIN, 1000); // Frekuensi 1000 Hz
delay(400); // Durasi 1000 ms (1 detik)
noTone(BUZZER_PIN); // Matikan buzzer
// Kondisi untuk mengontrol LED berdasarkan suhu
if (suhuC > 39.0) {
digitalWrite(LED_PIN, HIGH); // LED menyala jika suhu lebih dari 39°C
} else {
digitalWrite(LED_PIN, LOW); // LED mati jika suhu tidak lebih dari 39°C
}
} else {
// Jarak lebih dari 20 cm, matikan semua output
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN); // Matikan buzzer
lcd.clear(); // Membersihkan LCD
// Tidak menampilkan apa pun di LCD jika jarak lebih dari 20 cm
}
delay(3000); // Periksa suhu setiap 3 detik
}