Arduino教程:使用DHT11和DHT22传感器掌握温湿度测量
在本Arduino教程中,我们将学习如何使用DHT11或DHT22传感器配合Arduino开发板测量温度和湿度。您可以观看以下视频或阅读下方的文字教程了解更多详情。 这些传感器因价格低廉且性能优异,深受电子爱好者喜爱。以下是两款传感器的主要规格与差异: DHT22是价格较高的版本,规格自然更优。其温度测量范围为-40°C至+125°C,精度±0.5°C;而DHT11温度范围为0°C至50°C,精度±2°C。在湿度测量方面,DHT22范围为0-100% RH,精度2-5%;DHT11范围为20-80% RH,精度5%。 有两项指标DHT11优于DHT22:采样率方面,DHT11为1Hz(每秒1次读数),DHT22为0.5Hz(每2秒1次读数);体积方面,DHT11体积更小。两款传感器工作电压均为3-5V,测量时最大电流2.5mA。 您可以从以下网站获取所需组件: 现在让我们看看这些传感器是如何工作的。它们由一个湿度感应元件、一个NTC温度传感器(热敏电阻)以及背面的一个IC组成。 湿度测量利用湿度感应元件,该元件包含两个电极,中间夹有吸湿基质。随着湿度变化,基质的导电性(即电极间电阻)发生变化。IC测量并处理这种电阻变化,使其可被单片机读取。 温度测量则使用NTC温度传感器或热敏电阻。热敏电阻是一种电阻随温度变化的可变电阻器,由陶瓷或聚合物等半导体材料烧结而成,以便在温度微小变化时产生较大的电阻变化。 “NTC”意为“负温度系数”,即温度升高时电阻减小。 DHTxx传感器有四个引脚:VCC、GND、数据引脚和一个未连接的空脚。数据线需要一个5K-10KΩ的上拉电阻保持高电平,以实现传感器与Arduino之间的通信。部分模块自带上拉电阻的断路板,仅有3个引脚。 DHT传感器使用单线协议传输数据,要求精确的时序。时序图可在数据手册中找到,但我们无需过多关注,因为将使用DHT库处理所有细节。 相关教程:学习如何构建基于Arduino的无线气象站 首先需要包含DHT库(可从Arduino官网获取),定义传感器连接的引脚号并创建DHT对象。在setup()中初始化串口通信以便在串口监视器打印结果。使用read22()函数读取传感器数据,将温度和湿度值存入变量t和h。若使用DHT11则调用read11()。最后在串口监视器打印温湿度值。 上传代码后,可在串口监视器查看传感器读取的温湿度结果。 我还制作了一个在LCD上显示结果的示例,源代码如下: 欢迎在下方评论区提出任何问题。概述

DHT11 / DHT22 工作原理



电路原理图

源代码
代码语言: Arduino (arduino)
/* DHT11/ DHT22传感器温湿度教程
* 作者:Dejan Nedelkovski
* www.HowToMechatronics.com
*/
/*
* DHT库可从Arduino官网获取
* https://playground.arduino.cc/Main/DHTLib
*/
#include <dht.h>
#define dataPin 8 // 定义传感器连接的引脚号
dht DHT; // 创建DHT对象
void setup() {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read22(dataPin); // 读取传感器数据
float t = DHT.temperature; // 获取温度值
float h = DHT.humidity; // 获取湿度值
// 在串口监视器打印结果
Serial.print("Temperature = ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(" Humidity = ");
Serial.print(h);
Serial.println(" % ");
delay(2000); // 延时2秒,因DHT22采样率为0.5Hz
}
代码语言: Arduino (arduino)
/* DHT11/ DHT22传感器温湿度教程
* 作者:Dejan Nedelkovski
* www.HowToMechatronics.com
*/
/*
* DHT库可从Arduino官网获取
* https://playground.arduino.cc/Main/DHTLib
*/
#include <LiquidCrystal.h> // 包含LiquidCrystal库
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // 创建LCD对象,参数:(rs, enable, d4, d5, d6, d7)
dht DHT;
void setup() {
lcd.begin(16,2); // 初始化LCD接口,指定显示尺寸(宽和高)
}
void loop() {
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // 设置光标位置
lcd.print("Temp.: "); // 打印字符串"Temp."
lcd.print(t); // 打印温度值
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(2000);
}
制造工艺
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派配合 EzTemp 实现无缝温湿度监测
- 树莓派用 MCP3008 ADC 读取模拟传感器:LDR 与 TMP36 实例
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- 基于Arduino UNO的精准频率与占空比测量
- BME280 环境数据实时显示于 Nextion 触摸屏——Visuino 图形化开发
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- Blynk + Arduino 读取 DHT11 温湿度数据教程
- DIY 智能 Arduino 机械臂:主从控制与动作记忆教程
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机