● online
- Potensiometer 10K - Mono Potensio Meter Linear Res....
- 5V 700mA (3.5W) Isolated switch Power Supply Modul....
- ESR Meter Digital LCR-T4 Tester Transistor Diode M....
- Modul Sensor Tegangan AC Bolak balik 220V Listrik ....
- ADS1115 16 Bit I2C Module ADC 4 channel with Pro G....
- Modul Sensor Tegangan AC Bolak balik 220V Listrik ....
- SG90 Motor Servo For Arduino Uno Mega SG 90 Biru S....
- TP5100 4.2v 8.4v 1S 2S Single / Double Cell Lithiu....
- Selamat Datang di Indomaker ❯ Silahkan pesan produk sesuai kebutuhan anda, kami siap melayani.
- Selamat Datang di Indomaker ❯ Silahkan pesan produk sesuai kebutuhan anda, kami siap melayani.
Stabil Terus! Cara Bikin Kontrol Kelembapan Ruangan Otomatis Pakai Arduino dan PID
Halo, Sobat IoT! Pernahkah kamu merasa ruangan di rumah tiba-tiba terasa lembap sampai tembok berjamur, atau malah sebaliknya, udara jadi kering banget sampai bikin kulit gatal? Di iklim tropis seperti Indonesia, menjaga kelembapan ideal itu gampang-gampang susah. Masalahnya, sistem kontrol biasa yang cuma pakai “nyala-mati” (On/Off) sering kali bikin kelembapan naik-turun nggak karuan.

Nah, solusinya adalah menggunakan sistem kendali otomatis berbasis PID Diskrit. Tenang, jangan pusing dulu sama namanya! Intinya, kita akan membuat otak elektronik yang bisa berpikir halus untuk menjaga kelembapan ruangan tetap stabil di angka ideal secara otomatis. Yuk, kita bedah cara rakitnya!
Mengenal Komponen Utama
Untuk membangun sistem ini, kita butuh beberapa komponen “tempur” yang punya tugas spesifik:
| Komponen | Fungsi |
| Arduino Uno | Bertindak sebagai unit pemroses utama yang menjalankan algoritma PID untuk mengambil keputusan. |
| Sensor DHT11 | Membaca data kelembapan (RH) dan suhu secara real-time. |
| Transistor IRLZ44N (MOSFET) | Berfungsi sebagai Logic Level MOSFET yang dapat bekerja dengan sinyal 5V dari Arduino. Komponen ini digunakan sebagai saklar elektronik untuk mengendalikan aktuator berdaya lebih besar. |
| Humidifier | Bertugas menambah uap air ke dalam ruangan ketika kondisi terlalu kering. |
| Kipas DC 12V | Bertugas menarik udara keluar sebagai perangkat exhaust untuk mengurangi kelembapan. |
Skematik Rangkaian Jalur Komunikasi dan Daya
Menghubungkan komponen ini butuh ketelitian agar sinyal kendali PWM (Pulse Width Modulation) bisa sampai dengan akurat.

- Sensor Input: Hubungkan Sensor DHT11 ke Pin Digital 2 pada Arduino.
- Output Aktuator: Sistem ini menggunakan dua jalur output PWM. Pin 9 dialokasikan untuk mengontrol Intake (Humidifier) dan Pin 10 digunakan untuk mengontrol Exhaust (Kipas DC).
- Driver Daya: Karena Arduino tidak kuat menyalakan humidifier atau kipas secara langsung, kita menggunakan IRLZ44N sebagai driver.
- Fitur Pengaman: Jangan lupa memasang Dioda 1N4007 secara paralel (flyback) pada terminal kipas. Dioda ini berfungsi sebagai pengaman untuk meredam lonjakan arus balik (back-EMF) dari motor kipas yang bisa merusak komponen lainnya.
Rahasia di Balik Layar Cara Kerja PID Diskrit
Sistem ini bekerja dengan prinsip Closed Loop Control. Bayangkan seperti menyetir mobil; kamu melihat target (garis jalan), lalu tanganmu terus mengoreksi setir agar mobil tetap di jalur. Di sini, target (Setpoint) kita adalah 70%.

Algoritma PID mengoreksi error (selisih antara kelembapan sekarang dengan 70%) melalui tiga aksi:
- Proportional (P): Memberikan respon cepat secara langsung berdasarkan seberapa jauh jarak kita dari target saat ini.
- Integral (I): Mengakumulasi kesalahan dari waktu ke waktu untuk menghilangkan sisa error yang bandel. Di sini, kita menggunakan Integral Limit sebesar 100 untuk mencegah Integral Windup (kondisi di mana nilai koreksi menjadi terlalu besar dan sulit dikendalikan).
- Derivative (D): Memprediksi perubahan di masa depan. Misalnya, jika jendela tiba-tiba dibuka dan kelembapan turun drastis, istilah “D” akan menyadari laju perubahan tersebut dan memerintahkan sistem untuk merespons lebih cepat sebelum error menjadi terlalu besar.
Bedah Kode Program Strategi Pengendalian
#include <DHT.h>
// =====================================================
// KONFIGURASI SENSOR
// =====================================================
#define DHT_PIN 2
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT_TYPE);
// =====================================================
// KONFIGURASI OUTPUT
// =====================================================
#define HUMIDIFIER_PIN 9
#define FAN_PIN 10
// =====================================================
// PARAMETER PID
// =====================================================
float Kp = 8.0;
float Ki = 0.08;
float Kd = 0.0;
float setpoint = 70.0;
// Sampling time = 1 detik
const unsigned long SAMPLE_TIME = 1000;
// Batas integral untuk mencegah Integral Windup
float integralLimit = 100.0;
float integral = 0.0;
float previousError = 0.0;
// =====================================================
// PWM BALANCE
// =====================================================
const int PWM_BALANCE = 80;
int humidifierPWM = 0;
int fanPWM = 0;
// =====================================================
// TIMER
// =====================================================
unsigned long lastSampleTime = 0;
// =====================================================
// SETUP
// =====================================================
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(HUMIDIFIER_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
// Kondisi awal
analogWrite(HUMIDIFIER_PIN, 0);
analogWrite(FAN_PIN, 0);
Serial.println("=================================");
Serial.println("Kontrol Kelembapan PID Diskrit");
Serial.println("Target Kelembapan: 70%");
Serial.println("=================================");
}
// =====================================================
// LOOP UTAMA
// =====================================================
void loop() {
unsigned long currentTime = millis();
// Jalankan PID setiap 1 detik
if (currentTime - lastSampleTime >= SAMPLE_TIME) {
lastSampleTime = currentTime;
// -------------------------------------------------
// BACA SENSOR
// -------------------------------------------------
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Cek apakah pembacaan sensor valid
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT11!");
return;
}
// -------------------------------------------------
// HITUNG ERROR
// -------------------------------------------------
float error = setpoint - humidity;
// -------------------------------------------------
// BAGIAN PROPORTIONAL
// -------------------------------------------------
float proportional = Kp * error;
// -------------------------------------------------
// BAGIAN INTEGRAL
// -------------------------------------------------
integral += error * (SAMPLE_TIME / 1000.0);
// Integral Limit
integral = constrain(
integral,
-integralLimit,
integralLimit
);
float integralTerm = Ki * integral;
// -------------------------------------------------
// BAGIAN DERIVATIVE
// -------------------------------------------------
float derivative =
(error - previousError) /
(SAMPLE_TIME / 1000.0);
float derivativeTerm = Kd * derivative;
// -------------------------------------------------
// OUTPUT PID
// -------------------------------------------------
float pidOutput =
proportional +
integralTerm +
derivativeTerm;
previousError = error;
// -------------------------------------------------
// STRATEGI PUSH-PULL PWM
// -------------------------------------------------
humidifierPWM = PWM_BALANCE + pidOutput;
fanPWM = PWM_BALANCE - pidOutput;
// Batasi PWM 0-255
humidifierPWM = constrain(
humidifierPWM,
0,
255
);
fanPWM = constrain(
fanPWM,
0,
255
);
// -------------------------------------------------
// KIRIM PWM KE AKTUATOR
// -------------------------------------------------
analogWrite(
HUMIDIFIER_PIN,
humidifierPWM
);
analogWrite(
FAN_PIN,
fanPWM
);
// -------------------------------------------------
// MONITORING SERIAL
// -------------------------------------------------
Serial.println("---------------------------------");
Serial.print("Suhu : ");
Serial.print(temperature);
Serial.println(" C");
Serial.print("Kelembapan : ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Setpoint : ");
Serial.print(setpoint);
Serial.println(" %");
Serial.print("Error : ");
Serial.print(error);
Serial.println(" %");
Serial.print("PID Output : ");
Serial.println(pidOutput);
Serial.print("Humidifier : ");
Serial.println(humidifierPWM);
Serial.print("Kipas : ");
Serial.println(fanPWM);
}
}
Dalam kode program, kita mengatur parameter kestabilan dengan nilai: Kp = 8.0, Ki = 0.08, dan Kd = 0.0.
Mengapa Kd diatur ke angka nol? Sebagai ahli, kita tahu bahwa perubahan kelembapan ruangan biasanya terjadi secara perlahan (lambat). Dalam sistem yang lambat, parameter Derivative seringkali tidak diperlukan dan justru bisa membuat sistem bergetar jika pembacaan sensor sedikit berisik.
Sistem ini beroperasi dengan Sampling Time (Ts) sebesar 1 detik. Artinya, setiap satu detik, Arduino akan membaca sensor dan menghitung ulang koreksi. Pemahaman logika kendali seperti ini juga merupakan dasar yang sama jika kamu ingin bikin robot anti tumbang: panduan lengkap self-balancing robot pakai arduino.
Aksi Aktuator Strategi “Push-Pull” PWM
Satu hal yang membuat proyek ini profesional adalah penggunaan variabel PWM_BALANCE = 80. Sistem tidak mulai dari angka nol, melainkan memberikan tenaga dasar sebesar 80 pada kedua aktuator.
Logikanya bukan sekadar “nyala-mati”, tapi sebuah keseimbangan:
- Intake PWM = 80 + Output PID
- Exhaust PWM = 80 – Output PID
Artinya, jika kelembapan kurang dari 70%, nilai PID akan menambah kecepatan humidifier dan secara otomatis mengurangi kecepatan kipas. Begitu juga sebaliknya. Hasilnya? Transisi yang sangat halus dan kelembapan yang tidak “kaget” saat berubah.
Hasil Pengujian & Kesimpulan
Jika kita melihat grafik hasil pengujian, perbedaannya sangat mencolok. Pada kondisi “Before” tanpa PID, nilai kelembapan melonjak tidak menentu. Namun, setelah PID diaktifkan (“After”), grafik menunjukkan kelembapan merayap naik dan terkunci dengan stabil di angka 70%. Hal ini berkat parameter Ki = 0.08 yang bekerja efektif menyapu bersih sisa kesalahan.
Kesimpulannya, perpaduan Arduino Uno, sensor DHT11, dan algoritma PID diskrit adalah solusi ampuh untuk menciptakan sistem kontrol udara tingkat industri di rumah sendiri. Dengan komponen yang tepat seperti MOSFET logic-level dan teknik flyback diode, alat ini tidak hanya cerdas tapi juga tahan lama.
Ingin tahu lebih lanjut tentang mikrokontroler yang digunakan? Cek dokumentasi resmi Arduino Uno untuk mengeksplorasi lebih jauh!
Stabil Terus! Cara Bikin Kontrol Kelembapan Ruangan Otomatis Pakai Arduino dan PID
Halo Sobat Maker! Pernah nggak sih kalian lagi semangat-semangatnya menekuni hobi smart farming atau sekadar merawat tanaman di rumah, tapi... selengkapnya
Traffic Light atau lampu lalu lintas adalah lampu yang mampu menertibkan arus lalu lintas jalanan baik kendaraan bermotor, mobil,... selengkapnya
SIM800C adalah modul GSM / GPRS yang bekerja di frekuensi 850 – 1900 MHz, modul ini dapat membaca SMS... selengkapnya
Bagi orang-orang yang sering melihat konten-konten di aplikasi Instagram mungkin sudah tidak asing lagi, melihat gambar atau foto yang... selengkapnya
Android checkbox adalah tipe dari button yang ada di android. Tipe checkbox ini terdiri dari checked or unchecked. Fungsi... selengkapnya
Pernah nggak sih kamu lagi asik-asiknya nugas atau belajar pas sore hari, eh tiba-tiba cahaya ruangan jadi redup gara-gara cuaca... selengkapnya
Sensor getar Piezoelektrik adalah komponen yang fantastis untuk mendeteksi benturan, getaran, atau bahkan suara. Namun berbeda dengan modul piezo 3... selengkapnya
Sobat Maker, pernah terpikir tidak kenapa robot beroda dua bisa berdiri tegak tanpa jatuh? Secara alami, robot dua roda itu... selengkapnya
Sensor Waterflow adalah sensor yang dapat membaca aliran air pada suatu tempat/saluran air. Sensor ini digunakan untuk membaca... selengkapnya
Di dalam dunia elektronika, dikenal dua jenis input dan output (I/O) yaitu, analog dan digital. Untuk yang digital itu gampang... selengkapnya
Buruan dibeli gan….barang murah-berkualitas SIAPA CEPAT DIA DAPAT Spesifikasi: LCD 1602 / 16×2 (16 karakter, 2 baris) merek QAPASS (cek… selengkapnya
Rp 24.500ESR meter/LCR meter dengan layar lebar lebih jelas dan mantap dan dengan tempat batre jd lebih rapih batre lebih aman… selengkapnya
Rp 131.000 Rp 134.000Case patern: Solid Warna : Merah dan Hijau Current: 10-20 mA Diameter: 3mm
Rp 300Product Name: Tactile Switch; Material: Metal, Plastic Package Content: 30 Pcs x Tactile Switch; Main Color: Black, Silver Tone Total… selengkapnya
Rp 400Bosan dengan modul arduino yang kalian punya, saatnya mencoba modul programmer yang lain yah ini dia RASPBERRY PI 4 COMPUTER… selengkapnya
Rp 1.199.000The power supply is isolated industrial power modules, with a temperature protection, overcurrent and short circuit full protection, high and… selengkapnya
Rp 15.900Kabel Jumper Dupont Pelangi 10 cm male to male 1 lembar = 40 kabel
Rp 13.000Spesifikasi: 20mm Kapton Tape Polymide Film Gold High Temp isolasi Tahan Panas Harga Tertera: 1 Roll Kapton Tape Polymide Film… selengkapnya
Rp 219.000Specifications: 1. supports sampling costs (KHz): 8/11.025/12/16/22.05/24/32/44.1/48 2. 24-bit DAC output, dynamic range aid: 90dB, SNR aid: 85dB 3. fully… selengkapnya
Rp 17.800Harga untuk 10pcs Resistance: 1K Ohm Wattage Rating: 0.25 Watt Tolerance: 1% Metal Film
Rp 1.500Stabil Terus! Cara Bikin Kontrol Kelembapan Ruangan Otomatis Pakai Arduino dan PID
Kategori
Artikel Terkait
-
Cara Bikin Sistem Monitoring Getaran Gempa dan Stabilitas Kemiringan Pakai ESP32 dan MPU 6050
-
Cara Bikin Sistem Monitoring Kelembapan Tanah Berbasis Arduino Uno dan Sensor YL69
-
Bikin Sistem Monitor Volume Air Tandon Otomatis Pakai Arduino Uno dan Sensor Ultrasonik
-
Cara Bikin Kipas Angin Otomatis Berbasis Suhu Pakai Arduino Uno dan Sensor LM35
-
Bikin Smart Medicine Box Otomatis Pakai Arduino Nano dan Sensor Suhu DHT11

Saat ini belum tersedia komentar.