// SIMULASI SENSOR ANALOG & PWM - ESP32
// Potensiometer (Analog) -> Konversi Satuan Kelembaban (%) -> LED (PWM Kompatibel)
// Rais Rasyad Shidiq | 2270231019
// =================================================================
// 1. DEFINISI PIN DAN PARAMETER
// =================================================================
const int sensorPin = 34; // Pin Analog untuk Potensiometer
const int ledPin = 2; // Pin Digital untuk LED (Output PWM)
// Konstanta Konversi
const int ADC_MAX = 4095;
// Karena kita menggunakan analogWrite(), Duty Cycle maksimalnya adalah 255.
const int PWM_MAX = 255;
// Variabel untuk menampilkan status
float kelembaban = 0.0;
int rawValue = 0;
void setup() {
// Inisialisasi Serial
Serial.begin(115200);
// Inisialisasi pin LED sebagai OUTPUT
pinMode(ledPin, OUTPUT);
Serial.println("=========================================");
Serial.println("Sistem Monitoring Kelembaban (PWM Kompatibel Aktif)");
Serial.println("-----------------------------------------");
}
void loop() {
// 1. Pembacaan Sensor Analog
rawValue = analogRead(sensorPin);
// 2. KONVERSI SATUAN (ADC Raw Value ke Persentase Kelembaban)
float normalisasi = (float)rawValue / ADC_MAX;
// Dibalik: 0% = Kering (rawValue tinggi), 100% = Basah (rawValue rendah)
kelembaban = (1.0 - normalisasi) * 100.0;
// 3. LOGIKA KONTROL PWM (Intensitas LED)
// Mapping Terbalik: Nilai Kelembaban (0-100) dikonversi ke Duty Cycle PWM (255-0).
// Kelembaban 0% (Kering) -> PWM 255 (Terang)
// Kelembaban 100% (Basah) -> PWM 0 (Mati)
int pwm_value = map(kelembaban, 0, 100, PWM_MAX, 0);
// Tulis nilai PWM menggunakan fungsi analogWrite()
// Ini menggantikan ledcWrite() dan menghindari error setup.
analogWrite(ledPin, pwm_value);
// 4. Tampilkan Hasil di Serial Monitor
Serial.print("Waktu: ");
Serial.print(millis() / 1000);
Serial.print("s ");
Serial.print(" | 💧 Kelembaban: ");
Serial.print(kelembaban, 1);
Serial.print("%");
Serial.print(" | 🔌 ADC: ");
Serial.print(rawValue);
Serial.print(" | 💡 PWM: ");
Serial.print(pwm_value);
Serial.print(" | STATUS: ");
if (kelembaban < 20.0) {
Serial.println("🔥 SANGAT KERING (PWM Tinggi)");
} else if (kelembaban > 80.0) {
Serial.println("🌊 SANGAT BASAH (PWM Nol)");
} else {
Serial.println("💡 PROPORSIOANL (PWM Berubah)");
}
delay(100);
}