通過本文,可以了解到以下內(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上即可飒责。
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ù)。
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ù)字溫濕度傳感器