在这个Arduino教程中,我们将学习如何使用DHT11或DHT22传感器来测量与Arduino板的温度和湿度。您可以观看以下视频或阅读下面的书面教程以获取更多详细信息。
这些传感器对于电子机智家非常流行,因为有很便宜但仍然提供了良好的性能。yabo7. com以下是这两个传感器之间的主要规格和差异:
DHT22是更昂贵的版本,显然具有更好的规格。其温度测量范围为-40至+125摄氏度,精度+ -0.5度,而DHT11温度范围为0至50摄氏度,精度为+ -2度。此外,DHT22传感器还具有更好的湿度测量范围,从0到100%,精度为2-5%,而DHT11湿度范围为20%至80%,精度为5%。
DHT11优于DHT22,有两种规格。这是DHT11的采样率为1Hz或每秒一个读数,而DHT22采样率为0.5Hz或每两秒一读,并且DHT11具有较小的体型。两个传感器的工作电压为3到5伏,而测量时使用的最大电流为2.5mA。
您可以从下面的任何网站获取这些组件:
- DHT11传感器.................................亚马逊/伯格多德/aliexpress.
- DHT22传感器.................................。亚马逊/伯格多德/aliexpress.
- Arduino Board .................................亚马逊/伯格多德/aliexpress.
- 面包板和跳线.........亚马逊/伯格多德/aliexpress.
yaboAG娱乐城披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。
DHT11 / DHT22工作原理
好的,现在让我们看看这些传感器如何实际工作。它们包括湿度传感部件,NTC温度传感器(或热敏电阻)和传感器背面的IC。
为了测量湿度,它们使用湿度传感部件,其具有两个电极,它们之间具有水分衬底。因此,随着湿度改变,基板的电导率变化或这些电极之间的电阻变化。通过IC测量和处理电阻的这种变化,使其可以通过微控制器读取。
另一方面,对于测量温度,这些传感器使用NTC温度传感器或热敏电阻。
热敏电阻实际上是一种可变电阻,可改变其电阻随温度的变化。这些传感器通过烧结半导电材料,例如陶瓷或聚合物,以提供较大的电阻变化,其温度的较小变化。
术语“NTC”是指“负温度系数”,这意味着电阻随温度的增加而降低。
电路原理图
DHTXX传感器具有四个引脚,VCC,GND,数据引脚和不连接的引脚,没有使用。需要从5K到10K欧姆的上拉电阻来保持数据线,以便在传感器和Arduino板之间进行通信。这些传感器有一些版本,带有内置上拉电阻的突破板,它们只有3个引脚。
DHTXX传感器具有用于传输数据的单个线路协议。该协议需要精确定时,并且可以从传感器的数据表中找到用于从传感器获取数据的时序图。但是,我们不必担心这些时序图,因为我们将使用DHT图书馆这会照顾一切。
源代码
首先,我们需要在Arduino官方网站中包含DHT库,然后定义我们的传感器连接并创建DHT对象的引脚编号。在设置部分中,我们需要启动串行通信,因为我们将使用串行监视器打印结果。使用READ22()功能,我们将从传感器读取数据并将温度和湿度的值放入T和H变量中。如果您使用DHT11传感器,您需要读取11()函数。最后,我们将在串行监视器上打印温度和湿度值。
/ * DHT11 / DHT22传感器温度和湿度教程*由Dejan Nedelkovski制作的程序,* www.www.kuaixg.com * // * *您可以找到来自Ardui亚搏手机版官方下载no官方网站* https://playground.arduino.cc.ccin.cc/main的DHT库/ dhtlib * / #include#define datapin 8 //定义传感器连接的引脚数dht dht;//创建一个DHT对象void setup(){serial.begin(9600);void循环(){int readdata = dht.read22(Datapin);//从传感器float t = dht.temperature读取数据;//获取温度浮点H = dht.humity的值;//获取湿度//打印串行监视器序列号的结果.Print(“温度=”);serial.print(t);serial.print(“* c”);serial.print(“湿度=”);serial.print(h); Serial.println(" % "); delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz }
在我们将此代码上传到Arduino板后,可以在串行监视器上看到来自传感器的温度和湿度。
我还完成了一个例子,我在其中显示结果液晶。以下是该示例的源代码:
/ * DHT11 / DHT22传感器温度和湿度教程*由Dejan Nedelkovski制作的程序,* www.www.kuaixg.com * // * *您可以找到来自Ardui亚搏手机版官方下载no官方网站* https://playground.arduino.cc.ccin.cc/main的DHT库/ dhtlib * / #include//包括液晶库#include #define datapin 8液晶LCD(1,2,4,5,6,7);//创建LCD对象。参数:( RS,ENABLE,D4,D5,D6,D7)DHT DHT;void setup(){lcd.begin(16,2);//初始化接口到LCD屏幕,并指定显示} void循环(){int Readdata = dht.read22(Datapin)的尺寸(宽度和高度);float t = dht.temperature;float h = dht.humity;lcd.setCursor(0,0);//设置写入LCD的后续文本的位置将显示LCD.print(“Temp:”);//打印字符串“temp”。 on the LCD lcd.print(t); // Prints the temperature value from the sensor lcd.print(" C"); lcd.setCursor(0,1); lcd.print("Humi.: "); lcd.print(h); lcd.print(" %"); delay(2000); }
随意询问以下意见部分中的任何问题。
你好
拜托,我需要帮助我的项目,这是使用Arduino的气体泄漏检测。
需要项目的组件是:Arduino,气体传感器,面包板,电线,电池......我想问一些与此项目相关的问题
你好呀。抱歉,但目前我没有气体传感器教程(虽然我在我的列表上完成了它)。
oop!有些东西出了问题。上面的评论扭曲了一点。不知道为什么。:/我在这里再次发送它......
嗨Dejan!
首先感谢您发布如此漂亮的家人。我自己尝试过很少,工作很少。但是这个项目(DHT11和DHT22传感器温度和湿度教程)给了我一个艰难的时间。我下载了DHT.h,dht_u.h和simpledht.h这些标头文件。代码不起作用,也没有我能找到dht.h header.Can你可以告诉我在哪里找到它?
谢谢预先^。^
嗨德国
你能在I2C中做同一个项目吗?你能告诉我如何将它换成华氏度?谢谢
你是什么意思i2c液晶或?
你能解释通过i2c连接你的LCD 16×2显示的Arduino IDE代码,因为现在正常连接(不存在I2C的库),我的另一个问题是如何将它放在华氏度上的情况下?
谢谢
* C至* f转换可以通过两种方式进行:通过使用DHT.ReadTemperature(True)函数,提供“isfarenheit”值“真实”。
第二种方式是数学artithematics:f = c * 1.8 + 32
我的传感器给出:“温度= 0.00 * C湿度= 0.00%”
我有同样的问题,我使用的是DHT11和这个页面中提供的代码是用于DHT22的代码,是你使用的DHT11它将给出“温度= 0.00 * C湿度= 0.00%”
要解决这个问题,您只需在第11行更改为“dht.read22”到“dht.read11”,从而导致此问题:
“int readdata = dht.read11(Datapin);//从传感器中读取数据“
嗨Dejan,
当我说“我是你的粉丝”时,我不会被呼吁,我说谢谢你。
我是arduino这些奇妙世界的第一步。我做了一些锻炼,但是当我托盘你的例子DHT11&LCD1602时,我得到了这些恼人的错误:“......没有命名为”,我不知道。你能引导我一点吗?
嗨,谢谢!
我不太了解你得到的错误。发送给我完整的错误列表或相同的打印屏幕。而且,您是否使用与教程中相同的型号?
喜欢你的工作。我认为“采样率”线是错误的。在DHT11 22比较上。不会每2秒0.5个样品每2秒一个样品。
谢谢!这条线很好。1 Hz是1个样品一秒钟,2 Hz是2个样品,所以每两分钟0.5 Hz是0.5个样品,每两分钟样品。
嗨Dejan,
您能否向我们展示我们如何每15分钟拍摄传感器的测量?
谢谢。
你好呀,
嗯,您可以将时间的初始值置于变量中,例如T1,然后比较当前时间VariaBL T2。这样的东西:
initorclock = rtc.gettimestr();
initialminutes = timestring.substring(3,5);- 当getTimest()函数获取字符串值,您需要只需几分钟从整个字符串中占据,然后需要将它们转换为整数。
一旦您将最初的分钟作为整数,您将对“当前”分钟进行相同的操作,并且您将比较两个值匹配15分钟的延迟。
if((t2> t1&t2-t1 == 15)||(t2
我可以使用此传感器测量-16 degc到-25degc吗?还是这段代码?
是的,使用DH22传感器,它可以测量高达-40 DEGC,而DH11不能这样做,不能测量0 DEGC。
你好
谢谢你所有的教程。我确实有一个问题。
我已将我的LCD连接到Arduino Mega的PIN位置8。现在正在向电路添加DHT22,并想知道我在哪里可以连接它吗?(上面的教程建议我们将DHT22连接到PIN8)
请帮忙
问候
man
嘿,您可以将DHT22连接到任何数字引脚。