標(biāo)題: arduino之旅第六站_Arduino Uno + DHT11 溫濕度傳感 [打印本頁]
作者: xiaoliu 時間: 2014-11-10 21:48
標(biāo)題: arduino之旅第六站_Arduino Uno + DHT11 溫濕度傳感
昨天taobao上買了一批傳感器和面包板。 今天嘗試 DHT11 溫濕度傳感器,程序調(diào)通了,但是里面一些語法不是太懂,問了一下度娘,是些AVR-C的語法,看來又要補(bǔ)課了。另外,路由器上的openwrt 開發(fā)環(huán)境也是個問題。前幾天,研究了一下JAVA的Socket開發(fā),與wifi模塊的通訊調(diào)通了,但是這兩天發(fā)現(xiàn)openwrt SDK是用C作為開發(fā)語言,還有不少難題需要解決。
參考2樓
作者: xiaoliu 時間: 2014-11-10 21:58
1、產(chǎn)品概述 DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價比極高等優(yōu)點。每個DHT11傳感器都在即為精確的濕度校驗室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測型號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達(dá)20米以上,使其成為給類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。
2、技術(shù)參數(shù)
供電電壓: 3.3~5.5V DC
輸 出: 單總線數(shù)字信號
測量范圍: 濕度20-90%RH, 溫度0~50℃
測量精度: 濕度+-5%RH, 溫度+-2℃
分 辨 率: 濕度1%RH, 溫度1℃
互 換 性: 可完全互換 ,
長期穩(wěn)定性: <±1%RH/年
3、應(yīng)用領(lǐng)域
暖通空調(diào) 測試及檢測設(shè)備
汽車 數(shù)據(jù)記錄器
消費品 自動控制
氣象站 家電
濕度調(diào)節(jié)器 醫(yī)療
除濕器
4、特性
相對濕度和溫度測量
全部校準(zhǔn),數(shù)字輸出
卓越的長期穩(wěn)定性
無需額外部件
超長的信號傳輸距離
超低能耗
4引腳安裝
完全互換
5、常見電路說明
建議連接線長度短于20米時用5K上拉電阻,大于20米時根據(jù)實際情況使用合適的上拉電阻
6、電源引腳描述
DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此
期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去
耦濾波。
7、串行接口(單線雙向)
DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次
通訊時間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當(dāng)前小數(shù)
部分用于以后擴(kuò)展,現(xiàn)讀出為零.操作流程如下:
一次完整的數(shù)據(jù)傳輸為40bit,高位先出。
數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)
+8bit濕度小數(shù)數(shù)據(jù)
+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和
數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)
+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。
用戶MCU發(fā)送一次開始信號后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主
機(jī)開始信號結(jié)束后,DHT11發(fā)送響應(yīng)信號,送出40bit的數(shù)據(jù),并觸發(fā)一次信號采集,
用戶可選擇讀取部分?jǐn)?shù)據(jù).從模式下,DHT11接收到開始信號觸發(fā)一次溫濕度采集,
如果沒有接收到主機(jī)發(fā)送開始信號,DHT11不會主動進(jìn)行溫濕度采集.采集數(shù)據(jù)后
轉(zhuǎn)換到低速模式。
8、封裝信息
9、引腳描述:
10、看一下我們實驗所用到的模塊:
連接方法:
測溫濕度模塊信號引腳放在arduino模擬0上,蜂鳴器和LED燈模塊放在arduino數(shù)字引腳7,8上,所有模塊的地和電源都直接接在arduino上的地和電源就可以了。完成了硬件部分接下來是代碼的編寫了,下面我就把調(diào)試出來的代碼寫出來給大家作參考:
#define DHT11_PIN 0
int Led=8;
int Buzzer=7;
byte read_dht11_dat()
{
byte i = 0;
byte result = 0;
for(i=0;i<8;i++)
{
while(!(PINC&_BV(DHT11_PIN)));
delayMicroseconds(30);
if(PINC&_BV(DHT11_PIN))
result|=(1<<(7-i));
while((PINC&_BV(DHT11_PIN)));
}
return result;
}
void setup()
{
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
pinMode(Led,OUTPUT);
pinMode(Buzzer,OUTPUT);
Serial.begin(19200);
Serial.println("Ready");
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC|=_BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in=PINC & _BV(DHT11_PIN);
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met");
return;
}
delayMicroseconds(80);
for(i=0;i<5;i++)
dht11_dat[ i]=read_dht11_dat();
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
if(dht11_dat[4]!=dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Current humdity= ");
Serial.print(dht11_dat[0],DEC);
Serial.print(".");
Serial.print(dht11_dat[1],DEC);
Serial.print("%");
Serial.print("temperature = ");
Serial.print(dht11_dat[2],DEC);
Serial.print(".");
Serial.print(dht11_dat[3],DEC);
Serial.println("C");
if(dht11_dat[0]==25)
digitalWrite(Led,HIGH);
else
digitalWrite(Led,LOW);
if(dht11_dat[0]==28)
digitalWrite(Buzzer,LOW);
else
digitalWrite(Buzzer,HIGH);
delay(2000);
}
調(diào)試結(jié)果,大家可以打開arduino的窗口,在上面可以看到窗口里顯示著溫濕度,溫度和濕度達(dá)到我們設(shè)置的結(jié)果時,蜂鳴器和LED燈模塊會有反應(yīng)。
這是調(diào)試的結(jié)果:
實驗遇到的各種問題總結(jié):
1、 這個傳感器資料上說可以讀到小數(shù)位,可我怎么也讀不出來哦?
答:DHT11無小數(shù)部份,讀回數(shù)據(jù)只有低8位有效,且是整數(shù),低8位的最高位表示負(fù)號。
2、 溫度和度濕的精度是否是一樣的呢?
答:溫度的精度是1%,濕度的精度達(dá)不到1%,只有正負(fù)5%。分辨率和精度是兩回事。
3、 DHT11的溫漂是怎么樣的?
答:你都不知道dh11多么漂,漂的太厲害了,個人感覺這個模塊不適宜用來做溫度濕度測量。
作者: 金屬蒙皮 時間: 2015-3-24 22:38
不錯,很好的學(xué)習(xí)資料。
作者: 123234565432565 時間: 2016-6-11 11:12
抄襲,完全是抄襲,你是在這里抄的吧:http://blog.sina.com.cn/s/blog_8a49cc8f01016i3h.html
作者: double51hei 時間: 2016-8-27 20:58
程序編譯時能通過,但下載時卻報錯。什么原因
作者: 一個arduino新手 時間: 2017-6-24 13:27
調(diào)試結(jié)果那張圖中COM3是什么意思
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |