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

在这个Arduino教程中,我们将学习如何使用DHT11或DHT22传感器来测量与Arduino板的温度和湿度。您可以观看以下视频或阅读下面的书面教程以获取更多详细信息。

概要


这些传感器非常受电子爱好者的欢迎,因为它们非常便宜,但仍然提供了良好的必威lol性能。以下是这两种传感器的主要规格和区别:

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。

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

必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

DHT11 / DHT22工作原理


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

DHT11-DDHT22  - 工作原理

为了测量湿度,他们使用了湿度敏感元件,该元件有两个电极,电极之间有保持水分的衬底。所以当湿度改变时,衬底的电导率改变,或者电极之间的电阻改变。这种电阻的变化由集成电路测量和处理,并准备由微控制器读取。

湿度传感器 - 工作原理

另一方面,对于测量温度,这些传感器使用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.mfxpo.com * // * *您可以找到来自Arduibet188官方网站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.mfxpo.com * // * *您可以找到来自Arduibet188官方网站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头。你能告诉我在哪儿找吗?
    谢谢预先^。^

    回复
  3. klaatu.

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

    回复
      • klaatu.

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

        谢谢

    • 哈米德

      *C到*F的转换有两种方式:使用dht.readTemperature(true)函数,提供' isFarenheit '值' true '。
      第二种方式是数学artithematics:f = c * 1.8 + 32

      回复
    • 大卫

      我有相同的问题,我正在使用DHT11和代码提供的这一页是为DHT22,是你使用DHT11它将给出“温度= 0.00 *C湿度= 0.00 %”
      要解决这个问题,你只需要改变“DHT”。双氢睾酮read22”到“。在第11行,结果是:
      " int readData = DHT.read11(dataPin);//从传感器读取数据

      回复
  4. Marius.

    嗨Dejan,

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

    回复
    • Dejan Nedelkovski.

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

      回复
  5. Chris-topher斯莱特

    喜欢你的工作。我认为“采样率”线是错误的。在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打印机为初学者和业余爱好者