成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

如何使用DHT22和Arduino测量湿度,温度,露水 点和热指数。

DHT22(或DHT​​11)的基本功能是测量湿度但在 为了准确地做到这一点也可以测量温度( 温度值自动补偿湿度值)。你可以 还可以获得DHT22的温度值 - 一个奖金的两个!


您可以进行测量是:
  • 湿度,
  • 温度,
  • 露点(来自上面的衍生),
  • 热指数(源自上文)。

这里的代码计算露点;低于哪个水的温度 饱和空气释放水作为水蒸气。

代码还计算了热指数 - 指示了什么 temperature "feels-like"由于湿度。温度可以是30°C 但湿度使它成为"feel-like" 40°C.

此页面显示了DHT22的Arduino教程,也是如此 适用于DHT11,因为它们使用相同的电子界面 - 唯一的差异 在设备之间处于设备规范中,即功能和 准确性(DHT22是更好的,因为它是更新的)。但是要么意志 测量相对湿度以获得良好的准确性。

警告 :DHT22 / 11 1线 interface is 不兼容 与达拉斯1线系统。此外 the protocol is 不是 多滴;您只能使用一个设备 microcontroller pin.

露点和热指数是可以使用该值容易地计算的值 Arduino Uno R3板与两个计算需要使用浮点数 代码。浮点例程占用了更多的内存,但方便,另一种方法是使用 固定点数学 但这需要更多的努力。

笔记: 该传感器可以使用任何 微控制器,因为所有它需要的是双向I / O引脚和一些 代码。你甚至可以使用 MCP23017 .

这些传感器是 相对湿度 sensors 内置的 温度 sensor (允许湿度读数更准确 - 见 下表以用于设备的准确性)。进一步就可以了解详细信息 of 相对湿度, 热度指数 露点 。此示例显示在下面,显示了如何在您自己的Arduino草图中使用DHT22。

DTH22拉动电阻

传感器需要一个定义数据表的拉压电阻(建议使用1K到5K)。

DHT22 / 11传感器使用串行通信接口,操作 长距离(在DHT11超过20米,DHT22的100米)。你可以买到传感器 没有突破板,但董事会方便,有一个10k上拉 电阻在板上。实际上,上拉电阻应该是5k到1k 然后距离可以进一步。更强大的(较低)的阻力将允许更多 电流,因此更长的距离。

DHT11和DHT22最大电缆长度:

  • DHT11:超过20米
  • DHT22:高达100米

主要差异是:

  • DHT22比DHT11更昂贵(但更准确)。
  • DHT22可用低于0°C。
  • DHT22从0到100%RH感测,而DHT11感测到20%至90%RH。

Humidity Accuracy

准确测量湿度,您必须了解温度为大量 程度,气体的湿度取决于温度。这两个传感器都测量温度并作为您可以的奖励 检索温度值。但请注意,它不是那么准确 DHT11;它对DHT22非常好。看看 设备规格 for details.

笔记 :湿度测量依赖于 温度在很大程度上。

相对湿度

传感器测量相对湿度,有时候 关于空气中的实际水含量的误导性(改变 温度)。锻炼. 露点 can be a better 测量由于它产生绝对数(露点温度)。这个 允许您评估空气的舒适程度,即粘性,干燥等 RH可能无法表明(见 视频 下面了解这个差异)。

DHT22 VS DHT11(差异)规格:


参数 DHT11(rht01) DHT22(rht03)
相对湿度范围 20〜90% 0〜100%
相对湿度准确度: ±5%RH ±2%RH
温度精度: ±2°C ±0.5°C
解析度 1%RH,1°C 0.1%RH,0.1°C
重复性 ±1% ±1%
长期稳定性 每年±1% 每年±0.5%
工作温度范围 0〜50°C -40〜80°C
电源: 3,3V〜5.5V. 3.3〜5.5V.
电源电流: 0.5mA〜2.5mA 1〜1.5mA
空闲电源电流: 100ua〜150ua. 40〜50ua.
最大抽样期
(最大设备更新速率)。
1秒 2s
制造商 MaxDetect科技有限公司

数据表表示它可以应对电缆长度超过20米。 少于20米,推荐使用5K上拉(大多数突破板都有这个 拉动电阻内置)。如果您使用超过一个20米的电缆运行那么 电阻未定义,您必须在实验上找到它 - 更长 电缆,电阻增加,因此您需要更多的电流来拉起 电压成功,所以您需要更小的上拉电阻。

注意:AM2302类似于RHT03,但具有较低的MAX.Cable 长度和更低的最大值。供应(5.5V)。检查您的设备是否为AM2302 by Aosong.

警告: 使用的串行协议是严格的 单主奴隶 只意思是您使用的每个DHT11 要具有专用处理器引脚,该引脚必须是双向的I.。可以 从输入到输出从输入变为输出。

DHT22 Datasheet.

DHT22也称为RHT03 - 以下数据表引用RHT03。

下载rht03数据表

注意:DHT11也称为RHT01。

什么是相对湿度和露点?

相对湿度

你可以想到相对湿度"空气的饱和程度是多么近距离". 与空气可以的量相比,空气中的水分量是空气中的水分 在那个温度下保持。视频2(下面)显示Rh完全是多么的 misleading.

露点

如果你想知道空气是什么"feels like"然后这是参数 calculate!

它是空气用水饱和的温度。以下 由于空气无法保持,露点水将饱和在固体物体上 当温度下降时,在水面上,即云形式,雨或雪 falls.

由于露点是绝对数量,它通常用于定义"how the air feels"

笔记 :露点温度定义 当空气完全饱和时。

露点表

露点(°F) 露点(°C) 描述
低于55°F   (13°C) 空气感觉干燥
 55 ~ 60°F (13°C)〜(16°C) 空气感觉舒适
 60 ~ 64°F (16°C)〜(18°C) 空气相当潮湿
 65 ~ 69°F (18°C)〜(21°C) 湿
 70 ~ 75°F (21°C)〜(24°C) 非常潮湿
超过75°F (24°C) 压抑

[sources http://www.livescience.imwcom/43269-what-is-dew-point.html, http://www.theweatherprediction.com/habyhints/190/, video 2]

视频和他们的一些笔记

vince condella:湿度与露点。

//www.youtube.com/watch?v=S8W-xl4mcJ8

RH和露点之间有什么区别?易于理解 props.

2. NWS芝加哥湿度与露点。

此视频在视觉上显示(以及一些数字)差异是什么和 显示为什么在55°F下的RH为100%,比95°F的RH更好。

迈克赫尔曼湿度:相对和绝对。

空气的水含量随温度和更热的空气变化可以含有 更多的水比空气更冷。

绝对湿度:例如。 5g / m.3

相对湿度:更常用于天气预报 - 它比较 蒸汽的量,它可以容纳的最大值(露点)。相对湿度 温度变化。


热度指数

如果你想知道温度是多少"feels like" then this is the 计算参数! DHT库还包含一个功能的函数 热指数 - 这是一种试图量化一个人的热门方式"feel", 报告为温度并使用相对湿度和空气计算 Temperature.

维基百科将其定义为:

"The 热指数(HI)或蜂窝或蜂窝织是一个结合空气的指数 温度和相对湿度试图确定 人类感知的等效温度 - 感觉多么热。结果也是 known as the "felt air temperature" or "apparent temperature". For example, 当温度为32°C(90°F),具有非常高的湿度,热指数 可以是约41°C(106°F)"
[source http://en.wikipedia.org/wiki/Heat_index]

笔记 :热指数试图量化 what Temperature "Feels like".

湿度传感器硬件和软件

arduino. 软件设置:

使用的IDE版本:Ver 1.6.4
DHT传感器库:Ver 1.3.1

arduino. DHT图书馆

使用DHT22更改下面草图中的代码(标题:Arduino草图)

//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

注释出未使用的传感器留下自己的取消关注。

图书馆安装

GitHub原始来源在这里: DHT. library 在github上,您可以在其中下载和安装库 manually.

在Arduino库管理器更改为时,上述GitHub链接在 没有显示图书馆。

更简单的方式是从Arduino IDE内安装它

  1. goto菜单素描 - > Include Library --> Manage Libraries...
  2. 在过滤器搜索类型DHT中。
  3. 单击DHT传感器库。
  4. 点击安装。

DHT11项目的零件:

注意:DHT22具有与DHT11相同的引脚(3RD引脚NC除外) DHT11现在是DHT22上的GND)。
  1. 处理器板:Arduino Uno R3。
  2. DHT11(突破板或独立)。
  3. 4k7.
  4. 面包板。
  5. 10uf电解。

注意上面使用的DHT11,与DHT22相同运行,它只是具有不同的规范。见表 这里 .

布线布局(适用于DHT22和DHT11)

DHT11 DHT22 Arduino面包板电路

传感器连接

从设备引脚的前部门留在左侧。这些是连接:

1 Vcc
2信号(双向)处理器是主设备。
3 N.C.(DHT22 = GND)。
4 GND

arduino素描

我在找到的露点代码中添加了 这里 along with the 用于显示露点的输出代码(它在某个点删除 主要代码 - 这是因为浮点需要大量空间,并且很慢 可能不需要)。这是区别:
  • 没有露点函数和显示:代码大小= 7688字节
  • 使用露点函数和显示:代码大小= 6274字节
所以只需为该函数需要1400字节!

创建一个新的草图,然后将下面的代码复制并粘贴到您自己的草图中 and upload.

注意:单击下面的框中的任何文本将复制到 clipboard.

// John Main added dewpoint code from : http://playground.arduino.cc/main/DHT11Lib
// Also added DegC output for Heat Index.
// dewPoint function NOAA
// reference (1) : http://wahiduddin.net/calc/density_algorithms.htm
// reference (2) : http://www.colorado.edu/geography/weather_station/Geog_site/about.htm
//
double dewPoint(double celsius, double humidity)
{
  // (1) Saturation Vapor Pressure = ESGG(T)
  double RATIO = 373.15 / (273.15 + celsius);
  double RHS = -7.90298 * (RATIO - 1);
  RHS += 5.02808 * log10(RATIO);
  RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1 / RATIO ))) - 1) ;
  RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
  RHS += log10(1013.246);

  // factor -3 is to adjust units - Vapor Pressure SVP * humidity
  double VP = pow(10, RHS - 3) * humidity;

  // (2) DEWPOINT = F(Vapor Pressure)
  double T = log(VP / 0.61078); // temp var
  return (241.88 * T) / (17.558 - T);
}

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2 // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor for normal 16mhz Arduino
DHT  DHT. (DHTPIN, DHTTYPE);
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold. It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value. The default for a 16mhz AVR is a value of 6. For an
// Arduino Due that runs at 84mhz a value of 30 works.
// Example to initialize DHT sensor for Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

   DHT. .begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h =  DHT. .readHumidity();
  // Read 温度为摄氏度
  float t =  DHT. .readTemperature();
  // Read 温度为华氏度
  float f =  DHT. .readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi =  DHT. .computeHeatIndex(f, h);
  float hiDegC =  DHT. .convertFtoC(hi);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hiDegC);
  Serial.print(" *C ");
  Serial.print(hi);
  Serial.print(" *F ");
  Serial.print("Dew Point (*C): ");
  Serial.println(dewPoint(t, h));
}

读取功能:

这个问题被问到很多:阅读湿度的功能是什么? 从Arduino的DHT传感器?

创建类的实例:

DHT DHT(DHTPIN,DHTTYPE);

然后初始化库(在Arduino设置功能中):

DHT. .begin();

然后使用这些功能读取湿度和温度:

Float H = dht.readhumity();

float t = dht.readtemperature(); // 读 温度为摄氏度

float f = dht.readtemperature(true); // 读 温度为华氏度

DHT图书馆注释

传感器更新

传感器速度速度慢,以改变其输出值(更新),即2S DHT22。如果您要求数据,库代码将返回以前的值 经常(见下面的代码段) - 如果使用其他库检查 this is the case. 

有趣的是,DHT11允许更快的更新率(1S)与 DHT22(2S),但这使得能够 DHT22 提供更好的相对湿度 测量(2%RH)与DHT11的(5%RH)相反。

代码:在DHT.CPP中读取(void)

boolean DHT::read(void) {
  uint8_t laststate = HIGH;   uint8_t counter = 0;   uint8_t j = 0, i;   unsigned long currenttime;
  // Check if sensor was read less than two seconds ago and return early
  // to use last reading.   currenttime = millis();   if (currenttime < _lastreadtime) {     // ie there was a rollover     _lastreadtime = 0;   }
  if (!firstreading && ((currenttime - _lastreadtime) < 2000)) {     return true; // return last correct measurement     //delay(2000 - (currenttime - _lastreadtime));   }
  firstreading = false;
/* Serial.print("Currtime: "); Serial.print(currenttime); Serial.print(" Lasttime: "); Serial.print(_lastreadtime); */   _lastreadtime = millis();

输出

这是Arduino串行监视器的输出显示:
  • 相对湿度,
  • 温度,
  • 热度指数,
  • 露点。
 arduino.  DHT11 / DHT22传感器串行数据显示

警告

此库在运行时关闭中断,并使用延迟函数 执行传感器的读写 - 这意味着所有其他操作 被暂停 - 一般这是一个坏主意,但看到一些东西很好 working.

当你开发时"real"代码可能是一个问题(取决于你的东西 正在尝试做)因为你想要实时做行动即,不是 必须等待湿度传感器"data request"在做时间之前完成 critical action.

如果您依靠中断代码来驱动其他接口,例如,阅读A. 串行接口然后串行接口的数据可能会丢失 一些点i.e.当进行传感器采集并且串行数据流时 即将到来 - 这将是传感器读取的间歇性问题 传入数据并不总是一致。

您可以找到其他中断驱动的传感器(参考) made on 这一页 )即延迟不是硬编码和功能 通过中断计时器到期时,将输入输入输入 - 而不是通过挂起 无所事事。

应用程序想法:

淋浴房 :当空气变得太饱和时开始 提取器风扇摆脱湿空气。

气象站 :相对湿度,温度和露水 point data logger.

烘干机 :在特定湿度下自动关闭 水平(不必是骨干,例如熨烫衣服,你需要更高的衣服 humidity level).

环境控制 :保存书籍/材料 确保空气没有饱和即,测量露点 - 和 当温度接近露点时自动动作 - 例如 提取器风扇和/或控制温度。

湿度控制系统 :控制水量 使用微控制器和水蒸发器的空气。超声波 vaporiser.



新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。



隐私政策 | 接触 | 关于我

网站地图 | 使用条款


 ezoic. 报告此广告

访问我们的Facebook页面:

    点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino. 模拟输出...易模拟输出生成

    arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超 极好的 ."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
Matt_tr. <at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。 "


- Anon.

回到顶部