基于arduino的dht11温湿度传感器的使用

发布者:快乐旅行最新更新时间:2018-01-22 来源: 互联网关键字:DHT11  温湿度传感器 手机看文章 扫描二维码
随时随地手机看文章

    DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。


  DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。

  DHT11温湿度传感器电气特性

  温湿度传感器DHT11封装形式及接口说明

  建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻(若购买的是已集成的模块,模块上已加上拉电阻,以下请忽略),当然,如果你想要精简电路的话, STC增强型单片机自带的推挽输出功能不失为一个选择,其相当于外接了一个2k的上拉电阻,但在设计电路时需注意:整个单片机的电流推荐不超过55mA,即从MCU-VCC流入的电流不超过55mA,从MCU-GND流出的电流不超过55mA,整体流入、流出电流均不超过55mA,封装尺寸及典型应用电路图如下图所示。

  DHT11温湿度传感器典型应用电路

  DHT11温湿度传感器时序图

  DHT11温湿度传感器连接图

  如图所示,将DHT11的正极与5V电源接口相连,负极与GND相连,中间的数据接口与2号引脚相连。

  代码

  #include 《dht11.h》

  dht11 DHT11;

  #define DHT11PIN 2

  void setup(){

  Serial.begin(9600);

  }

  void loop(){

  Serial.println(“/n”);

  int chk = DHT11.read(DHT11PIN);

  Serial.print(“Read sensor: ”);

  switch (chk)

  {

  case DHTLIB_OK:

  Serial.println(“OK”);

  break;

  case DHTLIB_ERROR_CHECKSUM:

  Serial.println(“Checksum error”);

  break;

  case DHTLIB_ERROR_TIMEOUT:

  Serial.println(“TIme out error”);

  break;

  default:

  Serial.println(“Unknown error”);

  break;

  }

  Serial.print(“Humidity (%): ”);

  Serial.println((float)DHT11.humidity, 2);

  Serial.print(“Temperature (oC): ”);

  Serial.println((float)DHT11.temperature, 2);

  delay(2000);

  注意事项

  1、代码中引用了#include 《dht11.h》,这个是操作DHT11的库文件,有了它,就可以轻松操作我们这个温湿度传感器了。但是引用这个库文件的操作步骤是:

  (1)在网上找到并下载该库文件,包括一个头文件和一个.cpp文件。

  (2)在arduinoIDE中点击菜单:程序–导入库–add library,然后选择你存放库文件的那个文件夹。

  (3)在代码中引用#include 《dht11.h》,这样就可以使用了。

  2、#define DHT11PIN 2,表示定义引脚2的名字为DHT11PIN ,注意这个定义语句后面没有分号。

  原理分析

  在硬件编程过程中,当你拿到一个器件,首先要了解他的引脚定义,这会告诉你这个东西应该怎么连接,在一个就是要看他的时序图,看了时序图你就知道主从设备之间进行数据采集过程中的代码应该怎么写,比如怎么启动,如何握手,怎么采集真正的数据等等。

  在我们这个试验中,DHT11的时序图是这样的:



  DHT11温湿度传感器使用注意事项

  DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

  微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。

  操作流程如下:

  一次完整的数据传输为40bit,高位先出。

  数据格式:8bit湿度整数数据+8bit湿度小数数据

  +8bi温度整数数据+8bit温度小数数据+8bit校验和

  数据传送正确时校验和数据等于8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据所得结果的末8位。

  用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。

  从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。

  通讯过程

  总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。

  总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

  数字0信号表示方法

  数字1信号表示方法

  程序:

  //DHT11temperature

  //chriz_w@163.com

  //arduinonano

  //arduinolite

  #include“arduino_lit.h”

  #defineDHT11Pin2

  //TesttheDHT11--chriz_w@163.com

  bytedat[5];//存放湿度2byte,温度2byte,checksum1byte

  bytereadData(){//每次读取8bits(onebyte)

  bytedata;

  for(inTI=0;i《8;i++){

  if(digitalRead(DHT11Pin)==LOW)

  {

  //一开始要LOW才表示要传过来

  while(digitalRead(DHT11Pin)==LOW);//等待50us;

  //现在已经变成HIGH了

  _delay_us(30);//判断高电平持续时间,以判定资料是‘0’还是‘1’;

  if(digitalRead(DHT11Pin)==HIGH)//根据时序持续了30us以上就是1

  data|=(1《《(7-i));//高位在前,低位元在后;

  //如果这时已经是LOW,表示这bit是0,不必塞入data

  //。。而且以下的while也会立即结束(因为LOW),准备接收下一个bit

  while(digitalRead(DHT11Pin)==HIGH);//等待下一bit的接收;

  //这时一定已经变成LOW了

  }

  }

  returndata;//收完8bit=onebyte=onechar

  }

  voidstart_dht11(){//每次要与DHT11沟通

  DIGITAL_WRITE(DHT11Pin,LOW);//拉低到LOW,发表示要开始沟通的信号;

  _delay_ms(30);//延时要大于18ms,以便DHT11能检测到开始信号;这里用30ms

  DIGITAL_WRITE(DHT11Pin,HIGH);//拉高HIGH,让DHT11拉低到LOW告诉我们要传送

  _delay_us(40);//给40us等待DHT11响应;

  PIN_MODE(DHT11Pin,INPUT);//改为输入mode准备digitalRead()

  while(DIGITAL_READ(DHT11Pin)==HIGH);//必须等到LOW

  _delay_us(80);//DHT11发出响应,会拉低80us;所以至少等80us

  while(DIGITAL_READ(DHT11Pin)==LOW);//继续等到变HIGH

  _delay_us(80);//DHT11会拉高到HIGH80us后开始发送资料;

  ///以下连续读入5bytes(40bits),最后的byte是checksum校验值

  for(inTI=0;i《5;i++)

  dat[i]=readData();//接收温湿度资料,校验;

  PIN_MODE(DHT11Pin,OUTPUT);//改为Outputmode,准备拉高HIGH

  DIGITAL_WRITE(DHT11Pin,HIGH);//发送完一次资料后释放bus,等待下一次开始信号;

  }

  voidsetup(){

  SERIAL_BEGIN();

  PIN_MODE(DHT11Pin,OUTPUT);

  }

  voidloop(){

  start_dht11();//读取湿度温度和检核位到dat[];其中dat[4]是checkSum

  //根据datasheet规定,dat[4]要==(dat[0]+dat[1]+dat[2]+dat[3])%256

  //否则表示沟通有错误!!

  PRINT(“currenthumidity=”);

  println(dat[0]&0xff,10,serial_puts);

  PRINT(“currenttemperature=”);

  println(dat[2]&0xff,10,serial_puts);//显示温度的整数部分;

  _delay_ms(2000);

  }

  intmain()

  {

  setup();

  while(1)

  loop();

  }

关键字:DHT11  温湿度传感器 引用地址:基于arduino的dht11温湿度传感器的使用

上一篇:2018年内存终要大降价
下一篇:终于有人讲清楚了树莓派是什么

推荐阅读最新更新时间:2024-05-03 02:20

STM32F1驱动AM2302温湿度传感器
先来个AM2302的自我介绍: AM2302数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个AM2302传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则
[单片机]
基于PXA310平台的温湿度传感器设计与实现方法
1 引言 在工业控制和工业生产领域中,传感器对于工业控制和生产环境的监控作用不言而喻。传统的传感器监控系统大都采用单片机控制,其监控的准确度和实时性不太令人满意。本文寻找到一套切实可行的传感器设计方案,其利用温湿度传感器芯片,基于PXA310硬件平台和Linux 操作系统,能有效监控现场温湿度变化。在周围环境发生变化,不能满足工作要求时,可以获取监控数据并提出预警,提高生产和工作环境检测的可靠性及实时性。 2 温湿度传感器电路设计 比较了一些传感器应用设计方案后,选用SHT10芯片为嵌入式温湿度传感器的核心部件。它外围电路简便,相比其他传感器芯片(DS18B20)有其独到优势。 STH10 每秒可进行3 次温湿度测
[嵌入式]
零知开源分享- 温湿度模块DHT11的使用
1、说明 MCU:零知开源开发板-标准板 模块:DHT11模块 开发工具:零知开源开发工具 DHT11模块是单总线的接口,使用非常简单,供电3.3-5V,可以直接在零知实验室平台上使用。接线如下所示,把模块的OUT脚与零知标准板的A0引脚相连接即可。 2、测试 相应连线接好后,只需打开零知开源开发工具找到相应的代码,上传程序打开调试窗口即可看到调试结果。 3、核心代码 // DHT11温湿度传感器demo演示 #include dht11.h //使用DHT11 DHT sensor; void setup() { Serial.begin(9600); //使用A0
[单片机]
零知开源分享- <font color='red'>温湿度</font>模块<font color='red'>DHT11</font>的使用
温湿度传感器的原理及应用
1 产品概述 1.1 DHT90概述和主要特点     DHT90是数字温湿度传感器系列中插针型的传感器。该传感器对外提供4针单排引脚,如表1所示,插针采用铜/铍合金制作,外层镀有镍和金。     该传感器把传感元件和信号处理集成起来,输出的是全标定的数字信号。可以同时采集温度和湿度,两线制的串行接口与内部的电压调整,使外围系统变的简单。且该产品具有体积小、响应快、抗干扰能力强、性价比极高等优点。     DHT90的主要特点:     (1)测湿范围:0~100%RH;     (2)测温范围:-40~123.8℃;     (3)供电电压为2.4~5.5 V;     (4)传感器可以连接到I2C总线上;     (5)
[嵌入式]
用于车内空气净化系统中的温湿度传感器
车内空气净化系统的核心就是空气净化器,空气净化器又称“空气清洁器”、空气清新机、净化器,是指能够吸附、分解或转化各种空气污染物(一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等),有效提高空气清洁度的产品,主要应用领域家用 、商用、汽车、工业、楼宇等。 空气净化器中有多种不同的技术和介质,使它能够向用户提供清洁和安全的空气。常用的空气净化技术有:吸附技术、负(正)离子技术、催化技术、光触媒技术、超结构光矿化技术、HEPA高效过滤技术、静电集尘技术等;材料技术主要有:光触媒、活性炭、合成纤维、HEPA高效材料、负离子发生器等。现有的空气净化器多采为复合型,即同时采用了多种净化技术和材料介质。 第一步:
[汽车电子]
用于车内空气净化系统中的<font color='red'>温湿度</font><font color='red'>传感器</font>
温湿度传感器的选择与应用
由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,所以温湿度一体的传感器就会相应产生。温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。市场上的温湿度传感器一般是测量温度量和相对湿度量。  温度是度量物体冷热的物理量,是国际单位制中7个基本物理量之一。在生产和科学研究中,许多物理现象和化学过程都是在一定的温度下进行的,人们的生活也和他密切相关。 而湿度很久以前就与生活存在着密切的关系,但用数量来进行表示较为困难。对湿度的表示方法有绝对湿度、相对湿度、露点、湿气与干气的比值(重量或体积)等等。日常生活中最常用的表示湿度的物理量是空气的相对湿度,用%RH表示。在物理量的导出上相对湿度与
[嵌入式]
51单片机DHT11温湿度传感器
DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。 一.电路连接分析 1.引脚图 2.接线图 DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。单总线通常要求外接一个约 5.1kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。 二.数据采集分析 1.数据总时序 用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机
[单片机]
51单片机<font color='red'>DHT11</font><font color='red'>温湿度</font><font color='red'>传感器</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved