TUTORIAL: Sensor Suhu & Kelembaban DHT21 dengan LCD 16×2 I2C di Arduino Uno, ESP32, & Arduino Mega

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)

KategoriSpesifikasi DHT21
Tipe SensorDigital Temperature & Humidity Sensor
Rentang Suhu-40°C hingga +80°C
Akurasi Suhu±0.5°C
Resolusi Suhu0.1°C
Rentang Kelembaban0% RH hingga 100% RH
Akurasi Kelembaban±3% RH (pada 25°C, 20–80% RH)
Resolusi Kelembaban0.1% RH
Tegangan Operasi3.3V – 6V DC
Arus Operasi (rata-rata)~1.5 mA
Frekuensi SamplingSetiap 2 detik (0.5 Hz)
Output DataDigital, 1-wire (single-bus)
Protokol KomunikasiProprietary 1-wire (bukan Dallas 1-Wire)
Ukuran Fisik± 59 × 27 × 13 mm (modul tertutup)
Tingkat StabilitasTinggi; sudah dikalibrasi dari pabrik
KelebihanAkurat, stabil, tidak perlu kalibrasi ulang
KekuranganKecepatan pembacaan lambat (minimal 2 detik sekali)

🔍 Kelebihan DHT21 dibanding DHT11 dan DHT22

SensorAkurasi SuhuAkurasi RHRentang SuhuRentang RHSampling Time
DHT11±2°C±5% RH0–50°C20–90% RH1 Hz (1 detik)
DHT21±0.5°C±3% RH-40–80°C0–100% RH0.5 Hz (2s)
DHT22±0.5°C±2–5% RH-40–80°C0–100% RH0.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:

KomponenArduino UNO
DHT21 VCC5V
DHT21 GNDGND
DHT21 DATAPin 2
LCD SDAA4
LCD SCLA5
#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

KomponenPin ESP32
DHT21 VCC3.3V atau 5V
DHT21 GNDGND
DHT21 DATAGPIO 14
LCD SDAGPIO 21
LCD SCLGPIO 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:

KomponenArduino Mega
DHT21 VCC5V
DHT21 GNDGND
DHT21 DATAPin 2
LCD SDAPin 20 (SDA)
LCD SCLPin 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();
}

Leave a Reply

Your email address will not be published. Required fields are marked *