Pada tutorial ini, kita akan membuat sebuah alat pengukur suhu dan kelembapan ruangan menggunakan Arduino UNO, sensor DHT22, dan layar LCD 16×2 I2C. Semua percobaan dilakukan secara simulasi lewat website Wokwi, jadi kamu tidak perlu punya komponen fisik untuk mencobanya.
Proyek ini menggabungkan tiga bagian penting dalam sistem elektronik/robotika:
Fokus latihan kita: cara membaca data dari sensor, cara memakai library (kode bantuan yang sudah dibuat orang lain), cara menyambungkan LCD I2C, dan cara menampilkan data secara real-time (langsung berubah mengikuti kondisi terkini).
Setelah menyelesaikan tutorial ini, kamu diharapkan bisa:
LiquidCrystal_I2C dan DHT sensor library di Wokwi.begin, init, backlight, setCursor, print, readHumidity, dan readTemperature.Rangkaian ini memakai lima bagian berikut:
| Komponen | Fungsi | Catatan Penting |
|---|---|---|
| Arduino UNO | Pusat kontrol program (otak dari alat ini) | Membaca data sensor, lalu mengirim hasilnya ke LCD. |
| Sensor DHT22 | Mengukur suhu dan kelembapan udara | Kaki data (pengirim informasi) masuk ke pin digital 7 Arduino. |
| LCD 16×2 I2C | Menampilkan teks/angka secara digital | Kaki SDA masuk ke pin A4, kaki SCL masuk ke pin A5. |
| Breadboard | Membagi jalur listrik (5V dan GND) ke banyak komponen | Merapikan jalur listrik untuk sensor dan LCD sekaligus. |
| Kabel jumper | Menghubungkan antar komponen | Digunakan untuk semua sambungan kabel di rangkaian ini. |
Karena sensor DHT22 dan LCD sama-sama butuh sumber daya listrik (5V) dan jalur ground (GND). Breadboard berfungsi seperti “stop kontak” yang membagi satu sumber listrik dari Arduino menjadi beberapa jalur, supaya kedua komponen bisa mendapat daya tanpa harus mencolok langsung berkali-kali ke Arduino.

Library adalah kumpulan kode siap pakai yang dibuat orang lain, supaya kita tidak perlu menulis semua perintah rumit dari nol. Untuk proyek ini, kita butuh dua library:
| Nama Library | Fungsi |
|---|---|
LiquidCrystal_I2C |
Untuk mengontrol LCD I2C 16×2 (menampilkan teks, mengatur posisi kursor, menyalakan lampu latar, dll). |
DHT sensor library |
Untuk membaca data dari sensor DHT22 (suhu dan kelembapan). |
Cara memasangnya di Wokwi: buka tab Library Manager pada project Wokwi kamu, lalu pastikan kedua library di atas sudah muncul di daftar Installed Libraries. Jika belum ada, tambahkan lewat tombol + di pojok kanan atas Library Manager.
Penting: jika salah satu library belum terpasang, program akan gagal compile (gagal diproses) dan simulasi tidak bisa berjalan. Jadi selalu cek bagian ini terlebih dahulu sebelum menjalankan program.
Ikuti langkah-langkah berikut secara berurutan untuk menyambungkan semua komponen:
Ringkasan tabel pin, supaya lebih mudah dicek satu per satu:
| Komponen | Pin di Komponen | Tersambung ke |
|---|---|---|
| DHT22 | VCC | Jalur 5V breadboard |
| DHT22 | GND | Jalur GND breadboard |
| DHT22 | SDA / DATA | Pin digital 7 Arduino |
| LCD I2C | VCC | Jalur 5V breadboard |
| LCD I2C | GND | Jalur GND breadboard |
| LCD I2C | SDA | Pin A4 Arduino |
| LCD I2C | SCL | Pin A5 Arduino |
Keduanya adalah dua jalur komunikasi khusus yang dipakai LCD I2C untuk “berbicara” dengan Arduino menggunakan protokol bernama I2C. Bayangkan seperti dua kabel telepon yang dipakai bergantian untuk mengirim dan menerima data, sehingga LCD hanya butuh 2 kabel data saja (SDA dan SCL) dibanding LCD biasa yang bisa butuh 6 kabel atau lebih.
Sebelum masuk ke kode, penting untuk memahami dulu bagaimana program ini bekerja secara garis besar:
Buka file sketch.ino di Wokwi, lalu salin kode berikut:
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Mengatur colokan Sensor Suhu
#define DHTPIN 7 // Sensor dicolok ke angka 7
#define DHTTYPE DHT22 // Tipe sensor yang dipakai
DHT sensorSuhu(DHTPIN, DHTTYPE);
// Mengatur ukuran LCD (alamat 0x27, 16 kolom, 2 baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Menyalakan mesin sensor dan LCD
sensorSuhu.begin();
lcd.init();
lcd.backlight();
// Menampilkan layar pembuka sesaat
lcd.setCursor(0, 0);
lcd.print(" ALAT PENGUKUR ");
lcd.setCursor(0, 1);
lcd.print(" SUHU RUANGAN ");
delay(2000); // Tahan tulisan selama 2 detik
lcd.clear(); // Bersihkan layar
}
void loop() {
// 1. Membaca data kelembapan (Humidity) dan suhu (Celcius)
float kelembapan = sensorSuhu.readHumidity();
float suhuC = sensorSuhu.readTemperature();
// 2. Cek apakah sensor rusak/gagal membaca
if (isnan(kelembapan) || isnan(suhuC)) {
lcd.setCursor(0, 0);
lcd.print("SENSOR ERROR! ");
return;
}
// 3. Menampilkan Suhu di baris pertama (atas)
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhuC);
lcd.print(" C ");
// 4. Menampilkan Kelembapan di baris kedua (bawah)
lcd.setCursor(0, 1);
lcd.print("Lembap: ");
lcd.print(kelembapan);
lcd.print(" % ");
// Jeda 2 detik sebelum alat membaca suhu baru
delay(2000);
}
Supaya tidak sekadar copy-paste, klik masing-masing bagian di bawah untuk memahami fungsinya satu per satu:
#include <LiquidCrystal_I2C.h> — memanggil/mengaktifkan library untuk mengontrol LCD I2C.#include <DHT.h> — memanggil/mengaktifkan library untuk membaca sensor DHT.#define DHTPIN 7 — memberi tahu program bahwa kaki data sensor DHT22 terpasang di pin digital nomor 7 pada Arduino.#define DHTTYPE DHT22 — memberi tahu program bahwa tipe sensor yang dipakai adalah DHT22 (bukan tipe lain seperti DHT11, karena cara membacanya sedikit berbeda).DHT sensorSuhu(DHTPIN, DHTTYPE); — membuat sebuah “objek” (semacam wakil/perwakilan) bernama sensorSuhu yang mewakili sensor DHT22 kita di dalam program, supaya bisa dipanggil-panggil nanti.LiquidCrystal_I2C lcd(0x27, 16, 2); — membuat objek bernama lcd yang mewakili layar LCD kita. Angka 0x27 adalah alamat unik LCD I2C (seperti nomor rumah, supaya Arduino tahu LCD mana yang diajak bicara), sedangkan 16 dan 2 berarti LCD ini punya 16 kolom dan 2 baris karakter.Fungsi setup() hanya dijalankan satu kali saat Arduino pertama kali dinyalakan, biasanya berisi persiapan awal:
sensorSuhu.begin(); — mengaktifkan/memulai komunikasi dengan sensor DHT22, supaya sensor siap dipakai.lcd.init(); — menyiapkan/menyalakan LCD supaya siap menampilkan teks.lcd.backlight(); — menyalakan lampu latar (backlight) LCD, supaya tulisan terlihat jelas.lcd.setCursor(0, 0); — memindahkan posisi kursor (titik mulai menulis) ke kolom ke-0, baris ke-0 (yaitu pojok kiri atas layar). Perlu diingat, penomoran di pemrograman biasanya dimulai dari 0, bukan 1.lcd.print(" ALAT PENGUKUR "); — menampilkan tulisan tersebut di posisi kursor yang sudah ditentukan.delay(2000); — menghentikan program sejenak selama 2000 milidetik (= 2 detik), supaya tulisan pembuka sempat terbaca oleh pengguna sebelum berganti.lcd.clear(); — membersihkan seluruh layar LCD, supaya siap menampilkan data suhu dan kelembapan berikutnya.Fungsi loop() akan dijalankan berulang-ulang tanpa henti selama Arduino menyala, persis setelah setup() selesai dijalankan sekali:
float kelembapan = sensorSuhu.readHumidity(); — membaca nilai kelembapan dari sensor, lalu menyimpannya ke dalam sebuah variabel (wadah penyimpan nilai) bernama kelembapan. Kata float berarti nilai yang disimpan berupa angka desimal (misalnya 60.5), bukan hanya bilangan bulat.float suhuC = sensorSuhu.readTemperature(); — sama seperti di atas, tapi untuk membaca nilai suhu dalam satuan Celcius.if (isnan(kelembapan) || isnan(suhuC)) { ... } — ini adalah pengecekan kesalahan (error handling). isnan() singkatan dari “is not a number”, dipakai untuk mengecek apakah pembacaan sensor gagal (misalnya karena kabel putus atau sensor rusak). Tanda || berarti “atau” — jadi kondisi ini bernilai benar jika kelembapan gagal terbaca ATAU suhu gagal terbaca. Kalau salah satu gagal, LCD akan menampilkan “SENSOR ERROR!” dan perintah return; akan menghentikan sisa kode di bawahnya untuk sementara, lalu program akan mengulang dari awal loop() lagi.lcd.setCursor(0, 0); lcd.print("Suhu: "); lcd.print(suhuC); lcd.print(" C "); — menampilkan tulisan “Suhu: “, diikuti angka suhu yang baru dibaca, lalu satuan ” C” di baris pertama (atas) LCD.lcd.setCursor(0, 1); lcd.print("Lembap: "); lcd.print(kelembapan); lcd.print(" % "); — sama seperti di atas, tapi menampilkan kelembapan di baris kedua (bawah) LCD, dengan satuan “%”.delay(2000); — menunggu 2 detik sebelum loop() mengulang dari awal lagi dan membaca data sensor terbaru. Jeda ini penting karena sensor DHT22 tidak bisa dibaca terlalu cepat/sering (butuh waktu jeda antar pembacaan agar hasilnya akurat).sketch.ino di Wokwi.Saat simulasi baru dimulai, LCD akan menampilkan teks pembuka “ALAT PENGUKUR SUHU RUANGAN” selama 2 detik. Setelah itu, layar akan menampilkan data sensor sebagai berikut:
| Baris LCD | Isi Tampilan | Artinya |
|---|---|---|
| Baris atas | Suhu: (nilai) C | Menampilkan suhu ruangan yang terbaca dari sensor. |
| Baris bawah | Lembap: (nilai) % | Menampilkan persentase kelembapan udara dari sensor. |
Data ini akan otomatis diperbarui setiap 2 detik selama simulasi berjalan.
Salah satu keunggulan simulasi Wokwi adalah kita bisa mengubah nilai sensor secara manual untuk menguji programnya:
| Masalah | Kemungkinan Penyebab dan Solusi |
|---|---|
| LCD kosong (tidak menampilkan apa pun) | Cek kembali koneksi VCC, GND, SDA ke A4, dan SCL ke A5. Pastikan juga library LCD I2C sudah terpasang. |
| Teks tidak berubah-ubah | Pastikan simulasi sedang berjalan (tombol Play aktif) dan sensor DHT22 tidak dalam kondisi error. Cek juga apakah delay terlalu singkat sehingga pembacaan jadi tidak stabil. |
| Muncul tulisan “SENSOR ERROR!” | Cek pin data DHT22 sudah benar ke pin 7, VCC ke 5V, dan GND ke ground. Kesalahan wiring bisa membuat hasil pembacaan menjadi tidak valid (NaN). |
| Compile error (program gagal diproses) | Pastikan library DHT sensor library dan LiquidCrystal I2C sudah terpasang lengkap di Library Manager. |
| Nilai yang tampil tidak sesuai harapan | Klik komponen DHT22 di Wokwi, lalu ubah slider temperature atau humidity untuk menguji apakah perubahan data benar-benar terbaca oleh program. |
Setelah berhasil membuat versi dasar ini, kamu bisa coba mengembangkan proyek ini lebih jauh, misalnya:
Jika suatu saat kamu membuat versi fisik (bukan sekadar simulasi) dari alat ini: gunakan catu daya (power supply) yang stabil, buat sambungan kabel yang rapi dan tidak mudah lepas, serta jangan langsung mengontrol beban listrik besar (seperti kipas AC atau alat rumah tangga bertegangan tinggi) langsung dari pin Arduino tanpa komponen pengaman tambahan seperti relay, karena bisa merusak Arduino atau membahayakan penggunanya.
setup() berjalan sekali di awal untuk persiapan, sedangkan loop() berjalan berulang-ulang untuk membaca data dan memperbarui tampilan.isnan() penting supaya program tidak menampilkan data yang salah/kosong saat sensor gagal membaca.🔒 Simulasi ini dikunci. Minta passcode ke gurumu untuk membuka.