#include "DHT.h"
#include <ESP32Servo.h> // Menggunakan pustaka ESP32Servo
#define DHTPIN 4 // Pin data sensor DHT22 di ESP32
#define DHTTYPE DHT22 // Menggunakan sensor DHT22
#define RELAY_PIN 18 // Pin untuk relay
#define LED_PIN 27 // Pin untuk LED
#define SERVO_PIN 12 // Pin untuk servo
DHT dht(DHTPIN, DHTTYPE);
Servo myServo; // Membuat objek servo
// Konfigurasi PWM untuk LED
const int pwmChannel = 0;
const int pwmFreq = 5000; // Frekuensi PWM 5 kHz
const int pwmResolution = 8; // Resolusi PWM 8-bit (0-255)
void setup() {
Serial.begin(115200);
dht.begin();
// Inisialisasi pin relay
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Matikan relay (kipas awalnya mati)
myServo.attach(SERVO_PIN); // Menghubungkan servo ke pin
// Setup PWM untuk LED
ledcSetup(pwmChannel, pwmFreq, pwmResolution); // Setup PWM channel 0
ledcAttachPin(LED_PIN, pwmChannel); // Hubungkan LED_PIN ke channel PWM
}
void loop() {
float temperature = dht.readTemperature(); // Membaca suhu
if (isnan(temperature)) {
Serial.println("Gagal membaca suhu!");
return;
}
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println("°C");
// Jika suhu di atas 25°C, aktifkan relay, gerakkan servo, dan kontrol kecerahan LED
if (temperature > 25) {
digitalWrite(RELAY_PIN, HIGH); // Hidupkan relay (nyalakan kipas)
// Peta suhu dari 25°C - 40°C ke nilai PWM (0-255)
int ledBrightness = map(temperature, 25, 40, 0, 255);
ledBrightness = constrain(ledBrightness, 0, 255); // Batasi kecerahan antara 0 dan 255
ledcWrite(pwmChannel, ledBrightness); // Atur kecerahan LED sesuai suhu
Serial.print("Kecerahan LED: ");
Serial.println(ledBrightness);
// Gerakkan servo
int servoAngle = map(temperature, 25, 40, 0, 180); // Peta suhu ke sudut servo
myServo.write(servoAngle); // Menggerakkan servo ke sudut yang sesuai
Serial.print("Posisi servo: ");
Serial.println(servoAngle);
} else {
digitalWrite(RELAY_PIN, LOW); // Matikan relay (kipas mati)
ledcWrite(pwmChannel, 0); // Matikan LED (kecerahan 0)
myServo.write(0); // Kembalikan servo ke posisi awal
Serial.println("Kipas mati dan LED mati.");
}
delay(2000); // Baca ulang setiap 2 detik
}