Tutorial Sensor DHT22 dengan Arduino (Kode + Wiring)

Tutorial sensor DHT22 Arduino ini membahas cara membaca suhu dan kelembapan udara dari nol: mulai dari wiring, pemasangan library, kode program lengkap, sampai penanganan error yang paling sering muncul. DHT22 dipilih karena rentang ukur dan akurasinya jauh lebih baik daripada DHT11, sementara cara memakainya tetap sederhana — cukup satu pin data. Seluruh contoh di halaman ini diuji langsung di meja kerja bisaioti dengan Arduino Uno R3.

Spesifikasi DHT22 dan Bedanya dengan DHT11
| Spesifikasi | DHT22 (AM2302) | DHT11 |
|---|---|---|
| Rentang suhu | -40 sampai 80 derajat Celsius | 0 sampai 50 derajat Celsius |
| Akurasi suhu | sekitar 0,5 derajat Celsius | sekitar 2 derajat Celsius |
| Rentang kelembapan | 0 sampai 100 persen RH | 20 sampai 90 persen RH |
| Akurasi kelembapan | sekitar 2 sampai 5 persen RH | sekitar 5 persen RH |
| Resolusi pembacaan | 0,1 derajat dan 0,1 persen | 1 derajat dan 1 persen |
| Kecepatan baca maksimum | sekali tiap 2 detik | sekali tiap 1 detik |
| Tegangan kerja | 3,3 sampai 6 volt | 3,3 sampai 5,5 volt |
| Warna casing umum | Putih | Biru |
Kesimpulan praktisnya: DHT11 cukup untuk latihan pertama dan proyek sekolah, sedangkan DHT22 layak dipakai ketika angka yang dihasilkan akan benar-benar dipakai untuk mengambil keputusan — misalnya memantau ruang server, gudang penyimpanan, atau inkubator.
Alat dan Bahan
| Komponen | Jumlah | Keterangan |
|---|---|---|
| Arduino Uno R3 | 1 | Bisa diganti Nano atau Mega tanpa perubahan kode |
| Sensor DHT22 / AM2302 | 1 | Versi modul 3 pin lebih praktis untuk pemula |
| Resistor 10 kilo ohm | 1 | Hanya untuk versi komponen 4 pin |
| Breadboard | 1 | 400 atau 830 titik |
| Kabel jumper male-to-male | 3 sampai 4 | |
| Kabel USB tipe B | 1 | Wajib kabel data, bukan kabel charge |
[PERLU URL bisaioti.id — tautan ke produk sensor DHT22 dengan anchor “sensor DHT22”, dan ke kit dengan anchor “kit belajar arduino”.]
Wiring DHT22 ke Arduino
Ada dua bentuk DHT22 yang beredar, dan wiring-nya sedikit berbeda. Periksa dulu milik Anda sebelum merangkai.
Versi Modul 3 Pin
Bentuk ini sudah terpasang pada PCB kecil dan resistor pull-up sudah disertakan di dalamnya, sehingga tidak perlu komponen tambahan.
| Pin Modul | Dihubungkan ke |
|---|---|
| VCC atau tanda plus | Pin 5V pada Arduino |
| DATA atau OUT | Pin digital 2 |
| GND atau tanda minus | Pin GND pada Arduino |
Versi Komponen 4 Pin
Bentuk ini berupa sensor telanjang dengan empat kaki. Hitung kakinya dari kiri saat sisi berlubang menghadap Anda.
| Kaki | Fungsi | Dihubungkan ke |
|---|---|---|
| 1 | VCC | Pin 5V |
| 2 | DATA | Pin digital 2 |
| 3 | Tidak dipakai | Dibiarkan kosong |
| 4 | GND | Pin GND |
Pada versi ini, pasang resistor 10 kilo ohm antara kaki 1 dan kaki 2 sebagai pull-up. Tanpa resistor tersebut, jalur data mengambang dan sensor akan terbaca gagal terus-menerus. Inilah penyebab kegagalan nomor satu pada versi komponen.
[PERLU WIRING DIAGRAM — diagram DHT22 ke Arduino untuk kedua versi, ekspor WebP lebar sekitar 1200 px agar tetap terbaca di ponsel.]
Memasang Library
Buka Arduino IDE, lalu masuk ke menu Sketch, Include Library, kemudian Manage Libraries. Pasang dua library berikut secara berurutan:
- DHT sensor library terbitan Adafruit
- Adafruit Unified Sensor — biasanya ditawarkan otomatis sebagai dependency, setujui saja
Apabila library kedua tidak muncul otomatis, cari dan pasang secara manual. Tanpa library tersebut, proses compile akan gagal dengan pesan bahwa berkas Adafruit_Sensor.h tidak ditemukan.
Kode Program Lengkap
// Membaca suhu dan kelembapan dengan DHT22
// Diuji pada Arduino Uno R3
#include <DHT.h>
#define PIN_DHT 2
#define TIPE_DHT DHT22
DHT dht(PIN_DHT, TIPE_DHT);
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println(F("Pembacaan DHT22 dimulai"));
}
void loop() {
delay(2000); // DHT22 hanya sanggup dibaca tiap 2 detik
float kelembapan = dht.readHumidity();
float suhu = dht.readTemperature();
// selalu periksa hasil baca sebelum dipakai
if (isnan(kelembapan) || isnan(suhu)) {
Serial.println(F("Gagal membaca sensor - periksa wiring"));
return;
}
float terasa = dht.computeHeatIndex(suhu, kelembapan, false);
Serial.print(F("Suhu: "));
Serial.print(suhu, 1);
Serial.print(F(" C | Kelembapan: "));
Serial.print(kelembapan, 1);
Serial.print(F(" % | Terasa seperti: "));
Serial.print(terasa, 1);
Serial.println(F(" C"));
}Penjelasan Bagian Penting Kode
| Baris | Fungsi |
|---|---|
#define TIPE_DHT DHT22 | Memberi tahu library jenis sensor yang dipakai. Salah menuliskan DHT11 di sini membuat pembacaan kacau meski wiring benar. |
dht.begin() | Menyiapkan komunikasi dengan sensor. Wajib dipanggil di dalam setup. |
delay(2000) | Memberi jeda dua detik. Membaca lebih cepat dari itu membuat sensor mengembalikan nilai lama atau gagal. |
isnan() | Memeriksa apakah hasil pembacaan berupa angka yang sah. Sensor sesekali gagal terbaca, dan tanpa pemeriksaan ini nilai rusak ikut terpakai dalam perhitungan. |
computeHeatIndex() | Menghitung suhu yang dirasakan tubuh dengan memperhitungkan kelembapan. Argumen false berarti satuan Celsius. |
F() | Menyimpan teks di memori flash, bukan SRAM. Penting karena Uno hanya punya SRAM 2 KB. |
Hasil di Serial Monitor
Buka menu Tools kemudian Serial Monitor, dan pastikan baud rate di pojok kanan bawah disetel ke 9600. Keluaran yang muncul akan berbentuk seperti ini:
Pembacaan DHT22 dimulai
Suhu: 29.4 C | Kelembapan: 71.2 % | Terasa seperti: 35.1 C
Suhu: 29.4 C | Kelembapan: 71.0 % | Terasa seperti: 35.0 C[PERLU SCREENSHOT — tangkapan layar Serial Monitor berisi nilai pembacaan asli dari pengujian, bukan ilustrasi.]
Apabila yang muncul justru karakter acak, penyebabnya hampir selalu satu: angka baud rate di Serial Monitor berbeda dengan angka pada Serial.begin(). Samakan keduanya.
Masalah Umum dan Solusinya
| Gejala | Penyebab Paling Sering | Solusi |
|---|---|---|
| Selalu muncul “Gagal membaca sensor” | Resistor pull-up belum terpasang pada versi 4 pin | Pasang resistor 10 kilo ohm antara VCC dan DATA |
| Gagal membaca, wiring sudah benar | Jenis sensor salah didefinisikan di kode | Pastikan tertulis DHT22, bukan DHT11 |
| Nilai muncul tetapi sesekali melompat | Pembacaan terlalu sering atau kabel terlalu panjang | Beri jeda minimal 2 detik, pendekkan kabel di bawah 20 cm |
| Kelembapan selalu terbaca 0 atau 100 | Sensor rusak akibat pernah terkena air atau embun | Ganti sensor, hindari pemasangan di titik terkena percikan |
| Compile gagal, Adafruit_Sensor.h tidak ditemukan | Library dependency belum terpasang | Pasang Adafruit Unified Sensor |
| Suhu terbaca lebih tinggi dari kenyataan | Sensor terlalu dekat dengan papan Arduino | Jauhkan sensor dari regulator dan chip yang menghasilkan panas |
Tips Akurasi dan Pemasangan
- Beri waktu stabilisasi. Pembacaan satu sampai dua menit pertama setelah sensor dinyalakan sering belum stabil. Abaikan data awal tersebut.
- Jauhkan dari sumber panas. Regulator tegangan di papan Arduino menghasilkan panas yang cukup untuk menaikkan pembacaan beberapa derajat.
- Pastikan ada aliran udara. Sensor yang terkurung dalam casing tertutup akan membaca kondisi di dalam casing, bukan kondisi ruangan.
- Batasi panjang kabel. Di atas 20 cm, pembacaan gagal makin sering. Untuk jarak lebih jauh, turunkan nilai resistor pull-up atau gunakan kabel berpelindung.
- Jangan pasang di luar ruangan tanpa pelindung. DHT22 tidak tahan air, dan embun yang mengendap dapat merusaknya secara permanen.
Mengembangkan Project Ini
- Menampilkan hasil pembacaan pada LCD I2C 16×2 agar alat bisa dipakai tanpa komputer.
- Menambahkan relay untuk menyalakan kipas secara otomatis ketika suhu melewati batas tertentu.
- Mencatat data berkala ke kartu SD untuk dianalisis kemudian.
- Mengganti papan dengan ESP32 agar data dapat dikirim ke dashboard melalui WiFi.
Pertanyaan yang Sering Diajukan
Apakah DHT22 bisa dipakai dengan tegangan 3,3 volt?
Bisa. DHT22 bekerja pada rentang 3,3 sampai 6 volt, sehingga kompatibel dengan ESP32 maupun ESP8266 tanpa level shifter.
Berapa jarak maksimum kabel sensor?
Untuk pemakaian normal, usahakan di bawah 20 cm. Panjang di atas itu masih memungkinkan dengan menurunkan nilai resistor pull-up dan memakai kabel berpelindung, tetapi tingkat kegagalan pembacaan akan meningkat.
Kenapa pembacaan pertama selalu gagal?
Sensor membutuhkan waktu sesaat untuk siap setelah diberi daya. Beri jeda dua detik sebelum pembacaan pertama, dan tangani hasil gagal dengan pemeriksaan isnan() seperti pada kode di atas.
Bisakah memakai beberapa DHT22 sekaligus?
Bisa. Setiap sensor memakai pin data sendiri dan dideklarasikan sebagai objek terpisah. Bacalah bergantian dengan jeda dua detik di antara keduanya.
Apakah DHT22 perlu dikalibrasi?
Sensor ini sudah dikalibrasi dari pabrik dan tidak menyediakan mekanisme kalibrasi ulang. Apabila akurasi yang dibutuhkan lebih tinggi, pertimbangkan sensor kelas lain seperti SHT31 atau BME280.
Langkah Selanjutnya
Setelah berhasil membaca sensor pertama, konsep yang sama berlaku untuk hampir semua sensor digital lainnya. Urutan belajar lengkapnya tersedia di panduan belajar Arduino dari nol, dan kumpulan ide pengembangannya ada di 10 ide project Arduino untuk pemula.
Ingin didampingi langsung saat merangkai dan men-debug? Lihat kursus Arduino bisaioti.




