Pada tutorial ini, kita akan membuat sistem tata udara pintar — alat yang bisa mendeteksi ruangan yang terlalu panas atau lembap (pengap), lalu otomatis menyalakan “kipas” (disimulasikan dengan relay dan LED) tanpa perlu dinyalakan manual. Proyek ini memakai Arduino UNO, sensor DHT22, dan modul Relay, semuanya disimulasikan di Wokwi.
| Bagian | Komponen | Fungsi |
|---|---|---|
| Board | Arduino UNO | Pusat kendali sistem |
| Input | DHT22 | Membaca suhu dan kelembapan ruangan sebagai data utama |
| Output | Relay + LED | Relay bekerja seperti saklar elektronik, LED sebagai simulasi beban (misalnya kipas) |
| Library | DHT sensor library | Membantu membaca data dari sensor DHT22 |
Proyek ini mensimulasikan alat otomatis untuk membaca kondisi udara ruangan dan mengaktifkan relay saat dibutuhkan. Arduino UNO membaca suhu dan kelembapan dari sensor DHT22. Data tersebut dipakai untuk menentukan apakah ruangan masih nyaman atau sudah melewati batas. Ketika suhu mencapai 30°C atau kelembapan mencapai 70%, Arduino akan mengaktifkan relay, sehingga indikator beban (LED) menyala — seolah-olah kipas atau AC otomatis dinyalakan.
| Komponen | Fungsi |
|---|---|
| Arduino UNO | Papan utama yang menjalankan program dan membaca sensor. |
| DHT22 | Sensor suhu dan kelembapan, dihubungkan ke pin digital 2. |
| Relay Module | Saklar elektronik yang dikendalikan dari pin digital 8. |
| LED + Resistor | Simulasi beban yang menyala saat relay aktif. |
| Breadboard | Membagi jalur 5V dan GND untuk semua komponen. |
Relay adalah saklar elektronik yang bisa dinyalakan/dimatikan menggunakan sinyal listrik kecil dari Arduino, tapi bisa mengontrol arus listrik yang jauh lebih besar (seperti untuk menyalakan kipas, lampu ruangan, atau AC). Bayangkan relay sebagai “tangan robot” yang menekan saklar besar untuk kita, di mana Arduino cukup memberi perintah “tekan” atau “lepas” lewat sinyal kecil, tanpa Arduino harus menahan arus besar itu secara langsung (yang bisa merusak Arduino kalau dilakukan langsung).
Catatan penting: pada praktik nyata dengan beban listrik besar, jalur tegangan tinggi harus ditangani sesuai standar keselamatan kelistrikan. Simulasi ini memakai LED sebagai beban yang aman untuk dipelajari di Wokwi.
Library yang perlu dipasang di Wokwi untuk proyek ini adalah DHT sensor library, dipakai untuk membaca data suhu dan kelembapan dari sensor DHT22.
Buka tab Library Manager di Wokwi, lalu pastikan DHT sensor library sudah muncul di daftar Installed Libraries. Library ini diperlukan karena kode program memanggil #include <DHT.h>.
Gunakan breadboard untuk membagi jalur 5V dan GND, lalu hubungkan sensor dan relay sesuai pin berikut:
| Komponen | Tersambung ke | Keterangan |
|---|---|---|
| Arduino 5V | Breadboard (+) | Jalur daya untuk DHT22 dan relay |
| Arduino GND | Breadboard (−) | Jalur ground bersama |
| DHT22 VCC | Breadboard (+) | Daya sensor |
| DHT22 GND | Breadboard (−) | Ground sensor |
| DHT22 SDA | Pin digital 2 | Jalur data suhu dan kelembapan |
Relay punya dua “sisi” yang perlu dipahami: sisi kontrol (yang terhubung ke Arduino) dan sisi saklar (yang menyambungkan/memutuskan aliran listrik ke beban, dalam hal ini LED).
| Pin | Tersambung ke | Keterangan |
|---|---|---|
| Relay VCC | Breadboard (+) | Daya modul relay |
| Relay GND | Breadboard (−) | Ground modul relay |
| Relay IN | Pin digital 8 | Perintah ON/OFF dari Arduino |
| Breadboard (+) | Relay COM | Sumber daya menuju saklar relay |
| Relay NO | LED Anoda | Jalur yang aktif saat relay menyala |
| LED Katoda | Resistor → GND | Jalur kembali ke ground |
COM (Common) adalah jalur masuk sumber daya ke relay. NO singkatan dari Normally Open, artinya jalur ini secara default (kondisi normal) dalam keadaan terputus. Jalur COM ke NO baru tersambung ketika relay dalam kondisi aktif (dinyalakan Arduino) — sehingga LED indikator baru menyala saat kondisi panas atau pengap terdeteksi, dan tetap mati saat kondisi normal.
(Ada juga jalur NC/Normally Closed pada beberapa modul relay, yang bekerja kebalikannya — tapi di proyek ini kita hanya memakai jalur NO.)
Program membaca dua nilai dari sensor, lalu menentukan status relay berdasarkan dua batas berikut:
Relay akan aktif jika salah satu dari kedua kondisi di atas terpenuhi (tidak harus keduanya sekaligus) — inilah yang disebut logika OR (“atau”).
Buka file sketch.ino di Wokwi, lalu salin kode berikut:
#include <DHT.h>
// Menyiapkan Sensor
#define pinSensor 2
#define tipeSensor DHT22
DHT sensorSuhu(pinSensor, tipeSensor);
// Menyiapkan Saklar Relay
int pinRelay = 8;
float batasPanas = 30.0; // Batas suhu
float batasLembap = 70.0; // Batas kelembapan (pengap)
void setup() {
Serial.begin(9600);
sensorSuhu.begin();
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, LOW);
Serial.println("=== Sistem Tata Udara Pintar AKTIF ===");
}
void loop() {
// 1. Baca Suhu DAN Kelembapan
float suhu = sensorSuhu.readTemperature();
float kelembapan = sensorSuhu.readHumidity();
// Cek kalau sensor error
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
// Tampilkan di layar
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C | Kelembapan: ");
Serial.print(kelembapan);
Serial.println(" %");
// 2. Logika Cerdas (Kalau Panas ATAU Pengap, kipas nyala)
if (suhu >= batasPanas || kelembapan >= batasLembap) {
Serial.println("-> PANAS / PENGAP! Kipas ON [*CEKLEK*]");
digitalWrite(pinRelay, HIGH);
} else {
Serial.println("-> Udara Nyaman. Kipas OFF");
digitalWrite(pinRelay, LOW);
}
Serial.println("--------------------------------");
delay(2000); // Jeda 2 detik
}
Klik masing-masing bagian di bawah ini untuk memahami fungsinya satu per satu:
#include <DHT.h> — memanggil library untuk membaca sensor DHT.#define pinSensor 2 — memberi tahu program bahwa sensor DHT22 terhubung ke pin digital 2.#define tipeSensor DHT22 — memberi tahu program tipe sensor yang dipakai adalah DHT22.DHT sensorSuhu(pinSensor, tipeSensor); — membuat objek (perwakilan) bernama sensorSuhu yang mewakili sensor DHT22 di dalam program.int pinRelay = 8; — variabel yang menyimpan nomor pin tempat relay terhubung, yaitu pin digital 8.float batasPanas = 30.0; — variabel bertipe float (angka desimal) yang menyimpan batas suhu dianggap “panas”, yaitu 30.0 derajat Celcius. Kalau kamu ingin ambang batasnya berbeda, cukup ubah angka ini.float batasLembap = 70.0; — sama seperti di atas, tapi untuk batas kelembapan dianggap “pengap”, yaitu 70%.Kenapa disimpan sebagai variabel, bukan langsung ditulis angkanya di dalam kode logika? Supaya lebih mudah diubah nanti. Kalau batas suhu ingin diganti dari 30°C menjadi 28°C misalnya, kita cukup ubah satu baris ini saja, tanpa perlu mencari-cari angka 30 di banyak tempat dalam kode.
Serial.begin(9600); — mengaktifkan komunikasi Serial Monitor.sensorSuhu.begin(); — mengaktifkan/memulai komunikasi dengan sensor DHT22.pinMode(pinRelay, OUTPUT); — mengatur pin relay sebagai output, karena Arduino akan mengirim perintah nyala/mati ke relay.digitalWrite(pinRelay, LOW); — memastikan relay dalam kondisi mati (LOW) di awal program, sebelum ada pembacaan suhu sama sekali.Serial.println("=== Sistem Tata Udara Pintar AKTIF ==="); — menampilkan pesan pembuka di Serial Monitor.float suhu = sensorSuhu.readTemperature(); — membaca nilai suhu dari sensor, disimpan ke variabel suhu.float kelembapan = sensorSuhu.readHumidity(); — membaca nilai kelembapan, disimpan ke variabel kelembapan.if (isnan(suhu) || isnan(kelembapan)) { ... } — mengecek apakah salah satu pembacaan gagal (bukan angka yang valid). isnan() berarti “is not a number”. Tanda || berarti “atau” — jadi kondisi ini benar kalau suhu gagal terbaca atau kelembapan gagal terbaca. Kalau salah satunya gagal, program menampilkan pesan error dan return; menghentikan sisa kode di bawahnya untuk sementara (loop akan mengulang dari awal lagi).Serial.print(...) beberapa baris — menampilkan nilai suhu dan kelembapan yang baru dibaca ke Serial Monitor, supaya kita bisa memantau datanya secara langsung.if (suhu >= batasPanas || kelembapan >= batasLembap) { ... } — ini adalah inti logika dari seluruh program. Tanda || berarti “atau” (operator OR). Kondisi ini bernilai benar jika suhu sudah mencapai atau melebihi 30°C, ATAU kelembapan sudah mencapai atau melebihi 70% — jadi cukup salah satu saja yang terpenuhi, tidak perlu keduanya sekaligus.digitalWrite(pinRelay, HIGH); menyalakan relay (yang akan menyalakan LED indikator lewat jalur NO-COM).else): tampilkan pesan “Udara Nyaman”, lalu digitalWrite(pinRelay, LOW); mematikan relay kembali.delay(2000); — menunggu 2 detik sebelum loop() mengulang dan membaca sensor lagi.Kenapa pakai OR (||), bukan AND (&&)? Karena kita ingin relay aktif kalau salah satu saja kondisi bermasalah — ruangan tetap perlu “kipas” dinyalakan meskipun cuma pengap tapi tidak panas, atau cuma panas tapi tidak pengap. Kalau pakai AND, relay baru aktif jika kedua-duanya terjadi bersamaan, yang tentu kurang responsif untuk sistem keamanan udara seperti ini.
Suhu: 31.00 C | Kelembapan: 45.00 %
-> PANAS / PENGAP! Kipas ON [*CEKLEK*]
--------------------------------
| Kondisi | Penjelasan | Status Relay |
|---|---|---|
| Normal | Suhu di bawah 30°C dan kelembapan di bawah 70%. | LOW (mati) |
| Panas | Suhu 30°C atau lebih. | HIGH (aktif) |
| Pengap | Kelembapan 70% atau lebih. | HIGH (aktif) |
| Masalah | Solusi |
|---|---|
| Library error saat compile | Pastikan DHT sensor library sudah terpasang di Library Manager Wokwi. |
| Serial Monitor menampilkan “gagal membaca sensor” | Cek pin data DHT22 ke pin 2, jalur VCC ke 5V, dan GND ke ground. |
| Relay tidak aktif saat suhu tinggi | Pastikan pin IN relay menuju pin 8, dan kode menggunakan digitalWrite(pinRelay, HIGH); dengan benar. |
| Indikator (LED) tidak menyala | Cek jalur COM, NO, anoda LED, resistor, dan ground breadboard satu per satu. |
| Nilai suhu berubah tapi output tidak berubah | Pastikan batas suhu dan kelembapan di kode masih sesuai (30.0 dan 70.0) seperti pada sketch. |
| Kabel terlihat benar tapi tetap gagal | Jalankan ulang simulasi, lalu periksa kembali semua label pin komponen di Wokwi satu per satu. |
Relay sering digunakan untuk mengontrol beban listrik besar di dunia nyata. Pada penerapan sungguhan, pemilihan rating relay (batas maksimal arus/tegangan yang boleh dilewatkan), isolasi kabel yang baik, box pelindung, dan mengikuti standar instalasi listrik yang berlaku harus benar-benar diperhatikan. Untuk belajar dan bereksperimen, simulasi dengan LED seperti di tutorial ini jauh lebih aman.
Setelah simulasi dasar berhasil, sistem ini bisa dikembangkan menjadi alat monitoring udara yang lebih nyata:
||) memungkinkan sebuah aksi terpicu oleh salah satu dari beberapa kondisi, cocok dipakai saat kita ingin sistem tetap merespons meskipun hanya satu masalah yang terjadi (panas saja, atau lembap saja).🔒 Simulasi ini dikunci. Minta passcode ke gurumu untuk membuka.