DHT11&DHT22传感器温度和湿度教程使用Arduino

在这个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-VS-DHT22  - 规格参数

DHT11优于DHT22,有两种规格。这是DHT11的采样率为1Hz或每秒一个读数,而DHT22采样率为0.5Hz或每两秒一读,并且DHT11具有较小的体型。两个传感器的工作电压为3到5伏,而测量时使用的最大电流为2.5mA。

您可以从下面的任何网站获取这些组件:

yaboAG娱乐城披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

DHT11 / DHT22工作原理


好的,现在让我们看看这些传感器如何实际工作。它们包括湿度传感部件,NTC温度传感器(或热敏电阻)和传感器背面的IC。

DHT11-DDHT22  - 工作原理

为了测量湿度,它们使用湿度传感部件,其具有两个电极,它们之间具有水分衬底。因此,随着湿度改变,基板的电导率变化或这些电极之间的电阻变化。通过IC测量和处理电阻的这种变化,使其可以通过微控制器读取。

湿度传感器 - 工作原理

另一方面,对于测量温度,这些传感器使用NTC温度传感器或热敏电阻。

热敏电阻实际上是一种可变电阻,可改变其电阻随温度的变化。这些传感器通过烧结半导电材料,例如陶瓷或聚合物,以提供较大的电阻变化,其温度的较小变化。

热敏电阻工作原理

术语“NTC”是指“负温度系数”,这意味着电阻随温度的增加而降低。

电路原理图


DHTXX传感器具有四个引脚,VCC,GND,数据引脚和不连接的引脚,没有使用。需要从5K到10K欧姆的上拉电阻来保持数据线,以便在传感器和Arduino板之间进行通信。这些传感器有一些版本,带有内置上拉电阻的突破板,它们只有3个引脚。

DHT22-DHT11电路原理图

DHTXX传感器具有用于传输数据的单个线路协议。该协议需要精确定时,并且可以从传感器的数据表中找到用于从传感器获取数据的时序图。但是,我们不必担心这些时序图,因为我们将使用DHT图书馆这会照顾一切。

相关教程:了解如何构建基于Arduino的无线气象站

源代码


首先,我们需要在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); }

随意询问以下意见部分中的任何问题。

19回应

  1. raan.

    你好
    拜托,我需要帮助我的项目,这是使用Arduino的气体泄漏检测。
    需要项目的组件是:Arduino,气体传感器,面包板,电线,电池......我想问一些与此项目相关的问题

    回复
  2. kousik.

    oop!有些东西出了问题。上面的评论扭曲了一点。不知道为什么。:/我在这里再次发送它......
    嗨Dejan!
    首先感谢您发布如此漂亮的家人。我自己尝试过很少,工作很少。但是这个项目(DHT11和DHT22传感器温度和湿度教程)给了我一个艰难的时间。我下载了DHT.h,dht_u.h和simpledht.h这些标头文件。代码不起作用,也没有我能找到dht.h header.Can你可以告诉我在哪里找到它?
    谢谢预先^。^

    回复
  3. klaatu.

    嗨德国
    你能在I2C中做同一个项目吗?你能告诉我如何将它换成华氏度?谢谢

    回复
      • klaatu.

        你能解释通过i2c连接你的LCD 16×2显示的Arduino IDE代码,因为现在正常连接(不存在I2C的库),我的另一个问题是如何将它放在华氏度上的情况下?

        谢谢

    • 汉米德

      * C至* f转换可以通过两种方式进行:通过使用DHT.ReadTemperature(True)函数,提供“isfarenheit”值“真实”。
      第二种方式是数学artithematics:f = c * 1.8 + 32

      回复
    • 达维

      我有同样的问题,我使用的是DHT11和这个页面中提供的代码是用于DHT22的代码,是你使用的DHT11它将给出“温度= 0.00 * C湿度= 0.00%”
      要解决这个问题,您只需在第11行更改为“dht.read22”到“dht.read11”,从而导致此问题:
      “int readdata = dht.read11(Datapin);//从传感器中读取数据“

      回复
  4. Marius.

    嗨Dejan,

    当我说“我是你的粉丝”时,我不会被呼吁,我说谢谢你。
    我是arduino这些奇妙世界的第一步。我做了一些锻炼,但是当我托盘你的例子DHT11&LCD1602时,我得到了这些恼人的错误:“......没有命名为”,我不知道。你能引导我一点吗?

    回复
    • Dejan Nedelkovski.

      嗨,谢谢!
      我不太了解你得到的错误。发送给我完整的错误列表或相同的打印屏幕。而且,您是否使用与教程中相同的型号?

      回复
  5. 克里斯 - 上斯特拉特

    喜欢你的工作。我认为“采样率”线是错误的。在DHT11 22比较上。不会每2秒0.5个样品每2秒一个样品。

    回复
  6. 杰里

    嗨Dejan,

    您能否向我们展示我们如何每15分钟拍摄传感器的测量?

    谢谢。

    回复
    • Dejan Nedelkovski.

      你好呀,
      嗯,您可以将时间的初始值置于变量中,例如T1,然后比较当前时间VariaBL T2。这样的东西:
      initorclock = rtc.gettimestr();
      initialminutes = timestring.substring(3,5);- 当getTimest()函数获取字符串值,您需要只需几分钟从整个字符串中占据,然后需要将它们转换为整数。
      一旦您将最初的分钟作为整数,您将对“当前”分钟进行相同的操作,并且您将比较两个值匹配15分钟的延迟。
      if((t2> t1&t2-t1 == 15)||(t2

      回复
  7. Golam Rasul Chowdhury.

    我可以使用此传感器测量-16 degc到-25degc吗?还是这段代码?

    回复
  8. man

    你好

    谢谢你所有的教程。我确实有一个问题。
    我已将我的LCD连接到Arduino Mega的PIN位置8。现在正在向电路添加DHT22,并想知道我在哪里可以连接它吗?(上面的教程建议我们将DHT22连接到PIN8)

    请帮忙
    问候
    man

    回复

发表评论

您的电子邮件地址不会被公开。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

为初学者和爱好者最好的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

初学者的8个最佳Arduino Starter Kits

受到推崇的

用于初学者和爱好者的最佳3D打印机 -  3D打印

初学者和爱好者的最佳3D打印机