格物致知、诚意正心
使用AOSONG廉价的DHT11数字温度和湿度传感器模块,使您的下一个Arduino项目能够感知周围的世界。
该传感器已预先校准,不需要额外的组件,因此您可以立即开始测量相对湿度和温度。
在DHT11的内部,有一个湿度感应组件和一个热敏电阻。
湿度感测组件具有两个电极,两个电极之间夹有水分保持基片。
随着水蒸气被基板吸收,离子会被基板释放,从而增加了电极之间的电导率。
两个电极之间的电阻变化与相对湿度成正比。较高的相对湿度会降低电极之间的电阻,而较低的相对湿度会增加电极之间的电阻。
DHt11还包含一个NTC /热敏电阻以测量温度。热敏电阻是一种热敏电阻,其电阻会随温度急剧变化。术语“ NTC”是指“负温度系数”,这意味着电阻随着温度的升高而减小。
另一方面,有一块小的PCB,带有8位SOIC-14封装的IC。该IC测量并处理具有存储的校准系数的模拟信号,进行模数转换,并发出带有温度和湿度的数字信号。
模块的核心是AOSONG – DHT11制造的数字温度和湿度传感器。
DHT11可以在0°C至50°C的温度范围内以±2.0°C的精度进行测量,而在20%至80%的湿度下则可以以5%的精度进行测量。
请注意,DHT11的采样率为1Hz,这意味着您每秒可以从中获取新数据。
该模块带有所有必不可少的支持电路,因此应准备好运行,而无需任何额外的组件。
DHT11传感器通常需要在VCC和Out引脚之间使用10KΩ的外部上拉电阻,以实现传感器与Arduino之间的正常通信。但是,该模块具有内置的上拉电阻,因此您无需添加它。
该模块还具有一个去耦电容,用于过滤电源上的噪声。
DHT11模块很容易连接。它只有三个引脚:
+(VCC)引脚为传感器供电。尽管电源电压范围为3.3V至5.5V,但建议使用5V电源。如果使用5V电源,则可以将传感器保持长达20米的距离。但是,在3.3V电源电压下,电缆长度不得大于1米。否则,线路电压降会导致测量误差。
出去 引脚用于传感器与Arduino之间的通信。
–(GND) 应该连接到Arduino的地面。
让我们将DHT11模块连接到Arduino。
连接非常简单。首先将+(VCC)引脚连接到Arduino的5V输出,然后将–(GND)接地。最后,将Out引脚连接到数字引脚#8。
下图显示了如何接线。
DHT11传感器具有自己的单线协议来传输数据。该协议需要精确的时间安排。幸运的是,编写了DHT库以隐藏所有复杂性,以便我们可以发出简单的命令来读取温度和湿度数据。
首先,通过访问GitHub存储库下载该库。
要安装它,请打开Arduino IDE,转到“草图”>“包含库”>“添加.ZIP库”,然后选择刚刚下载的DHTlib ZIP文件。
一旦安装了库,就可以将此草图复制到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的输出。
草图首先包括DHT库并定义了传感器的Out引脚连接到的Arduino引脚号。然后,我们创建一个DHT对象以访问与该库相关的特殊功能。
#include <dht.h> #define outPin 8 dht DHT;
在“设置”功能中;我们将启动串行通信,因为我们将使用串行监视器打印结果。
void setup() { Serial.begin(9600); }
在“循环”功能中;我们将使用read11()从传感器读取数据的功能。它以传感器的数据引脚号为参数。
read11()
int readData = DHT.read11(outPin);
计算湿度和温度值后,我们可以通过以下方式访问它们:
float t = DHT.temperature; // Read temperature float h = DHT.humidity; // Read humidity
DHT对象返回以摄氏度(°C)为单位的温度值。可以使用一个简单的公式将其转换为华氏度(°F):
T (°F) = T (°C) ×9/5 + 32
Serial.print((t * 9.0) / 5.0 + 32.0);
有时,您会想到一个要在DIY孵化器中监控温度和湿度水平的想法。然后,您可能需要16×2字符的LCD来显示培养箱中的主要条件,而不是串行监视器。因此,在此示例中,我们将LCD和DHT11模块连接到Arduino。
如果您不熟悉16×2字符的LCD,请考虑阅读(至少略读)下面的教程。将16×2字符LCD模块与Arduino接口希望您的Arduino项目显示状态消息或传感器读数吗?那么这些LCD显示器可能是最合适的选择。它们非常普遍,而且…
如下图所示连接液晶显示器。
下图将在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上看到以下输出。
您的电子邮箱地址不会被公开。 必填项已用 * 标注
评论 *
显示名称 *
电子邮箱地址 *
网站
在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。