Prinsip Kerja DHT21 (AM2301)
1. Komponen Internal DHT21
Sensor DHT21 terdiri dari tiga komponen utama:
- Sensor kelembaban berbasis kapasitif
- Sensor suhu berbasis thermistor
- IC pengendali sinyal digital untuk mengolah dan mengirim data ke mikrokontroler
2. Cara Kerja Pengukuran
🔹 Kelembaban (Humidity)
- Sensor kelembaban kapasitif terdiri dari dua elektroda dengan lapisan polimer di antaranya.
- Ketika kelembaban udara berubah, kandungan air dalam polimer ikut berubah → ini mengubah kapasitansi antar elektroda.
- Perubahan kapasitansi ini dikonversi oleh IC menjadi nilai digital kelembaban.
🔹 Suhu (Temperature)
- Sensor suhu berupa thermistor (resistor yang sensitif terhadap suhu).
- Saat suhu berubah, resistansi thermistor juga berubah.
- IC membaca perubahan resistansi ini dan mengubahnya menjadi nilai suhu dalam derajat Celsius.
3. Pengiriman Data
- DHT21 menggunakan komunikasi satu kabel (single-wire protocol).
- Setelah diminta oleh mikrokontroler, sensor akan mengirimkan 40 bit data:
- 16 bit data kelembaban
- 16 bit data suhu
- 8 bit checksum (untuk verifikasi keakuratan data)
4. Kesimpulan Prinsip Kerja
DHT21 bekerja dengan membaca perubahan fisik pada komponen internalnya (kapasitansi & resistansi) akibat suhu dan kelembaban, lalu mengubahnya menjadi data digital dan mengirimkannya ke mikrokontroler secara berkala.
Karakteristik Sensor DHT21 (AM2301)
Kategori | Spesifikasi DHT21 |
---|---|
Tipe Sensor | Digital Temperature & Humidity Sensor |
Rentang Suhu | -40°C hingga +80°C |
Akurasi Suhu | ±0.5°C |
Resolusi Suhu | 0.1°C |
Rentang Kelembaban | 0% RH hingga 100% RH |
Akurasi Kelembaban | ±3% RH (pada 25°C, 20–80% RH) |
Resolusi Kelembaban | 0.1% RH |
Tegangan Operasi | 3.3V – 6V DC |
Arus Operasi (rata-rata) | ~1.5 mA |
Frekuensi Sampling | Setiap 2 detik (0.5 Hz) |
Output Data | Digital, 1-wire (single-bus) |
Protokol Komunikasi | Proprietary 1-wire (bukan Dallas 1-Wire) |
Ukuran Fisik | ± 59 × 27 × 13 mm (modul tertutup) |
Tingkat Stabilitas | Tinggi; sudah dikalibrasi dari pabrik |
Kelebihan | Akurat, stabil, tidak perlu kalibrasi ulang |
Kekurangan | Kecepatan pembacaan lambat (minimal 2 detik sekali) |
🔍 Kelebihan DHT21 dibanding DHT11 dan DHT22
Sensor | Akurasi Suhu | Akurasi RH | Rentang Suhu | Rentang RH | Sampling Time |
---|---|---|---|---|---|
DHT11 | ±2°C | ±5% RH | 0–50°C | 20–90% RH | 1 Hz (1 detik) |
DHT21 | ±0.5°C | ±3% RH | -40–80°C | 0–100% RH | 0.5 Hz (2s) |
DHT22 | ±0.5°C | ±2–5% RH | -40–80°C | 0–100% RH | 0.5 Hz (2s) |
Contoh Penerapan Sensor DHT21
1. Smart Home (Rumah Pintar)
✅ Fungsi: Memantau suhu dan kelembaban di dalam rumah untuk kenyamanan dan efisiensi energi.
📌 Contoh:
- Otomatis menghidupkan AC saat suhu terlalu panas.
- Menghidupkan humidifier saat kelembaban terlalu rendah.
2. Sistem Greenhouse Otomatis
✅ Fungsi: Mengatur iklim dalam rumah kaca untuk tanaman agar tetap ideal.
📌 Contoh:
- Mengontrol kipas atau penyiram otomatis berdasarkan suhu dan kelembaban.
- Logging data suhu & kelembaban untuk analisis pertumbuhan tanaman.
3. Monitoring Lingkungan (Environmental Monitoring)
✅ Fungsi: Mengukur kondisi udara di dalam atau luar ruangan.
📌 Contoh:
- Stasiun cuaca mini berbasis Arduino atau ESP32.
- Deteksi perubahan iklim mikro di area tertentu seperti laboratorium, gudang, atau ruangan server.
4. Smart Agriculture (Pertanian Pintar)
✅ Fungsi: Menyesuaikan irigasi dan ventilasi berdasarkan kelembaban dan suhu.
📌 Contoh:
- Sistem pengairan otomatis ketika suhu tinggi dan kelembaban rendah.
- Monitoring cuaca di ladang atau sawah untuk mendukung pertanian presisi.
5. Alat Kesehatan & Ruang Steril
✅ Fungsi: Memastikan kondisi lingkungan tetap sesuai standar kesehatan.
📌 Contoh:
- Menjaga kelembaban di ruang isolasi pasien.
- Monitor suhu ruang penyimpanan obat atau vaksin.
6. Gudang & Penyimpanan Barang Sensitif
✅ Fungsi: Menjaga suhu dan kelembaban optimal agar barang tidak rusak.
📌 Contoh:
- Penyimpanan dokumen penting, makanan kering, komoditas ekspor.
- Gudang elektronik atau arsip untuk mencegah jamur/kerusakan akibat kelembaban.
7. IoT Project & Edukasi
✅ Fungsi: Melatih siswa/maker memahami sensor lingkungan dan integrasi data.
📌 Contoh:
- Proyek pembelajaran IoT dengan NodeMCU atau ESP32.
- Dashboard suhu-kelembaban online dengan ThingSpeak, Blynk, dsb.
Cara penggunaan menggunakan arduino uno

Wiring / Koneksi:
Komponen | Arduino UNO |
---|---|
DHT21 VCC | 5V |
DHT21 GND | GND |
DHT21 DATA | Pin 2 |
LCD SDA | A4 |
LCD SCL | A5 |
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// === DHT Setup ===
#define DHTPIN 2
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);
// === LCD I2C Setup ===
LiquidCrystal_I2C lcd(0x27, 16, 2);
// === Custom Characters ===
byte derajatChar[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte tetesAir[8] = {
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
lcd.createChar(0, derajatChar); // Simbol derajat
lcd.createChar(1, tetesAir); // Simbol tetesan air
lcd.setCursor(0, 0);
lcd.print(" Suhu & Lembab ");
lcd.setCursor(0, 1);
lcd.print(" Monitor ");
delay(2000);
lcd.clear();
}
void loop() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
lcd.setCursor(0, 0);
lcd.print("Gagal Membaca");
lcd.setCursor(0, 1);
lcd.print("Sensor DHT21");
delay(2000);
return;
}
// Tampilkan Suhu
lcd.setCursor(0, 0);
lcd.print("Suhu : ");
lcd.print(suhu, 1);
lcd.write(byte(0)); // Derajat
lcd.print("C ");
// Tampilkan Kelembaban
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(kelembaban, 1);
lcd.print("%");
lcd.write(byte(1)); // Air
delay(2000);
// === Tampilan Indikator Suhu ===
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kondisi Suhu:");
lcd.setCursor(0, 1);
if (suhu < 20.0) {
lcd.print(" Dingin ❄");
} else if (suhu >= 20.0 && suhu <= 30.0) {
lcd.print(" Normal 🌤");
} else {
lcd.print(" Panas 🔥");
}
delay(2000);
lcd.clear();
}
Cara Penggunaan dengan ESP32
ESP32 adalah mikrokontroler yang lebih canggih dengan konektivitas Wi-Fi dan Bluetooth. Dengan ESP32, Anda dapat mengirimkan data ke server atau aplikasi web melalui jaringan

Komponen | Pin ESP32 |
---|
DHT21 VCC | 3.3V atau 5V |
DHT21 GND | GND |
DHT21 DATA | GPIO 14 |
LCD SDA | GPIO 21 |
LCD SCL | GPIO 22 |
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// ==== Konfigurasi PIN ====
#define DHTPIN 14
#define DHTTYPE DHT21
// ==== Inisialisasi Sensor dan LCD ====
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat bisa juga 0x3F
// ==== Custom Character ====
byte derajatChar[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte tetesAir[8] = {
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};
void setup() {
Wire.begin(21, 22); // SDA = 21, SCL = 22
lcd.init();
lcd.backlight();
dht.begin();
lcd.createChar(0, derajatChar);
lcd.createChar(1, tetesAir);
lcd.setCursor(0, 0);
lcd.print(" Suhu & Lembab ");
lcd.setCursor(0, 1);
lcd.print(" Monitor ");
delay(2000);
lcd.clear();
}
void loop() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
lcd.setCursor(0, 0);
lcd.print(" Gagal Membaca ");
lcd.setCursor(0, 1);
lcd.print(" Sensor DHT21 ");
delay(2000);
return;
}
// Tampilkan Suhu dan Kelembaban
lcd.setCursor(0, 0);
lcd.print("Suhu : ");
lcd.print(suhu, 1);
lcd.write(byte(0)); // Derajat
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(kelembaban, 1);
lcd.print("%");
lcd.write(byte(1)); // Tetes air
delay(2000);
lcd.clear();
// Indikator Suhu
lcd.setCursor(0, 0);
lcd.print("Kondisi Suhu:");
lcd.setCursor(0, 1);
if (suhu < 20.0) {
lcd.print(" Dingin ❄");
} else if (suhu <= 30.0) {
lcd.print(" Normal 🌤");
} else {
lcd.print(" Panas 🔥");
}
delay(2000);
lcd.clear();
}
Cara Penggunaan dengan Arduino Mega
Arduino Mega memiliki lebih banyak pin dan lebih banyak port serial dibandingkan dengan Arduino Uno, yang membuatnya lebih fleksibel

Wiring Arduino Mega:
Komponen | Arduino Mega |
---|---|
DHT21 VCC | 5V |
DHT21 GND | GND |
DHT21 DATA | Pin 2 |
LCD SDA | Pin 20 (SDA) |
LCD SCL | Pin 21 (SCL) |
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// === Konfigurasi DHT21 ===
#define DHTPIN 2
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);
// === Inisialisasi LCD I2C ===
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti ke 0x3F jika tidak tampil
// === Custom Character: Derajat dan Tetes Air ===
byte derajatChar[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte tetesAir[8] = {
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
lcd.createChar(0, derajatChar);
lcd.createChar(1, tetesAir);
lcd.setCursor(0, 0);
lcd.print(" Suhu & Lembab ");
lcd.setCursor(0, 1);
lcd.print(" Monitor ");
delay(2000);
lcd.clear();
}
void loop() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
lcd.setCursor(0, 0);
lcd.print(" Gagal Membaca ");
lcd.setCursor(0, 1);
lcd.print(" Sensor DHT21 ");
delay(2000);
return;
}
// Tampilan Utama: Suhu & Kelembaban
lcd.setCursor(0, 0);
lcd.print("Suhu : ");
lcd.print(suhu, 1);
lcd.write(byte(0)); // Derajat
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(kelembaban, 1);
lcd.print("%");
lcd.write(byte(1)); // Tetes air
delay(2000);
lcd.clear();
// Tampilan Kondisi Suhu
lcd.setCursor(0, 0);
lcd.print("Kondisi Suhu:");
lcd.setCursor(0, 1);
if (suhu < 20.0) {
lcd.print(" Dingin ❄");
} else if (suhu <= 30.0) {
lcd.print(" Normal 🌤");
} else {
lcd.print(" Panas 🔥");
}
delay(2000);
lcd.clear();
}