找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 25805|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

arduino之旅第六站_Arduino Uno + DHT11 溫濕度傳感

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51269 發(fā)表于 2014-11-10 21:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    昨天taobao上買了一批傳感器和面包板。   今天嘗試 DHT11 溫濕度傳感器,程序調(diào)通了,但是里面一些語(yǔ)法不是太懂,問了一下度娘,是些AVR-C的語(yǔ)法,看來(lái)又要補(bǔ)課了。另外,路由器上的openwrt 開發(fā)環(huán)境也是個(gè)問題。前幾天,研究了一下JAVA的Socket開發(fā),與wifi模塊的通訊調(diào)通了,但是這兩天發(fā)現(xiàn)openwrt SDK是用C作為開發(fā)語(yǔ)言,還有不少難題需要解決。


參考2樓

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:51269 發(fā)表于 2014-11-10 21:58 | 只看該作者
1、產(chǎn)品概述
  DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在即為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測(cè)型號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,信號(hào)傳輸距離可達(dá)20米以上,使其成為給類應(yīng)用甚至最為苛刻的應(yīng)用場(chǎng)合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。
2、技術(shù)參數(shù)
  供電電壓: 3.3~5.5V DC
  輸 出: 單總線數(shù)字信號(hào)
  測(cè)量范圍: 濕度20-90%RH, 溫度0~50℃
  測(cè)量精度: 濕度+-5%RH, 溫度+-2℃
  分 辨 率: 濕度1%RH, 溫度1℃
  互 換 性: 可完全互換 ,
  長(zhǎng)期穩(wěn)定性: <±1%RH/年
3、應(yīng)用領(lǐng)域
  暖通空調(diào) 測(cè)試及檢測(cè)設(shè)備
  汽車 數(shù)據(jù)記錄器
  消費(fèi)品 自動(dòng)控制
  氣象站 家電
  濕度調(diào)節(jié)器 醫(yī)療
  除濕器
4、特性
  相對(duì)濕度和溫度測(cè)量
  全部校準(zhǔn),數(shù)字輸出
  卓越的長(zhǎng)期穩(wěn)定性
  無(wú)需額外部件
  超長(zhǎng)的信號(hào)傳輸距離
  超低能耗
  4引腳安裝
    完全互換
5、常見電路說(shuō)明
建議連接線長(zhǎng)度短于20米時(shí)用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使用合適的上拉電阻
6、電源引腳描述
DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此
期間無(wú)需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去
耦濾波。
7、串行接口(單線雙向)
DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次
通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說(shuō)明,當(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校驗(yàn)和
數(shù)據(jù)傳送正確時(shí)校驗(yàn)和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)
+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。
用戶MCU發(fā)送一次開始信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主
機(jī)開始信號(hào)結(jié)束后,DHT11發(fā)送響應(yīng)信號(hào),送出40bit的數(shù)據(jù),并觸發(fā)一次信號(hào)采集,
用戶可選擇讀取部分?jǐn)?shù)據(jù).從模式下,DHT11接收到開始信號(hào)觸發(fā)一次溫濕度采集,
如果沒有接收到主機(jī)發(fā)送開始信號(hào),DHT11不會(huì)主動(dòng)進(jìn)行溫濕度采集.采集數(shù)據(jù)后
轉(zhuǎn)換到低速模式。
8、封裝信息
9、引腳描述:
10、看一下我們實(shí)驗(yàn)所用到的模塊:

連接方法:
測(cè)溫濕度模塊信號(hào)引腳放在arduino模擬0上,蜂鳴器和LED燈模塊放在arduino數(shù)字引腳7,8上,所有模塊的地和電源都直接接在arduino上的地和電源就可以了。完成了硬件部分接下來(lái)是代碼的編寫了,下面我就把調(diào)試出來(lái)的代碼寫出來(lái)給大家作參考:
#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á)到我們?cè)O(shè)置的結(jié)果時(shí),蜂鳴器和LED燈模塊會(huì)有反應(yīng)。
這是調(diào)試的結(jié)果:
實(shí)驗(yàn)遇到的各種問題總結(jié):
1、  這個(gè)傳感器資料上說(shuō)可以讀到小數(shù)位,可我怎么也讀不出來(lái)哦?
答:DHT11無(wú)小數(shù)部份,讀回?cái)?shù)據(jù)只有低8位有效,且是整數(shù),低8位的最高位表示負(fù)號(hào)。
2、  溫度和度濕的精度是否是一樣的呢?
答:溫度的精度是1%,濕度的精度達(dá)不到1%,只有正負(fù)5%。分辨率和精度是兩回事。
3、  DHT11的溫漂是怎么樣的?
答:你都不知道dh11多么漂,漂的太厲害了,個(gè)人感覺這個(gè)模塊不適宜用來(lái)做溫度濕度測(cè)量。
回復(fù)

使用道具 舉報(bào)

板凳
ID:55838 發(fā)表于 2015-3-24 22:38 | 只看該作者
不錯(cuò),很好的學(xué)習(xí)資料。
回復(fù)

使用道具 舉報(bào)

地板
ID:126202 發(fā)表于 2016-6-11 11:12 | 只看該作者
抄襲,完全是抄襲,你是在這里抄的吧:http://blog.sina.com.cn/s/blog_8a49cc8f01016i3h.html
回復(fù)

使用道具 舉報(bào)

5#
ID:128005 發(fā)表于 2016-8-27 20:58 | 只看該作者
程序編譯時(shí)能通過,但下載時(shí)卻報(bào)錯(cuò)。什么原因
回復(fù)

使用道具 舉報(bào)

6#
ID:214239 發(fā)表于 2017-6-24 13:27 | 只看該作者
調(diào)試結(jié)果那張圖中COM3是什么意思
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表