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温度传感器(或热敏电阻)和传感器背面的集成电路。

DHT11-DDHT22  - 工作原理

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

Humidity-Sensor-Working-Principle

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

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

Thermistor-Working-Principle

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

电路原理图


DHTxx传感器有四个引脚:VCC、GND、数据引脚和一个没有连接的、无用的引脚。需要一个从5K到10K欧姆的上拉电阻,以保持数据线高,并使传感器和Arduino板之间的通信。有一些版本的这些传感器来与内置上拉电阻的接线板,他们只有3个引脚。

DHT22-DHT11-Circuit-Schematics

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

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

源代码


首先我们需要包含在Arduino官方网站上可以找到的DHT库,然后定义我们的传感器连接到的pin号,创建一个DHT对象。在设置部分中,我们需要初始化串行通信,因为我们将使用串行监视器来打印结果。使用read22()函数,我们将从传感器读取数据,并将温度和湿度的值放入t和h变量中。如果您使用DHT11传感器,您将需要您的read11()函数。最后我们将在串行监视器上打印出温度和湿度值。

/ * 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 header.Can你可以告诉我在哪里找到它?
    提前谢谢

    回复
  3. klaatu.

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

    回复
      • klaatu.

        你能解释arduino IDE代码连接您的LCD 16×2显示通过i2c,因为现在是正常连接(i2c的库没有存在),我的另一个问题是关于如何把它的华氏度,请?

        谢谢你!

    • 汉米德

      * C至* f转换可以通过两种方式进行:通过使用DHT.ReadTemperature(True)函数,提供“isfarenheit”值“真实”。
      第二种方法是通过数学计算: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.

    嗨,德扬,

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

    回复
    • Dejan Nedelkovski.

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

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

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

    回复
  6. 杰里

    嗨Dejan,

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

    谢谢。

    回复
    • Dejan Nedelkovski.

      你好,
      你可以取时间的初始值在一个变量中,例如t1,然后比较当前时间,变量t2。是这样的:
      initorclock = rtc.gettimestr();
      initialMinutes = timeString。substring(3、5);-由于getTimeStr()函数获得字符串值,你需要从整个字符串的分钟,然后你需要将它们转换成整数。
      一旦您将最初的分钟作为整数,您将对“当前”分钟进行相同的操作,并且您将比较两个值匹配15分钟的延迟。
      if((t2> t1&t2-t1 == 15)||(t2

      回复
  7. Golam Rasul Chowdhury.

    我可以用这个传感器测量零下16度到零下25度吗?还是这段代码?

    回复
  8. man

    谢谢你的指导。我有一个问题。
    我已经将我的LCD连接到Arduino Mega的针位8。现在我正在把dht22添加到电路中,想知道我可以在哪里连接它?(你上面的教程建议我们将dht22连接到pin8)

    请帮助
    问候
    man

    回复

发表评论

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

受到推崇的

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

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

受到推崇的

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

初学者的8个最佳Arduino Starter Kits

受到推崇的

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

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