飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Arduino通过DHT11数字式温湿度传感器获取温度、湿度

Author:飘易 Source:飘易
Categories:物联网 PostTime:2019-8-28 10:15:59
正 文:

DHT11数字温湿度传感器是一款市面上使用比较多的温度和湿度传感器,本篇文章飘易就利用Arduino来获取DHT11传感器的温度和湿度。


【DHT11产品参数】

湿度测量范围:5%~95%RH(0-50℃温度补偿)

温度测量范围:-20~+60℃

湿度测量精度:±5.0%RH

温度测量精度:±2.0℃

响应时间:<5s


【DHT11产品特点】

全量程标定,单线数字输出

相对湿度和温度一体测量

全量程标定,无需重新标定即可互换使用

超快响应时间

单线制数字接口(最简单的系统集成,超低的价格)

超小尺寸(12X15.5X5.5mm)

高可靠性

优化的长期稳定性

低功耗

 

【电气特性】

VDD=5V,T =25℃,除非特殊标注

参数

条件

min

typ

max

单位

供电

DC

3.3

5

5.5

V

供电电流

 

 

测量

0.5


2.5

mA

平均

0.2


0.5

mA

待机

100


150

uA

采样周期

1




【应用领域】

暖通空调、测试及检测设备、汽车、数据记录器、消费品、自动控制、气象站、家电、湿度调节器、医疗、除湿器等。


【电路接线图】


【Arduino 编写程序】

先定义引脚,DHT11的数据引脚连接arduino的2号数字口:

#define DHPIN 2

编写函数:

// 获取温湿度
String wenshidu(void)
{
  unsigned int loopCnt;
  int chr[40] = {0};//创建数字数组,用来存放40个bit
  unsigned long time;
bgn:
  //设置2号接口模式:输出
  pinMode(DHPIN, OUTPUT);
  // 启动信号
  // 输出低电平20ms(>18ms)
  // 输出高电平40μs
  digitalWrite(DHPIN, LOW);
  delay(20);
  digitalWrite(DHPIN, HIGH);
  delayMicroseconds(40);
  digitalWrite(DHPIN, LOW);
  // 设置2号接口模式:输入
  pinMode(DHPIN, INPUT);

  // 高电平响应信号
  loopCnt = 10000;
  while (digitalRead(DHPIN) != HIGH)
  {
    if (loopCnt-- == 0)
    {
      // 如果长时间不返回高电平,重头开始
      goto bgn;
    }
  }
  // 低电平响应信号
  loopCnt = 30000;
  while (digitalRead(DHPIN) != LOW)
  {
    if (loopCnt-- == 0)
    {
      // 如果长时间不返回低电平,重头开始
      goto bgn;
    }
  }
  // 开始读取bit1-40的数值
  for (int i = 0; i < 40; i++)
  {
    while (digitalRead(DHPIN) == LOW)
    {}
    //当出现高电平时,记下时间“time”
    time = micros();
    while (digitalRead(DHPIN) == HIGH)
    {}
    //当出现低电平,记下时间,再减去刚才储存的time
    //得出的值若大于50μs,则为‘1’,否则为‘0’
    //并储存到数组里去
    if (micros() - time > 50)
    {
      chr[i] = 1;
    } else {
      chr[i] = 0;
    }
  }

  //湿度,8位的bit,转换为数值
  int humi = chr[0] * 128 + chr[1] * 64 + chr[2] * 32 + chr[3] * 16 + chr[4] * 8 + chr[5] * 4 + chr[6] * 2 + chr[7];
  int humix = chr[8] * 128 + chr[9] * 64 + chr[10] * 32 + chr[11] * 16 + chr[12] * 8 + chr[13] * 4 + chr[14] * 2 + chr[15];// 湿度小数
  String h = String() + humi + "." + humix;
  //温度,8位的bit,转换为数值
  int temp = chr[16] * 128 + chr[17] * 64 + chr[18] * 32 + chr[19] * 16 + chr[20] * 8 + chr[21] * 4 + chr[22] * 2 + chr[23];
  int tempx = chr[24] * 128 + chr[25] * 64 + chr[26] * 32 + chr[27] * 16 + chr[28] * 8 + chr[29] * 4 + chr[30] * 2 + chr[31];// 温度小数
  String t = String() + temp + "." + tempx;
  //校对码,8位的bit,转换为数值
  //int tol = chr[32] * 128 + chr[33] * 64 + chr[34] * 32 + chr[35] * 16 + chr[36] * 8 + chr[37] * 4 + chr[38] * 2 + chr[39];

  // 返回温度和湿度
  return t + "," + h;
}


好了,本文到此完结了。

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:Arduino单片机开发基础、编程语言及各开发板区别
0条评论 “Arduino通过DHT11数字式温湿度传感器获取温度、湿度”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有