Senin, 06 Juni 2016

SENSOR DHT11

Sensor DHT11

Sensor DHT 11 merupakan sensor dengan kalibrasi sinyal digital yang mampu memberikan informasi suhu dan kelembaban. Sensor ini tergolong komponen yang memiliki tingkat stabilitas yang baik, serta ditambah dengan kemampuan mikrokontroler 8 bit seperti Arduino. Koefisien kalibrasi DHT 11 disimpan dalam OTP program memori, sehingga ketika internal sensor mendeteksi sesuatu, maka modul ini membaca koefisien sensor.

Table II.1 Spesifikasi DHT 11
Power Suplay
3-5 v DC
Rentang pengukuran
Kelembapan (20% – 90% RH)
Suhu (0-50 celcius)
Akurasi
Kelembapan (4 RH)
Suhu (2.0 Celcius)
Sensitivitas
Kelembapan (1% RH)
Suhu(0.1 Celcius)
Priode Sensing
Rata-rata: 2 s

                                                Gambar  Rangkaian sensor dht 1

Prinsip Kerja DHT 11
langkah pertama akan dikirimkan perintah START oleh micro ke DHT 11
jadi kita kirim pulsa Low 18ms dan High 40us, lalu kita tunggu sebentar sampai ada response/jawaban dari DHT 11 berupa pulsa low - high selebar 54us & 80us
setelah itu hasil pengukuran akan dikirimkan sensor menggunakan format 8bit sebanyak 5 kali

Setiap sensor DHT11 memiliki fitur kalibrasi sangat akurat dari kelembaban ruang kalibrasi. Koefisien kalibrasi yang disimpan dalam memori program OTP, sensor internal mendeteksi sinyal dalam proses, kita harus menyebutnya koefisien kalibrasi. Sistem antarmuka tunggal-kabel serial terintegrasi untuk menjadi cepat dan mudah. Kecil ukuran, daya rendah, sinyal transmisi jarak hingga 20 meter, sehingga berbagai aplikasi dan bahkan aplikasi yang paling menuntut. Produk ini 4-pin pin baris paket tunggal. Koneksi nyaman, paket khusus dapat diberikan sesuai dengan kebutuhan pengguna.
Contoh Program Untuk menampilkan Suhu di layar Laptop
(Program pada Arduino)
#define DHT11_PIN 0      // define analog  port 0
byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while(!(PINC & _BV(DHT11_PIN)))
    {};  // wait  forever until anlog input port 0 is ‘1’   (NOTICE: PINC reads all the analog input ports
    //and  _BV(X) is the macro operation which pull up positon ‘X’to ‘1’ and the rest positions to ‘0’. it is equivalent to 1<
    delayMicroseconds(30);
    if(PINC & _BV(DHT11_PIN))  //if analog input port 0 is still ‘1’ after 30 us
      result |=(1<<(7-i)); this=”” position=”” is=”” 1=”” p=””>
    while((PINC & _BV(DHT11_PIN)));  // wait ‘1’ finish
    }
    return result;
}
void setup()
{
  DDRC |= _BV(DHT11_PIN);   //let analog port 0 be output port
  PORTC |= _BV(DHT11_PIN);  //let the initial value of this port be ‘1’
  Serial.begin(9600);
  Serial.println(“Ready”);
}
void loop()
{
  byte dht11_dat[5];
  byte dht11_in;
  byte i;// start condition
  PORTC &= ~_BV(DHT11_PIN);    // 1. pull-down i/o pin for 18ms
  delay(18);
  PORTC |= _BV(DHT11_PIN);     // 2. pull-up i/o pin for 40us
  delayMicroseconds(1);
  DDRC &= ~_BV(DHT11_PIN);     //let analog port 0 be input port
  delayMicroseconds(40);
  dht11_in = PINC & _BV(DHT11_PIN);  // read only the input port 0
  if(dht11_in)
  {
    Serial.println(“dht11 start condition 1 not met”); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  dht11_in = PINC & _BV(DHT11_PIN); //
  if(!dht11_in)
  {
    Serial.println(“dht11 start condition 2 not met”);  //wair for second response signal:HIGH
    return;
  }
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i=”” p=””>
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
  DDRC |= _BV(DHT11_PIN);      //let analog port 0 be output port after all the data have been received
  PORTC |= _BV(DHT11_PIN);     //let the  value of this port be ‘1’ after all the data have been received
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println(“DHT11 checksum error”);
  }
  Serial.print(“Kelembaban = “);
  Serial.print(dht11_dat[0], DEC);
  Serial.print(“.”);
  Serial.print(dht11_dat[1], DEC);
  Serial.print(“%  “);
  Serial.print(“Suhu = “);
  Serial.print(dht11_dat[2], DEC);
  Serial.print(“.”);
  Serial.print(dht11_dat[3], DEC);
  Serial.println(“C  “);
  delay(2000);  //fresh time
}



 Output :
Output DHT11 Serial Monitor





Tidak ada komentar:

Posting Komentar