#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#define DHTPIN 13 // Pin data sensor suhu
#define DHTTYPE DHT22 // Tipe sensor (DHT22)
#define SERVO_PIN 6 // Pin untuk motor servo (diganti menjadi pin 6)
#define LED_PIN 8 // Pin untuk LED (diganti menjadi pin 8)
#define CONTRAST_PIN A0 // Pin untuk potensiometer
#define LCD_COLS 16 // Jumlah kolom pada layar LCD
#define LCD_ROWS 2 // Jumlah baris pada layar LCD
#define I2C_ADDR 0x27 // Alamat I2C dari modul LCD
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS); // Inisialisasi LCD dengan I2C
Servo myservo;
void setup() {
Serial.begin(9600);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0, 0); // Posisi kursor pada baris pertama
lcd.print("KELOMPOK 04"); // Tampilkan teks "KELOMPOK 04" pada baris pertama
dht.begin(); // Inisialisasi sensor suhu
myservo.attach(SERVO_PIN); // Menghubungkan servo ke pin 6 (diganti menjadi pin 6)
pinMode(LED_PIN, OUTPUT); // Atur pin LED sebagai output
}
void loop() {
float temperature = dht.readTemperature(); // Membaca suhu dari sensor
lcd.setCursor(0, 1); // Posisi kursor pada baris kedua
if (temperature > 40) { // Jika suhu di atas 40 derajat
lcd.print(temperature); // Tampilkan suhu aktual pada baris kedua
lcd.print(" C VERY HOT "); // Tampilkan keterangan "C VERY HOT" pada baris kedua
myservo.write(0); // Putar servo ke posisi minimum (0 derajat)
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
delay(1000); // Tunda 1 detik
myservo.write(180); // Putar servo ke posisi maksimal (180 derajat)
delay(1000); // Tunda 1 detik
} else if (temperature > 32) { // Jika suhu di atas 32 derajat dan kurang dari atau sama dengan 40 derajat
lcd.print(temperature); // Tampilkan suhu aktual pada baris kedua
lcd.print(" C HOT "); // Tampilkan keterangan "C HOT" pada baris kedua
myservo.write(0); // Putar servo ke posisi minimum (0 derajat)
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
delay(1000); // Tunda 1 detik
myservo.write(180); // Putar servo ke posisi maksimal (180 derajat)
delay(1000); // Tunda 1 detik
} else { // Jika suhu di bawah atau sama dengan 32 derajat
lcd.print(temperature); // Tampilkan suhu aktual pada baris kedua
lcd.print(" C ADEM "); // Tampilkan keterangan "C ADEM" pada baris kedua
myservo.write(90); // Putar servo ke posisi tengah (90 derajat)
digitalWrite(LED_PIN, LOW); // Matikan LED
}
int contrast = analogRead(CONTRAST_PIN); // Baca nilai potensiometer
lcd.setContrast(contrast / 4); // Atur kontras LCD berdasarkan nilai potensiometer
delay(1000); // Tunda 1 detik sebelum membaca suhu lagi
}