< >
Home » Arduino温湿度传感器 » Arduino温度湿度传感器-高精度DHT22温湿度传感器

Arduino温度湿度传感器-高精度DHT22温湿度传感器

外观

外观

简介

  • DHT22数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
  • 传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
  • 单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品连接方便,可直接插接到Arduino传感器扩展板上。
  • DHT22数字温湿度传感器精度较高,可以替代昂贵的进口SHT10温湿度传感器。在对环境温度与湿度测量要求较高的情况下使用,该产品具有极高的可靠性和出色的稳定性。
  • 与Arduino专用传感器扩展板结合使用,可以非常容易地实现与温度和与湿度感知相关的互动效果。

注意:DHT22的传感器接线是模拟--数字转换线。

产品参数

  • 供电电压:+5V
  • 温度范围:-40-80℃ 分辨率0.1℃ 误差±0.5℃
  • 湿度范围:0-100%RH 分辨率0.1%RH 误差±2%RH
  • 接口线序:VCC,GND,digital
  • 模块尺寸:38 x 20mm

连接图

请务必注意线序,VCC接电源,GND接地

连接图
新版连线图

样例代码

以下两个样例代码,均可实现检测温湿度的功能,但编程思路不同。dht库是Arduino提供的官方库,可以兼容DHT11和DHT22,样例代码1是截取DHT22部分,样例代码2是DHT22特定的库。如果仅仅是实现基本功能,可直接调用样例代码1。如想深入学习不同编程思路,样例代码2可供参考。

样例代码1
请先下载DHT库

/*******************************************************

这个程序用来测试DHT22的温湿度。

********************************************************/
#include <dht.h>

dht DHT;
#define DHT22_PIN 7

void setup()
{
  Serial.begin(115200);
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT_LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}

void loop()
{
  Serial.print("DHT22, \t");
  int chk = DHT.read22(DHT22_PIN);  //读取数据
  switch (chk)
  {
    case DHTLIB_OK:  
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
  // 显示数据
  Serial.print(DHT.humidity, 1);
  Serial.print(",\t");
  Serial.println(DHT.temperature, 1);

  delay(1000);
}

样例代码2
请先下载DHT22库 请注意!目前最新版本的arduinoIDE 1.6.0版本无法正常使用该样例,您可以使用早前的版本1.0.X

/*******************************************************

这个程序用来测试DHT22的温湿度。

********************************************************/
#include <DHT22.h>
#include <stdio.h>

// 信号线接Arduino数字口7
#define DHT22_PIN 7

DHT22 myDHT22(DHT22_PIN);

void setup(void)
{
  Serial.begin(9600);
  Serial.println("DHT22 Library Demo");
}

void loop(void)
{ 
  DHT22_ERROR_t errorCode;
  delay(2000);
  Serial.print("Requesting data...");
  errorCode = myDHT22.readData();
  switch(errorCode)
  {
    case DHT_ERROR_NONE:
      Serial.print("Got Data ");
      Serial.print(myDHT22.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22.getHumidity());
      Serial.println("%");    
      char buf[128];
      sprintf(buf, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
                   myDHT22.getTemperatureCInt()/10, abs(myDHT22.getTemperatureCInt()%10),
                   myDHT22.getHumidityInt()/10, myDHT22.getHumidityInt()%10);
      Serial.println(buf);
      break;

    case DHT_ERROR_CHECKSUM:
      Serial.print("check sum error ");
      Serial.print(myDHT22.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22.getHumidity());
      Serial.println("%");
      break;

    case DHT_BUS_HUNG:
      Serial.println("BUS Hung ");
      break;

    case DHT_ERROR_NOT_PRESENT:
      Serial.println("Not Present ");
      break;

    case DHT_ERROR_ACK_TOO_LONG:
      Serial.println("ACK time out ");
      break;

    case DHT_ERROR_SYNC_TIMEOUT:
      Serial.println("Sync Timeout ");
      break;

    case DHT_ERROR_DATA_TIMEOUT:
      Serial.println("Data Timeout ");
      break;

    case DHT_ERROR_TOOQUICK:
      Serial.println("Polled to quick ");
      break;
  }
}

本文整理于DFRobot wiki

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none