Arduino使用DHT11溫濕度傳感器獲取環(huán)境溫濕度

通過本文,可以了解到以下內(nèi)容:

  • DHT11 溫濕度傳感器接線與使用
  • DHT11 Arduino 測試程序編寫
  • DHT11 溫濕度轉(zhuǎn)換顯示

DHT11 溫濕度傳感器接線與使用

DHT11 是一款溫濕度傳感器,可以用來測試環(huán)境溫濕度厦章,該傳感器的的溫度測量范圍為 0 ~ 50°C,誤差為 2 °C撑蒜;濕度測量范圍為在 0°C時為30%-90%RH铝噩,環(huán)境溫度為 25°C時亚铁,濕度測量范圍為20%-90%RH失息,在50°C時氯质,測量范圍是20%-80%募舟。

DHT11 傳感器接線方法并不復(fù)雜,DHT11封裝有4個引腳闻察,各個引腳說明如下:

Pin 名稱 注釋
1 VDD 供電 3-5.5 VDC
2 DATA 串行數(shù)據(jù)拱礁,單總線
3 NC 空腳
4 GND 接地,電源負(fù)極

一般從網(wǎng)上買的 Arduino 傳感器套件版本的 DHT11辕漂,會有一個帶 LED 的焊好的板呢灶,上面有三個接線引腳,分別是 VCC, GND, DATA钉嘹,接線時鸯乃,只要將 VCC 接到 Arduino 5V上,GND 接到 Arduino GND 上隧期,DATA 引腳接 Arduino Pin8上即可飒责。

Arduino_KY-015_Keyes_Temperature_humidity_sensor_module_connection_diagram.png

DHT11 Arduino 測試程序編寫

DHT11 Arduino 的測試程序也很簡單赘娄,主要分幾個部分:

  • 引入 dht11 庫
  • 設(shè)置端口
  • 檢查 DHT11 是否正確連接
  • 獲取 DHT11 測量數(shù)據(jù)

程序詳細(xì)如下:

// 引入 DHT 庫文件,如果沒有宏蛉,先從網(wǎng)上下載好遣臼,在 Arduino 中導(dǎo)入
#include <dht11.h>

dht11 DHT11;

// 設(shè)置 DHT 引腳 為 Pin 8
#define DHT11PIN 8

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM");
  Serial.print("LIBRARY");
  // 輸出 DHT 庫的版本號
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}

void loop() {
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  // 測試 DHT 是否正確連接
  Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK: 
    Serial.println("OK"); 
    break;
    case DHTLIB_ERROR_CHECKSUM: 
    Serial.println("Checksum error"); 
    break;
    case DHTLIB_ERROR_TIMEOUT: 
    Serial.println("Time out error"); 
    break;
    default: 
    Serial.println("Unknown error"); 
    break;
  }

  // 獲取測量數(shù)據(jù)
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature °C): ");
  Serial.println((float)DHT11.temperature, 2);

  delay(2000);

程序編寫完成后,上傳到 Arduino拾并,重啟 Arduino 揍堰,再在 Arduino IDE 的串口監(jiān)視器中可以看到測量數(shù)據(jù)。

com_terminal.png

DHT11 溫濕度測量數(shù)據(jù)單位轉(zhuǎn)換

我們習(xí)慣常用的溫度單位是攝氏度嗅义,濕度單位是百分比屏歹。但實際生產(chǎn)中,有可能需要用到其他的單位之碗,以下是參考 arduino.cc 上提供的溫度轉(zhuǎn)換函數(shù)供參考蝙眶。

//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
    return 1.8 * celsius + 32;
}

// fast integer version with rounding
//int Celcius2Fahrenheit(int celcius)
//{
//  return (celsius * 18 + 5)/10 + 32;
//}


//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
    return celsius + 273.15;
}

// dewPoint function NOAA
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity)
{
    // (1) Saturation Vapor Pressure = ESGG(T)
    double RATIO = 373.15 / (273.15 + celsius);
    double RHS = -7.90298 * (RATIO - 1);
    RHS += 5.02808 * log10(RATIO);
    RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
    RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
    RHS += log10(1013.246);

        // factor -3 is to adjust units - Vapor Pressure SVP * humidity
    double VP = pow(10, RHS - 3) * humidity;

        // (2) DEWPOINT = F(Vapor Pressure)
    double T = log(VP/0.61078);   // temp var
    return (241.88 * T) / (17.558 - T);
}

// delta max = 0.6544 wrt dewPoint()
// 6.9 x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
    double a = 17.271;
    double b = 237.7;
    double temp = (a * celsius) / (b + celsius) + log(humidity*0.01);
    double Td = (b * temp) / (a - temp);
    return Td;
}

上面的代碼可以根據(jù)實際情況,將 DHT11 的測量數(shù)據(jù)帶入函數(shù)進(jìn)行轉(zhuǎn)換即可褪那。

小結(jié)

本文介紹了如果連接幽纷、使用 DHT11 溫濕度傳感器,并且介紹了 DHT11 的測試程序如何編寫博敬。另外友浸,有一點自己在實驗的時候遇到的一個小問題,就是我所使用的 UNO R3 Arduino 主板的 DIGITAL 引線排從小到大分別是 RX0 TX1 PIN2 ……偏窝,我開始沒有認(rèn)真看清楚收恢,以為 RX0 TX1 之后是 Pin0,我最初設(shè)置使用的引腳是 Pin 2祭往,因此我錯誤的把引線接到 Pin 3上伦意,串口監(jiān)視器一直沒有信息,我以為是傳感器壞了链沼,后來更換 Pin 口默赂,才發(fā)現(xiàn)了這個小失誤,所以希望讀者在接線的時候要注意括勺,我之前也是因為接線錯誤導(dǎo)致一個 HC05 藍(lán)牙模塊損壞缆八。

參考資料

溫濕度傳感器DHT11
A DHT11 Class for Arduino.
KY-015 TEMPERATURE AND HUMIDITY SENSOR MODULE
數(shù)字溫濕度傳感器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疾捍,隨后出現(xiàn)的幾起案子奈辰,更是在濱河造成了極大的恐慌,老刑警劉巖乱豆,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奖恰,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瑟啃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門论泛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛹屿,你說我怎么就攤上這事屁奏。” “怎么了错负?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵坟瓢,是天一觀的道長。 經(jīng)常有香客問我犹撒,道長折联,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任识颊,我火速辦了婚禮诚镰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谊囚。我一直安慰自己怕享,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布镰踏。 她就那樣靜靜地躺著,像睡著了一般沙合。 火紅的嫁衣襯著肌膚如雪奠伪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天首懈,我揣著相機(jī)與錄音绊率,去河邊找鬼。 笑死究履,一個胖子當(dāng)著我的面吹牛滤否,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播最仑,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼藐俺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泥彤?” 一聲冷哼從身側(cè)響起欲芹,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吟吝,沒想到半個月后菱父,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年浙宜,在試婚紗的時候發(fā)現(xiàn)自己被綠了官辽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粟瞬,死狀恐怖同仆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亩钟,我是刑警寧澤乓梨,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站清酥,受9級特大地震影響扶镀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜焰轻,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一臭觉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辱志,春花似錦蝠筑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至已球,卻和暖如春臣镣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背智亮。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工忆某, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阔蛉。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓弃舒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親状原。 傳聞我的和親對象是個殘疾皇子聋呢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容