這一篇要練習的就是溫濕度計DHT 11。
先介紹Sensor
DHT-11 是一個結合濕度計和測溫元件量測週遭空氣環境,並與一個高性能8位元單晶片相連接,將所量測到的溫、濕度資料拆解成為數位訊號,再由 data pin腳將資料送出。使用上很簡單,但是抓取資料時必須要特別注意時間的掌控,而且每筆資料的抓取時間間隔要1~2秒鐘,不能太快。與 DHT-22 比較,DHT-11 較不精密與準確且溫濕度量測範圍不大,雖然如此,但對於學習與熟悉溫、濕度感測卻是綽綽有餘,傳輸的距離又可長達20m以上,而且比 DHT-22 較小且便宜許多,是十分方便的簡易測試元件。
其規格如下:
1、濕度測量範圍:20~90%RH;
2、濕度測量精度:±5%RH;
3、溫度測量範圍:0~50℃
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)
接線的方法十分簡單,"+"接5V,"-"接GND,data pin接上要輸入的Pin腳。有人說因為數位訊號要接高data電位,所以把data pin外接4.7歐姆電阻至Vcc。不過我曾嘗試不接那4.7k 歐姆,試出來的效果看起來沒有太大的差別。
Code方面,先下載 library ,丟到Arduino的libraries裡面,然後再開Arduino IDE,去叫<dht.h>
通訊鮑率一般都使用9600 baud,然後把(DHT.humidity)和(DHT.temperature)用Serial.print出來。- #include <dht.h>
- #define dht_dpin 2 //定義訊號要從Pin A0 進來
- dht DHT;
- void setup(){
- Serial.begin(9600);
- delay(300); //Let system settle
- Serial.println("Humidity and temperature\n\n");
- delay(700); //Wait rest of 1000ms recommended delay before
- //accessing sensor
- }
- void loop(){
- DHT.read11(dht_dpin); //去library裡面找DHT.read11
- Serial.print("Humidity = ");
- Serial.print(DHT.humidity);
- Serial.print("% ");
- Serial.print("temperature = ");
- Serial.print(DHT.temperature);
- Serial.println("C ");
- delay(1000); //每1000ms更新一次
- }
最後可以看到的樣子就像下面這個樣子了,對照氣象局的 (溼度70%,溫度28度)
看來溼度差了一些些,不知是不是房間裡比較乾…
你好我想要請問一下
回覆刪除如果今天我想要用手機去接收所偵測到的資料,這是有辦法的嗎?
不要使用網頁的,是要直接寫APP去接收的
應該可以,不過要找一下資料才知道要怎麼做!
刪除好的謝謝您~我會持續再找找看有沒有相關資料!
刪除ㄟ我喜歡你的海灘褲
刪除我也覺得好看
刪除作者已經移除這則留言。
回覆刪除您好,請問該怎麼用Arduino IDE,去叫 Arduino IDE是要另外安裝嗎?
回覆刪除是啊,網路上有一堆arduino的資料,可以查一下,學來用。
刪除請問library資料 \arduino-1.5.8\libraries\DHT\2個檔案 是這樣子放的嗎?
回覆刪除試了幾次都讀取不到溫濕度,不知道是不是感測器有問題,請問有什麼方可以測試感測器嗎?
謝謝
要土炮的測試感測器,除了示波器之外,我還真的不知道有什麼方法,我再問問看別的高手看看。
刪除了解,謝謝您的回覆^^
刪除我喜歡你的海灘褲
刪除作者已經移除這則留言。
回覆刪除Humidity = 255.00% temperature = 255.00C
回覆刪除Humidity = 255.00% temperature = 255.00C
Humidity = 255.00% temperature = 255.00C
Humidity = 255.00% temperature = 255.00C
Humidity = 255.00% temperature = 255.00C
Humidity = 255.00% temperature = 255.00C
Humidity = 255.00% temperature = 255.00C
為何我出來的會是這種數字啊?
沒抓到訊號
刪除code裡面的 "請問 #define dht_dpin 2 //定義訊號要從Pin A0 進來 " 這個註釋有沒有出錯?
回覆刪除若是我用單顆的七段顯示器4顆(不是四合一)
回覆刪除那是要個別寫入單顆?
如何寫入?
可參考
刪除http://www.circuitstoday.com/arduino-and-7-segment-display
單顆七段顯示器有8支LED接腳 A,B,C,D,E,F,G,. 及1支共陽極或共陰極
把4顆七段顯示器的8支LED接腳 A,B,C,D,E,F,G,. 並接
即 4 支 A 接再一起 ,4 支 B 接再一起 ,4 支 C 接再一起 ,......
接起來後總共8隻腳,
4顆總共有4支共陽極或共陰極
經過這樣連接後,8+4=12隻腳,
和 (四合一) 完全一樣,
程式碼的寫法也一樣。
也可以用 (四合一) 的程式庫。
PO主的程式碼有個小小問題
回覆刪除#define dht_dpin 2
是從Pin 2進來
但註釋是寫從A0進來
要改成
#define dht_dpin A0
多謝! 我更改後就正常了!
刪除這顆溫濕度SENSOR有很多版本
回覆刪除同樣是3PIN的 腳位定義也不太一樣
要注意看順序
像是我自己的正面由左而右是S+-
所以我的資料線(接A0的)要接在S
+接5V
-接地
這樣資訊才會正確
請問我的DHT11一直沒輸出信號,只量到 data 腳都是5v 輸出,有沒有接 4.7k 電阻都是如此,
回覆刪除用示波器也看不到有任何信號輸出,請問這是故障了嗎 ?
謝謝
感應器接腳在下方來看的話,最左邊是訊號端,中間5V,右邊GND。
刪除因為我把左邊中間接相反,資料都是顯示"0"。
請問為何小數點後都是00呢?是感測器本身的問題嗎
回覆刪除請問為何小數點後都是00呢?是感測器本身的問題嗎
回覆刪除如果運用無線的方式.程式要如何更改
回覆刪除1. 先要購買有 wifi 或 藍芽 功能的 Arduino 套件
刪除2. 安裝該套件所屬的程式庫 Library
3. 參考該套件的範例或說明
請問如何把DH11 利用buzzer出聲提示? 例如 40度 發出警報...
回覆刪除這個goggle一下buzzer的用法,發揮點想像力把動作連結一下就可以啦!
刪除應該是滿基本的喔.........(路人)
想請問sensor接上,code也照版主寫好,編譯也無錯誤,但資訊卻沒run出來,有可能是哪邊出問題嗎?
回覆刪除如何把溫度 濕度 顯示在lcd??
回覆刪除我也想知道
刪除可參考這裡
刪除https://learn.adafruit.com/trinket-temperature-humidity-lcd-display?view=all
版主您好 我是剛學習 Arduino新手 想了解一下 "下載 library" 這個壓縮檔是怎麼來的?
回覆刪除(DHT.humidity)和(DHT.temperature) 這是自己定義寫出來的?還是一樣網路抓呢??謝謝
您寫的文章寫非常詳細和實用,
回覆刪除對學習Arduino新手幫助很大.....讚
謝謝
請問一下,第五行的
回覆刪除dht DHT;
這行是做了什麼動作呢
定義dht(偵測溫溼度感測器)(像int) 是DHT
刪除應該是把DHT當一種變數來用
就像我們宣告一個變數
刪除int i ; 是宣告一個名叫 i 的變數,它的 data type 為 int
dht DHT;是宣告一個名叫 DHT 的類別,它的 類別 為 dht
dht 類別就定義在 dht Library 裡面
類別的定義包括了:
類別的屬性和類別的方法
例如:本程式碼中的 DHT.read11(dht_dpin);
就是類別的方法
請問,能多點偵測嗎?也就是說多個DHT11偵測區域內的不同位置感測溫濕度
回覆刪除讀取 DHT11 需要1支類比(Analog)接腳,
刪除Arduino UNO 的板子上有 A0-A5 6支類比接腳,
所以可以偵測 6 點 , 如果要偵測更多點,
就要用更高階的電路板。
版主您好 我是剛學習 Arduino新手 想了解一下
回覆刪除這只能監控溫溼度,有辦法控制加溫跟製冷的負載嗎?
如果還想加入步進馬達可以在同一塊板子上達成嗎?
麻煩前輩幫忙回答~
感謝~
Arduino 的輸出功率很小,
刪除無法勝任加溫跟製冷的負載
如果要控制加溫跟製冷,要加裝繼電器,
由Arduino 控制繼電器 ,
再由繼電器控制 電熱線.電燈.或風扇。
請問他感測器所傳回的數值為NAN,請問該如何解決?剛開始感測器都會傳送數值過來,但是過了幾天後他就開始傳送nan了。
回覆刪除文件库已经被删了,请问是哪里的库,还有补档吗
回覆刪除