Arduino ile DHT-11 Sensörü kullanılarak %5 hassasiyetle Nem ve ±2 Santigrat hassasiyetle Sıcaklığı ölçmek mümkün olacaktır.Örnek şekilde görüldüğü gibi ilave 10 Kohm luk dirençle DHT-11 sensör Arduino pinlerine bağlanacaktır.
Öncesinde aşağıda yazılı olan kodları uygulayalım...
//------------------------------------------------------------------DHT11 KOD-----------------------------------------------------------------------------
//writed by ercancag
#define dht_dpin 7
byte bGlobalErr;
byte dht_dat[4];
void setup()
{
InitDHT();
Serial.begin(9600);
delay(300);
Serial.println("Robotipo Nem Ve Sicaklik DHT11");
delay(700);
}
void loop()
{
ReadDHT();
switch (bGlobalErr){
case 0:
Serial.print("Simdi Nem = ");
Serial.print(dht_dat[0], DEC);
Serial.print(".");
Serial.print(dht_dat[1], DEC);
Serial.print("% ");
Serial.print("Sicaklik = ");
Serial.print(dht_dat[2], DEC);
Serial.print(".");
Serial.print(dht_dat[3], DEC);
Serial.println("C ");
break;
case 1:
Serial.println("Error 1: DHT start condition 1 not met.");
break;
case 2:
Serial.println("Error 2: DHT start condition 2 not met.");
break;
case 3:
Serial.println("Error 3: DHT checksum error.");
break;
default:
Serial.println("Error: Unrecognized code encountered.");
break;
}//end "switch"
delay(800);
}
void InitDHT(){
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
}
void ReadDHT(){
bGlobalErr=0;
byte dht_in;
byte i;
digitalWrite(dht_dpin,LOW);
delay(23);
digitalWrite(dht_dpin,HIGH);
delayMicroseconds(40);
pinMode(dht_dpin,INPUT);
delayMicroseconds(40);
dht_in=digitalRead(dht_dpin);
if(dht_in){
bGlobalErr=1;
return;
}
delayMicroseconds(80);
dht_in=digitalRead(dht_dpin);
if(!dht_in){
bGlobalErr=2;
return;
}
delayMicroseconds(80);
for (i=0; i<5; i++)
dht_dat[i] = read_dht_dat();
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
byte dht_check_sum =
dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
if(dht_dat[4]!= dht_check_sum)
{bGlobalErr=3;}
};
byte read_dht_dat(){
byte i = 0;
byte result=0;
for(i=0; i< 8; i++){
while(digitalRead(dht_dpin)==LOW);
delayMicroseconds(30);
if (digitalRead(dht_dpin)==HIGH)
result |=(1<<(7-i));
while (digitalRead(dht_dpin)==HIGH);
}
return result;
}
//------------------------------------------------------------------DHT11 KOD- SONU---------------------------------------------------------------------
Programın çalışması ile seri monitör pencersinde hemen değerler belirecektir.
Hiç yorum yok:
Yorum Gönder