【玩學堂】DHT11數位溫度與濕度傳感器模塊
2017/05/31 @ 趙 志瑋接下來的DHT11數位溫度與濕度傳感器模塊教學,是用來學習如何利用數位訊號偵測溫度跟濕度的一種傳感器模塊,Arduino程式方面會跟之前溫度傳感器的程式有所不同,對DHT11數位溫度與濕度傳感器模塊有興趣的人可以試試看喔
準備Arduino板。
數據線。
公對母杜邦線。
DHT11數位溫度與濕度傳感器模塊腳位從左至右分別是接地(GND)、偵測腳位(DATA)、Arduino 5V(Vcc)。
連接完成圖。
程式碼部分如下:
———我是程式碼分隔線———
int DHpin = 8;//偵測腳位為8
byte dat [5];
byte read_data () {
byte data;
for (int i = 0; i < 8; i ++) {
if (digitalRead (DHpin) == LOW)
{
while (digitalRead (DHpin) == LOW);
delayMicroseconds (30); //確定高電平的持續時間以確定數據是“0”還是“1”,暫停30微秒
if (digitalRead (DHpin) == HIGH)
data |= (1 << (7-i));
while (digitalRead (DHpin) == HIGH); //data’1’,等待下一個接收
}
}
return data;
}
void start_test () {
digitalWrite (DHpin, LOW); //斷開,發送啟動信號
delay (30); //延遲大於18ms,使DHT11啟動信號可以被檢測到
digitalWrite (DHpin, HIGH);
delayMicroseconds (40); //等待DHT11回應
pinMode (DHpin, INPUT);
while (digitalRead (DHpin) == HIGH);
delayMicroseconds (80); // DHT11回應,80微秒
if (digitalRead (DHpin) == LOW);
delayMicroseconds (80); // DHT11 暫停80微秒之後開始發送數據
for (int i = 0; i < 4; i ++) // 接收溫度和濕度數據,不考慮奇偶校驗位
dat[i] = read_data ();
pinMode (DHpin, OUTPUT);
digitalWrite (DHpin, HIGH); //在釋放資料後在發送一次數據,等待主機打開下一個啟動信號
}
void setup () {
Serial.begin (9600);
pinMode (DHpin, OUTPUT);
}
void loop () {
start_test ();
Serial.print (“Current humdity =”);
Serial.print (dat [0], DEC); // 顯示濕度位整數;
Serial.print (‘.’);
Serial.print (dat [1], DEC); // 顯示濕度小數位;
Serial.println (‘%’);
Serial.print (“Current temperature =”);
Serial.print (dat [2], DEC); // 顯示整數位的溫度;
Serial.print (‘.’);
Serial.print (dat [3], DEC); // 顯示小數位的溫度;
Serial.println (‘C’);
delay (700);
}
———我是程式碼分隔線———
0 留言