2015年7月3日 星期五

「玩具」溫溼度傳感器

先來看一下照片











































S 接A0

中間接+5V

- 接GND


接線照劃如下(小弟只買一包線,只有藍色的,不要打我)


























執行結果如下:























溼度大致上在38~39% 左右,溫度在25~27之開飄移,我們來看一下,在39元店買的

























室溫約29度,溼度也差不多接近40% ,OK啦,開了冷氣都還快30度(省一下電~誤)

最後附上官方的範例程式碼


 #define dht_dpin A0  
 byte bGlobalErr;  
 byte dht_dat[5];  
 void setup(){  
 InitDHT();  
 Serial.begin(9600);  
 delay(300);  
 Serial.println("Humidity and temperature\n\n");  
 delay(700);  
 }  
 void loop(){  
  ReadDHT();  
  switch (bGlobalErr){  
    case 0:  
  Serial.print("Current humdity = ");  
  Serial.print(dht_dat[0], DEC);  
  Serial.print(".");  
  Serial.print(dht_dat[1], DEC);  
  Serial.print("% ");  
  Serial.print("temperature = ");  
  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;  
    }  
  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(20);  
 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;  
 }  

沒有留言:

張貼留言