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 :
Tidak ada komentar:
Posting Komentar