● online
- Kabel Jumper 20cm Dupont 20 cm Female to Female Pe....
- ESR Meter Digital LCR-T4 Tester Transistor Diode M....
- Kabel Jumper arduino Dupont Pelangi 30 cm Male to ....
- Tilt Sensor SW-520D Module Modul Sensor Kemiringan....
- Sensor Ultrasonik HC-SR04 HC SR04 Sensor Jarak Ult....
- Dimmer AC 4000W 220 Volt 4000 Watt 220V + Casing A....
- Raspberry Pi 4 Model B - 2GB RAM Raspberry Pi 4B....
- Motor Servo MG995 TowerPro Metal Gear....
- 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
Anda mempunyai buzzer? tapi bingung cara menggunakannya? Oke disini saya akan berbagi caranya. Sebelumnya apakah anda tahu apa sih... selengkapnya
Water level merupakan sensor yang berfungsi untuk mendeteksi ketinggian air dengan output analog kemudian diolah menggunakan mikrokontroler. Cara kerja... selengkapnya
Pernah suatu ketika axis X, Y, atau z CNC kita berubah, gcode yang sudah jadi setelah di running tidak... selengkapnya
Mengendalikan LED dengan tombol bisa dilakukan dengan berbagai cara. Kali ini, kamu akan mempelajari dua metode umum dan sangat berguna:... selengkapnya
8×8 LED dot matrix merupakan sebuah display yang terdiri dari kumpulan led yang disusun secara simetris sejumlah 8 baris... selengkapnya
Setelah kemarin-kemarin sudah sering membahas board esp8266 dengan jenis NodeMCU. Kali ini kita belajar dengan jenis lain yaitu ESP-01,... selengkapnya
Push Button dan LED (Light Emitting Diode) menjadi sebuah komponen yang umum ditemukan pada piranti elektronik sehingga menjadikan... selengkapnya
Siapa yang nggak kenal dengan running text? Running text merupakan sebuah teks berjalan pada sebuah papan yang berisi led-led... selengkapnya
Pemanfaatan sebuah sensor bisa dijadikan berbagai fungsi, nah kali ini kita akan belajar untuk memonitoring sensor menggunakan WIFI yang... selengkapnya
Android merupakan sistem operasi untuk perangkat seluler dengan pengguna terbesar di dunia termasuk di Indonesia, dengan market share 90%... selengkapnya
Specifications: Operating voltage: DC3-5V Operating current: less than 20mA Sensor Type: Analog Detection Area: 40mmx16mm Production process: FR4 double-sided HASL… selengkapnya
Rp 3.000TECHNICAL SPECIFICATIONS: – Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz – 2GB LPDDR4-2400 SDRAM – 2.4… selengkapnya
Rp 940.000Kinerja Produk: Warnanya coklat (amber), Goldfinger tape sticky baik, patuh, suhu tinggi, pelarut, tidak ada rembesan timah dan tidak ada… selengkapnya
Rp 11.900Dual Volt Amp Meter Digital Ampere Meter Voltmeter 10A 0-100V Ammeter Dilengkapi dengan pengukuran Voltmeter dan Amperemeter dalam 1 display… selengkapnya
Rp 26.500The 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.000Putaran = 180º Specifications • Weight: 55 g • Dimension: 40.7 x 19.7 x 42.9 mm approx. • Stall torque:… selengkapnya
Rp 36.400Features: Brand new and high quality. Control the speed of a DC motor with this controller. High efficiency, high torque,… selengkapnya
Rp 25.400Kabel Jumper Dupont Pelangi 10 cm.. male to female 1 lembar isi 40 kabel
Rp 9.000Kabel Jumper Dupont Pelangi 30cm female to Female 1 lembar = 40 kabel
Rp 13.500Stabil Terus! Cara Bikin Kontrol Kelembapan Ruangan Otomatis Pakai Arduino dan PID
Kategori
Artikel Terkait
-
Jaga Kolam Ikan Tetap Stabil Pakai Arduino dan PID Biar Ikan Makin Happy
-
Bikin Lampu Belajar Pintar Pake PID & Arduino Cahaya Sat-Set, Mata Anti-Lelah!
-
Bikin Robot Anti Tumbang Panduan Lengkap Self-Balancing Robot Pakai Arduino
-
Bikin Mobil Parkir Otomatis Pakai Arduino dan PID dengan Budget di Bawah 100 Ribu
-
Bikin Stabilizer 1-Axis Low Budget Pakai Arduino dan PID

Saat ini belum tersedia komentar.