Categories
1.0-Pendidikan

Sensor Suhu dan Kelembapan DHT

Salah satu jenis sensor untuk mengukur suhu dan kelembapan yang cukup banyak digunakan adalah Sensor DHT. DHT adalah singkatan dari Digital Humidity and Temperature. Sensor DHT adalah sensor digital murah untuk mengindera suhu dan kelembaban.  Sensor ini dapat dengan mudah dihubungkan dengan mikro-pengontrol apa pun seperti Arduino, Raspberry Pi untuk mengukur kelembaban dan suhu secara instan. Ini dapat digunakan untuk sejumlah aplikasi seperti yang akan kita lihat nanti.

Dalam tutorial ini saya akan menunjukkan kepada Anda cara menggunakan sensor DHT11 dan DHT22 untuk mengukur suhu dan kelembaban dengan Arduino Uno.

Terdapat dua versi sensor DHT yaitu:

1. DHT11

2. DHT22

Mereka terlihat agak mirip dan memiliki pinout yang sama, tetapi memiliki karakteristik yang berbeda. Berikut adalah detail dari kedua sensor ini:

Karakteristik Sensor DHT

DHT22 sedikit lebih mahal karena memiliki spesifikasi yang lebih baik seperti lebih presisi, lebih akurat dan bekerja dalam kisaran suhu & kelembaban yang lebih besar. Kisaran pengukuran suhunya adalah dari -40 °C hingga +125 °C dengan akurasi +-0,5 derajat, sedangkan kisaran suhu DHT11 adalah dari 0 °C hingga 50 °C dengan akurasi +-2 derajat. Juga sensor DHT22 memiliki rentang pengukuran kelembaban yang lebih baik, dari 0 hingga 100% dengan akurasi 2-5%, sedangkan kisaran kelembaban DHT11 adalah dari 20 hingga 80% dengan akurasi 5%.

Ada beberapa hal di mana sensor DHT11 bisa menjadi pilihan yang lebih baik daripada sensor DHT22. Karena lebih murah, berukuran lebih kecil dan memiliki tingkat pengambilan sampel yang lebih tinggi. Sampling rate DHT11 adalah 1Hz yaitu satu pembacaan setiap detik, sedangkan sampling rate DHT22 adalah 0.5Hz yaitu satu pembacaan untuk setiap dua detik.

Prinsip Kerja Sensor DHT

Mari kita bongkar sensor DHT11 dan DHT22 dan lihat apa yang ada di dalamnya.

Sensor DHT terdiri dari elemen penginderaan kelembaban kapasitif dan termistor untuk penginderaan suhu.  Kapasitor penginderaan kelembaban memiliki dua elektroda dengan substrat penahan kelembaban sebagai dielektrik di antara keduanya. Perubahan nilai kapasitansi terjadi dengan perubahan tingkat kelembaban..

Untuk mengukur suhu sensor ini menggunakan termistor NTC, Istilah “NTC” berarti “Koefisien Suhu Negatif”, yang berarti resistansi berkurang seiring dengan peningkatan suhu seperti yang ditunjukkan pada grafik di bawah ini. Untuk mendapatkan nilai resistansi yang lebih besar bahkan untuk perubahan suhu terkecil, sensor ini biasanya terdiri dari keramik semikonduktor atau polimer.

Di sisi lain, ada PCB kecil dengan IC kemasan SOIC-14 8-bit. IC ini mengukur dan memproses sinyal analog dengan koefisien kalibrasi yang disimpan, melakukan konversi analog ke digital dan memberikan sinyal digital dengan suhu dan kelembaban.

Pinout DHT11 dan DHT22

Baik Sensor DHT11 dan DHT22 memiliki 4 Pin, yaitu:

  1. Pin VCC memasok daya untuk sensor. Meskipun tegangan suplai berkisar dari 3.3V hingga 5.5V, suplai 5V direkomendasikan.
  2. Pin data digunakan untuk komunikasi antara sensor dan mikrokontroler.
  3. NC Tidak terhubung.
  4. Ground harus dihubungkan ke ground mikrokontroler yang Anda gunakan.

Deskripsi Sensor DHT11 dan DHT22

Sensor DHT11 dan DHT22 terdiri dari 3 komponen utama. Sensor kelembaban, termistor NTC (koefisien suhu negatif) dan mikrokontroler 8-bit, yang mengubah sinyal analog dari kedua sensor dan mengirimkan sinyal digital tunggal.

Data dari sensor DHT11 dan DHT22 terdiri dari 40 bit dan formatnya adalah sebagai berikut:

  1. 8 – Data bit untuk bagian integral dari nilai RH,
  2. 8 – Data bit untuk bagian desimal dari nilai RH,
  3. 8 – Data bit untuk bagian integral dari nilai Suhu,
  4. 8 – Data bit untuk bagian desimal dari nilai Suhu dan
  5. 8 – Data bit untuk checksum.

Jika transmisi data benar, check-sum harus berupa 8 Bit terakhir dari “8 Bit integral RH data + 8 Bit Bit desimal RH data + 8 Bit Bit integral T data + 8 Bit Bit desimal T data”.

Contoh

Misalnya data yang diterima dari Sensor DHT adalah

0011010100000000000110000000000001001101

Data ini dapat dipisahkan berdasarkan struktur yang disebutkan di atas sebagai berikut

Untuk memeriksa apakah data yang diterima benar atau tidak, kita perlu melakukan perhitungan kecil. Tambahkan semua nilai integral dan desimal dari RH dan Suhu dan periksa apakah jumlahnya sama dengan nilai checksum yaitu data 8 Bit terakhir.

Nilai ini sama dengan checksum dan karenanya data yang diterima valid. Sekarang untuk mendapatkan nilai RH dan Suhu, cukup konversi data biner menjadi data desimal.

Kelembaban: 0011 0101 = 35% Suhu: 0001 1000 = 24 °C

Jika data yang diterima tidak benar maka terima data lagi anda dapat melihat datasheet sensor DHT11 dan DHT22 .

Menghubungkan Sensor DHT11 dan DHT22 dengan Arduino Uno

Sekarang kita memiliki pemahaman lengkap tentang prinsip kerja sensor ini. Sekarang saatnya mengintegrasikan sensor dengan Arduino untuk mengukur Suhu dan Humidity.So, mari kita lakukan.

Hubungkan Sensor dengan Arduino Uno seperti yang ditunjukkan pada gambar.

Kita perlu menempatkan resistor pull-up 10KΩ antara VCC dan jalur data sensor untuk menjaganya tetap TINGGI untuk komunikasi yang tepat antara sensor dan Microcontroller.When selesai dengan koneksi kita siap untuk mengunggah program di Arduino untuk melihat pembacaan Suhu dan Kelembaban pada Liquid Crystal Display.Now saya akan menunjukkan kepada Anda cara menulis kode untuk mengukur suhu dan kelembaban dengan dan tanpa menggunakan perpustakaan DHT dan Perhatikan bahwa dalam kedua kasus koneksi sirkuit tetap sama.

Antarmuka Sensor DHT tanpa menggunakan pustaka DHT

Meskipun ada perpustakaan khusus untuk sensor DHT yang disebut “DHT” . Dalam hal ini saya akan menunjukkan kepada Anda cara menulis program yang mengukur Kelembaban dan Suhu dari sensor DHT tanpa menggunakan perpustakaan DHT.

Untuk Memahami dan Menulis program tanpa menggunakan perpustakaan DHT, Anda wajib melalui Lembar Data sensor. Seperti yang ditulis program didasarkan pada diagram waktu data yang disediakan dalam lembar data.

Awalnya MCU mengirimkan sinyal mulai dalam keadaan rendah, DHT11 berubah dari mode konsumsi daya rendah ke mode berjalan, proses ini harus memakan waktu setidaknya 18ms untuk memastikan deteksi sinyal MCU oleh DHT, kemudian MCU akan menarik tegangan dan menunggu 20-40us untuk tanggapan DHT.

Kode:

pinMode (datapin, OUTPUT); Mendeklarasikan Datapin sebagai pin keluaran

digitalWrite(datapin, LOW); Sinyal rendah dari arduino ke Sensor untuk memulai proses

delay(20); Waktu retensi rendah 20 μs

digitalWrite(datapin, TINGGI); Mengatur datapin ke status tinggi

pinMode(datapin,INPUT_PULLUP); secara default akan menjadi tinggi karena pull up internal

Setelah DHT mendeteksi sinyal start, ia akan mengirimkan sinyal respons tingkat tegangan rendah, yang berlangsung 80us. Kemudian program DHT mengatur tingkat tegangan Data Single-bus dari rendah ke tinggi dan menyimpannya selama 80us untuk persiapan DHT untuk mengirim data. Ketika DATA Single-Bus berada pada tingkat tegangan rendah, ini berarti DHT mengirimkan sinyal respons. Setelah DHT mengirimkan sinyal respons, ia menarik tegangan dan menyimpannya selama 80us dan bersiap untuk transmisi data. Saat DHT mengirim data ke MCU, setiap bit data dimulai dengan level tegangan rendah 50us dan panjang sinyal tingkat tegangan tinggi berikut menentukan apakah bit data adalah “0” atau “1”.yaitu jika durasi tingkat tegangan tinggi membentuk sensor berada di antara 26μs hingga 28μs maka bit “0” diterima,  dan jika durasi tinggitage tingkat membentuk sensor adalah 70μs maka bit “1” diterima seperti yang ditunjukkan pada gambar di bawah ini.

Code:

duration=pulseIn(datapin, LOW);                     //duration variable starts timing when sensor sends low voltage level response

if(duration <= 84 && duration >= 72)
{
     while(1)
     {
          duration=pulseIn(datapin, HIGH);          //duration variable starts timing when sensor sends High voltage level response
          if(duration <= 26 && duration >= 20)      //if duration is in between 26µs and 20µs then bit 0 is transmitted by sensor
          {
               value=0;                             //Bit 0 is received
          }
          else if(duration <;= 74 && duration >= 65) //if duration is in between 74µs and 65µs then bit 1 is transmitted by sensor
          {
               value=1;                             //Bit 1 is received
          }
          else if(z==40)                            //Come out of the loop when 40 bis of data is received
          {
               break;
          }
          i[z/8]| = value<<(7- (z%8));                //leftshift each bit of data
          j[z]=value;                               //store the data in the array variable j
          z++;                                      //increment length
     } 
}

Proses Komunikasi Keseluruhan

Sekarang kita memiliki pemahaman lengkap tentang proses komunikasi, sekarang kita siap untuk mengunggah program yang diberikan di bawah ini dan mengukur suhu dan kelembaban sekitarnya.

Code:

#include <LiquidCrystal.h>       //lcdlibrary                    

LiquidCrystal lcd(2,3,4,5,6,7);                    //<span class="wikiword">LiquidCrystal</span>(rs, enable, d4, d5, d6, d7)

int datapin=11;                                    //Data Pin
volatile unsigned long duration=0;
unsigned char i[5];                                //array to hold 5 formats of data                                   
unsigned int j[40];                                //declare a array of size 40 to store the 40bits of data from the sensor
unsigned char value=0;                             //Declare and initialize value Variable that is received
unsigned checksum=0;                               //Declare and initialize Checksum Variable
int z=0;                                           //Declare and initialize length Variable

void setup()
{
     lcd.begin(16, 2);
     lcd.setCursor(0, 0);
     lcd.print(" Selamat Datang ");                    //Welcome Note
     lcd.setCursor(0, 1);                          //Set the location where the text needs to be displayed in LCD
     lcd.print("  di D3TT-TelU ");
     delay(2000);
}

void loop()
{
     delay(1000);
     while(1)
     {
          delay(1000);
          pinMode(datapin,OUTPUT);                //intially declaring datapin as the output pin
          digitalWrite(datapin,LOW);              //Arduino sends a start signal in low state ,this can be done by setting datapin in Low state
          delay(20);                              //output is set to low, and low retention time can’ t be less than 18ms     
          digitalWrite(datapin,HIGH);
          pinMode(datapin,INPUT_PULLUP);          //by default it will become high due to internal pull up
          duration=pulseIn(datapin, LOW);
          if(duration <= 84 && duration >= 72)
          {
               while(1)
               {
                    duration=pulseIn(datapin, HIGH);           //duration variable starts timing when sensor sends High voltage level response
                    if(duration <= 26 && duration >= 20)       //if duration is in between 26µs and 20µs then bit 0 is transmitted by sensor
                    {
                         value=0;                              //Bit 0 is received
                    }
                    else if(duration <= 74 && duration >= 65)  //if duration is in between 74µs and 65µs then bit 1 is transmitted by sensor
                    {
                         value=1;                              //Bit 0 is received
                    }
                    else if(z==40)                            
                    {
                         break;                                //Come out of the loop when 40 bis of data is received
                    }
                    i[z/8]|=value<<(7- (z%8));                 //leftshift each bit of data
                    j[z]=value;                                //store the data in the array variable j
                    z++;                                       //increment length i.e z
               }
         }
         checksum=i[0]+i[1]+i[2]+i[3];                         //checksum should be equal to addition of high and low byte of humidity and temperature
         if(checksum==i[4] && checksum!=0)                     //checksum should be equal to last byte of 40 bits data and it should not be 0
         {
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("Temp = ");                           
              lcd.setCursor(7,0);
              lcd.print(i[2]);                                 //print high temperature byte in decimal form
              lcd.print((char)223);                            //print degree symbol
              lcd.print("C");
              lcd.setCursor(0,1);
              lcd.print("Humidity = ");
              lcd.setCursor(11,1);
              lcd.print(i[0]);                                 //print high Humidity byte in decimal form
              lcd.setCursor(13,1);
              lcd.print("%");
         }
         z=0;                                                  //set length of bits =0
         i[0]=i[1]=i[2]=i[3]=i[4]=0;                           //set the 5 data formats to 0
     }
}

Antarmuka Sensor DHT menggunakan pustaka DHT

DHT-11 antarmuka dengan Arduino juga dapat dilakukan dengan menggunakan library bernama DHT.h . Perpustakaan DHT.h yang memiliki banyak fungsi bawaan yang membuat kita mudah untuk menuliskan kode.

Sebelum mengunggah kode yang diberikan di bawah ini pastikan ada library DHT di IDE Arduino Anda, Jika tidak ada maka Anda dapat menginstalnya dengan mengikuti langkah-langkah:
>Buka Sketch >>Pilih Sertakan Perpustakaan >>Pilih Kelola Perpustakaan >>Kemudian Ketik Perpustakaan sensor DHT di kotak pencarian >>Klik Instal. Dengan ini perpustakaan yang diperlukan akan diinstal, dan Anda dapat mulai mengunggah kode yang diberikan di bawah ini.


Code:

# include "DHT.h"                                  //DHT library
# include "LiquidCrystal.h"                        //lcd library
# define DHTPIN 11                                 //DHT pin

//Uncomment whichever Type you are using

# define DHTTYPE DHT11
//# define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);                          //Creating DHT object
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
float t;                                           //temperature in celcius
float h;                                           //humidity in percentage

void setup()                                       //setup
{
     Serial.begin(9600);                           //Setting Boudrate
     dht.begin();
     lcd.begin(16, 2);                             // Initializes the interface to the LCD screen
     lcd.setCursor(0, 0);
     lcd.print("  Welcome to  ");
     lcd.setCursor(0, 1);                          //Set the location where the text needs to be displayed in LCD
     lcd.print("NerdyElectronics   ");
     delay(2000);
     lcd.clear();
}

void loop()                                        //loop
{
     h = dht.readHumidity() ;
     t = dht.readTemperature();
     lcd.setCursor(0, 0);
     lcd.print("Temp: ");
     lcd.print(t);                                 //Prints the temperature value from the sensor
     lcd.print("");
     lcd.print((char)223);                         //shows degrees character
     lcd.print("C");
     lcd.setCursor(0, 1);
     lcd.print("Humi: ");
     lcd.print(h);
     lcd.print("% ");
     delay(5000);

     lcd.setCursor(0, 0);
     lcd.print("Temp: ");
     lcd.print(dht.convertCtoF(t));                //Inbuilt function to convert Temp in Celcius to Fahrenhit
     lcd.print(" ");
     lcd.print((char)223);                         //shows degrees character
     lcd.print("F");
     delay(5000);
}

Aplikasi Sensor DHT

1. Sensor DHT dapat digunakan sebagai kompensator dengan sensor ultrasonik untuk menentukan jarak dengan lebih tepat.Anda dapat menemukan aplikasi ini di tautan ini https://nerdyelectronics.com/embedded-systems/sensors/how-to-improve-readings-of-ultrasonic-sensor-temperature-and-humidity-compensation/

2. Sensor DHT digunakan dalam berbagai aplikasi seperti mengukur nilai kelembaban dan suhu dalam sistem pemanas, ventilasi dan pendingin udara (HVAC).

3. Sensor ini dapat digunakan di gudang karena tingkat kelembaban di udara mempengaruhi berbagai proses fisik, kimia dan biologis.

4. Stasiun cuaca juga menggunakan sensor ini untuk memprediksi kondisi cuaca.

Sumber: https://nerdyelectronics.com/working-of-dht-sensor-dht11-and-dht22/

By denny darlis

Lecturer at Diploma of Telecommunication Engineering
Telkom University - Bandung, Indonesia
Member of IEEE, ETA, and MASTEL

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.