在本Arduino教程中,我们将学习如何使用DHT11或DHT22传感器与Arduino板测量温度和湿度。你可以观看下面的视频或阅读下面的书面教程了解更多细节。
这些传感器对于电子机智家非常流行,因为有很便宜但仍然提供了良好的性能。必威lol以下是这两个传感器之间的主要规格和差异:
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.
必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。
DHT11 / DHT22工作原理
现在让我们看看这些传感器是如何工作的。它们包括一个湿度传感组件,一个NTC温度传感器(或热敏电阻)和传感器背面的集成电路。
为了测量湿度,它们使用湿度传感部件,其具有两个电极,它们之间具有水分衬底。因此,随着湿度改变,基板的电导率变化或这些电极之间的电阻变化。通过IC测量和处理电阻的这种变化,使其可以通过微控制器读取。
另一方面,为了测量温度,这些传感器使用NTC温度传感器或热敏电阻。
热敏电阻实际上是一种可变电阻,可改变其电阻随温度的变化。这些传感器通过烧结半导电材料,例如陶瓷或聚合物,以提供较大的电阻变化,其温度的较小变化。
术语“NTC”是指“负温度系数”,这意味着电阻随温度的增加而降低。
电路原理图
DHTxx传感器有四个引脚:VCC、GND、数据引脚和一个没有连接的、无用的引脚。需要一个从5K到10K欧姆的上拉电阻,以保持数据线高,并使传感器和Arduino板之间的通信。有一些版本的这些传感器来与内置上拉电阻的接线板,他们只有3个引脚。
DHTXX传感器具有用于传输数据的单个线路协议。该协议需要精确定时,并且可以从传感器的数据表中找到用于从传感器获取数据的时序图。但是,我们不必担心这些时序图,因为我们将使用DHT图书馆它会处理所有的事情。
源代码
首先我们需要包含在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); }
欢迎在评论区提出任何问题。
你好
拜托,我需要帮助我的项目,这是使用Arduino的气体泄漏检测。
需要项目的组件是:Arduino,气体传感器,面包板,电线,电池......我想问一些与此项目相关的问题
嗨。抱歉,但目前我没有任何教程的气体传感器(虽然我有它在我的清单上要做)。
oop!有些东西出了问题。上面的评论扭曲了一点。不知道为什么。:/我在这里再次发送它......
嗨Dejan!
首先感谢您发布如此漂亮的家人。我自己尝试过很少,工作很少。但是这个项目(DHT11和DHT22传感器温度和湿度教程)给了我一个艰难的时间。我下载了DHT.h,dht_u.h和simpledht.h这些标头文件。代码不起作用,也没有我能找到dht.h header.Can你可以告诉我在哪里找到它?
提前谢谢
嗨德国
你能在I2C中做同一个项目吗?你能告诉我如何将它换成华氏度?谢谢
你是什么意思i2c液晶或?
你能解释arduino IDE代码连接您的LCD 16×2显示通过i2c,因为现在是正常连接(i2c的库没有存在),我的另一个问题是关于如何把它的华氏度,请?
谢谢你!
* C至* f转换可以通过两种方式进行:通过使用DHT.ReadTemperature(True)函数,提供“isfarenheit”值“真实”。
第二种方法是通过数学计算: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);//从传感器中读取数据“
嗨,德扬,
当我说“我是你的粉丝”时,我不会被呼吁,我说谢谢你。
我是arduino这些奇妙世界的第一步。我做了一些锻炼,但是当我托盘你的例子DHT11&LCD1602时,我得到了这些恼人的错误:“......没有命名为”,我不知道。你能引导我一点吗?
嗨,谢谢!
我不太了解你得到的错误。发送给我完整的错误列表或相同的打印屏幕。而且,您是否使用与教程中相同的型号?
喜欢你的工作。我认为“采样率”线是错误的。在DHT11 22比较上。不会每2秒0.5个样品每2秒一个样品。
谢谢!这条线很好。1 Hz是1个样品一秒钟,2 Hz是2个样品,所以每两分钟0.5 Hz是0.5个样品,每两分钟样品。
嗨Dejan,
您能否向我们展示我们如何每15分钟拍摄传感器的测量?
谢谢。
你好,
你可以取时间的初始值在一个变量中,例如t1,然后比较当前时间,变量t2。是这样的:
initorclock = rtc.gettimestr();
initialMinutes = timeString。substring(3、5);-由于getTimeStr()函数获得字符串值,你需要从整个字符串的分钟,然后你需要将它们转换成整数。
一旦您将最初的分钟作为整数,您将对“当前”分钟进行相同的操作,并且您将比较两个值匹配15分钟的延迟。
if((t2> t1&t2-t1 == 15)||(t2
我可以用这个传感器测量零下16度到零下25度吗?还是这段代码?
是的,使用DH22传感器,它可以测量高达-40 DEGC,而DH11不能这样做,不能测量0 DEGC。
嗨
谢谢你的指导。我有一个问题。
我已经将我的LCD连接到Arduino Mega的针位8。现在我正在把dht22添加到电路中,想知道我可以在哪里连接它?(你上面的教程建议我们将dht22连接到pin8)
请帮助
问候
man
嘿,您可以将DHT22连接到任何数字引脚。