DHT11温湿度传感器

作者:hardihuang   hardihuang   
DHT11模块与Arduino接口的教程

使用AOSONG廉价的DHT11数字温度和湿度传感器模块,使您的下一个Arduino项目能够感知周围的世界。

该传感器已预先校准,不需要额外的组件,因此您可以立即开始测量相对湿度和温度。

DHT11如何测量温度和湿度 #

在DHT11的内部,有一个湿度感应组件和一个热敏电阻。

内部dht11传感器正面

湿度感测组件具有两个电极,两个电极之间夹有水分保持基片。

随着水蒸气被基板吸收,离子会被基板释放,从而增加了电极之间的电导率。

两个电极之间的电阻变化与相对湿度成正比。较高的相对湿度会降低电极之间的电阻,而较低的相对湿度会增加电极之间的电阻。

DHT11 DHT22中的湿度传感器的内部结构

DHt11还包含一个NTC /热敏电阻以测量温度。热敏电阻是一种热敏电阻,其电阻会随温度急剧变化。术语“ NTC”是指“负温度系数”,这意味着电阻随着温度的升高而减小。

NTC热敏电阻的耐温特性曲线

另一方面,有一块小的PCB,带有8位SOIC-14封装的IC。该IC测量并处理具有存储的校准系数的模拟信号,进行模数转换,并发出带有温度和湿度的数字信号。

内部dht11传感器背面

DHT11模块硬件概述 #

模块的核心是AOSONG – DHT11制造的数字温度和湿度传感器。

DHT11传感器

DHT11可以在0°C至50°C的温度范围内以±2.0°C的精度进行测量,而在20%至80%的湿度下则可以以5%的精度进行测量。

dht11模块硬件概述

请注意,DHT11的采样率为1Hz,这意味着您每秒可以从中获取新数据。

配套电路

该模块带有所有必不可少的支持电路,因此应准备好运行,而无需任何额外的组件。

dht11模块硬件概述返回

DHT11传感器通常需要在VCC和Out引脚之间使用10KΩ的外部上拉电阻,以实现传感器与Arduino之间的正常通信。但是,该模块具有内置的上拉电阻,因此您无需添加它。

该模块还具有一个去耦电容,用于过滤电源上的噪声。

DHT11模块引脚排列 #

DHT11模块很容易连接。它只有三个引脚:

dht11模块引脚

+(VCC)引脚为传感器供电。尽管电源电压范围为3.3V至5.5V,但建议使用5V电源。如果使用5V电源,则可以将传感器保持长达20米的距离。但是,在3.3V电源电压下,电缆长度不得大于1米。否则,线路电压降会导致测量误差。

出去 引脚用于传感器与Arduino之间的通信。

–(GND) 应该连接到Arduino的地面。

将DHT11模块连接到Arduino #

让我们将DHT11模块连接到Arduino。

连接非常简单。首先将+(VCC)引脚连接到Arduino的5V输出,然后将–(GND)接地。最后,将Out引脚连接到数字引脚#8。

下图显示了如何接线。

用arduino接线dht11模块

安装DHT库 #

DHT11传感器具有自己的单线协议来传输数据。该协议需要精确的时间安排。幸运的是,编写了DHT库以隐藏所有复杂性,以便我们可以发出简单的命令来读取温度和湿度数据。

首先,通过访问GitHub存储库下载该库。

要安装它,请打开Arduino IDE,转到“草图”>“包含库”>“添加.ZIP库”,然后选择刚刚下载的DHTlib ZIP文件。

Arduino代码–基本示例 #

一旦安装了库,就可以将此草图复制到Arduino IDE中。

以下测试草图将在串行监视器上打印温度和相对湿度值。尝试一下草图;然后我们将对其进行详细解释。

#include <dht.h>	// Include library
#define outPin 8	// Defines pin number to which the sensor is connected

dht DHT;			// Creates a DHT object

void setup() {
	Serial.begin(9600);
}

void loop() {
	int readData = DHT.read11(outPin);

	float t = DHT.temperature;	// Read temperature
	float h = DHT.humidity;		// Read humidity

	Serial.print("Temperature = ");
	Serial.print(t);
	Serial.print("°C | ");
	Serial.print((t*9.0)/5.0+32.0);	// Convert celsius to fahrenheit
	Serial.println("°F ");
	Serial.print("Humidity = ");
	Serial.print(h);
	Serial.println("% ");
	Serial.println("");

	delay(2000); // wait two seconds
}

草图上传后,打开“串行监视器”窗口以查看Arduino的输出。

dht11模块输出

代码说明:

草图首先包括DHT库并定义了传感器的Out引脚连接到的Arduino引脚号。然后,我们创建一个DHT对象以访问与该库相关的特殊功能。

#include <dht.h>
#define outPin 8
dht DHT;

在“设置”功能中;我们将启动串行通信,因为我们将使用串行监视器打印结果。

void setup() {
  Serial.begin(9600);
}

在“循环”功能中;我们将使用read11()从传感器读取数据的功能。它以传感器的数据引脚号为参数。

int readData = DHT.read11(outPin);

计算湿度和温度值后,我们可以通过以下方式访问它们:

float t = DHT.temperature;	// Read temperature
float h = DHT.humidity;		// Read humidity

DHT对象返回以摄氏度(°C)为单位的温度值。可以使用一个简单的公式将其转换为华氏度(°F):

(°F) = T (°C) ×9/5 + 32

Serial.print((t * 9.0) / 5.0 + 32.0);

Arduino代码–在LCD上显示结果 #

有时,您会想到一个要在DIY孵化器中监控温度和湿度水平的想法。然后,您可能需要16×2字符的LCD来显示培养箱中的主要条件,而不是串行监视器。因此,在此示例中,我们将LCD和DHT11模块连接到Arduino。

如果您不熟悉16×2字符的LCD,请考虑阅读(至少略读)下面的教程。将16×2字符LCD模块与Arduino接口希望您的Arduino项目显示状态消息或传感器读数吗?那么这些LCD显示器可能是最合适的选择。它们非常普遍,而且…

如下图所示连接液晶显示器。

用arduino和lcd接线dht11模块

下图将在16×2字符LCD上打印温度和相对湿度值。除了在LCD上打印值外,它使用相同的代码。

#include <LiquidCrystal.h>	// Include LiquidCrystal Library
#include <dht.h>

#define outPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Create an LCD object.
dht DHT;		// Create a DHT object

void setup() {
	lcd.begin(16,2); // Initialize the LCD
}

void loop() {
	int readData = DHT.read11(outPin);
	
	float t = DHT.temperature;
	float h = DHT.humidity;
	
	lcd.setCursor(0,0);
	lcd.print("Temp.: ");
	lcd.print(t);
	lcd.print((char)223);//shows degrees character
	lcd.print("C");

	lcd.setCursor(0,1);
	lcd.print("Humi.: ");
	lcd.print(h);
	lcd.print("%");
	
	delay(2000);
}

如果一切正常,您应该在LCD上看到以下输出。

液晶显示器上的dht11模块输出

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注