dht11 订阅
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。 展开全文
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。
信息
输 出
单总线数字信号
外文名
DHT11
测量范围
湿度20-90%RH, 温度0~50℃
测量精度
湿度+-5%RH, 温度+-2℃
互 换 性
可完全互换
中文名
温湿度传感器
长期稳定性
<±1%RH/年
分 辨 率
湿度1%RH, 温度1℃
供电电压
3.3~5.5V DC
DHT11基本信息
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。暖通空调 测试及检测设备汽车 数据记录器消费品 自动控制气象站 家电湿度调节器 医疗除湿器相对湿度和温度测量全部校准,数字输出卓越的长期稳定性无需额外部件超长的信号传输距离超低能耗4引脚安装完全互换具体示例 VCC=5V,T = 25℃,除非特殊标注
收起全文
精华内容
参与话题
问答
  • DHT11作为一款低价、入门级的温湿度传感器,常用于我们的单片机设计实例中;它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC...
    一.简介

    DHT11作为一款低价、入门级的温湿度传感器,常用于我们的单片机设计实例中;它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
    DHT11为 4 针单排引脚封装,如下图,采用单线制串行接口,只需加适当的上拉电阻,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
    在这里插入图片描述

    二.传感器参数

    1.DHT11电气参数如下:
    型号 测量范围 测湿精度 测温精度 分辨率 封装
    在这里插入图片描述
    在这里插入图片描述

    2.引脚定义
    在这里插入图片描述
    3.典型电路
    DHT11的供电电压为 3-5.5V,电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。DATA引脚并联一个5K以上的上拉电阻,增强信号的抗干扰额能力。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。
    在这里插入图片描述

    三.传感器控制时序

    1.数据格式
    DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零,操作流程如下:
    一次完整的数据传输为40bit,高位先出。
    数据格式:

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

    8位校验和:

    “8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”相加所得结果的末8位。

    2.控制时序
    要实现对DHT11传感器的控制和数据的读取,需先学会分析DHT11的控制时序。时序主要分为三部分:1:触发DHT11采集数数据;2:读取数字0;3:读取数字1;。
    (1)触发DHT11采集数据
    总线空闲状态为高电平,单片机把总线拉低等待DHT11响应,单片机把总线拉低必须大于18ms,保证DHT11能检测到起始信号。
    当DHT11接收到单片机的开始信号后,等待单片机开始信号结束,然后发送80us低电平响应信号。
    单片机发送开始信号结束后,延时等待20-40us后,切换为输入状态,等待DHT11的80us低电平信号结束,然后判断DHT11是否是否发出 80us 的高电平;如果是,即可开始采集数据。
    在这里插入图片描述
    (2)数字0信号时序
    当DHT11输出数字0时, 单片机读取到的信号为50 us的低电平,之后为26-28 us的高电平。
    在这里插入图片描述
    (3)数字1信号时序
    当DHT11输出数字0时, 单片机读取到的信号为50 us的低电平,之后为70 us的高电平。
    在这里插入图片描述
    由此可知DHT11输出数字0和数字1的区别在于高电平的时间,由此单片机可在读取到高电平后,延时30us后,识别此时总线的电平,高电平为数字1,低电平为数字0;

    (4)总时序图
    用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。
    从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。当一次完整的采集数据后,DHT11会转换到低速模式。
    在这里插入图片描述

    四.控制程序

    1.单字节采集

    void  COM(void)
    {
    	U8 i;		
    	for(i=0;i<8;i++)	   
    	{
    		U8FLAG=2;	
    		while((!P2_0)&&U8FLAG++);
    		Delay_10us();
    		Delay_10us();
    		Delay_10us();
    		U8temp=0;
    		 if(P2_0)U8temp=1;
    			U8FLAG=2;
     		while((P2_0)&&U8FLAG++);
    		//超时则跳出for循环		  
    		 if(U8FLAG==1)break;
    		//判断数据位是0还是1	 	 
    		// 如果高电平高过预定0高电平值则数据位为 1 	 
    	 	U8comdata<<=1;
    		 U8comdata|=U8temp;        //0
    	 }
    }
    

    2.完整一次数据采集

    void RH(void)
    {
    	//主机拉低18ms 
    	P2_0=0;
    	 Delay(180);
    	 P2_0=1;
     	//总线由上拉电阻拉高 主机延时20us
    	 Delay_10us();
    	 Delay_10us();
    	 Delay_10us();
    	 Delay_10us();
     	//主机设为输入 判断从机响应信号 
    	 P2_0=1;
    	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
    	 if(!P2_0)		 //T !	  
    	 {
    	 	U8FLAG=2;
     		//判断从机是否发出 80us 的低电平响应信号是否结束	 
    		 while((!P2_0)&&U8FLAG++);
    	 	U8FLAG=2;
     		//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
    	 	while((P2_0)&&U8FLAG++);
     		//数据接收状态		 
    	 	COM();
    	 	U8RH_data_H_temp=U8comdata;
    	 	COM();
    	 	U8RH_data_L_temp=U8comdata;
    		COM();
    	 	U8T_data_H_temp=U8comdata;
    	 	COM();
    	 	U8T_data_L_temp=U8comdata;
    	 	COM();
    	 	U8checkdata_temp=U8comdata;
    	 	P2_0=1;
    		 //数据校验 
    	 	U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    		if(U8temp==U8checkdata_temp)
    	 	{
    			U8RH_data_H=U8RH_data_H_temp;
    			U8RH_data_L=U8RH_data_L_temp;
    			U8T_data_H=U8T_data_H_temp;
    			U8T_data_L=U8T_data_L_temp;
    			U8checkdata=U8checkdata_temp;
    	 	}
    	 }/
    }
    

    3.获取DHT11数据

    void GetTemp1(void)
    {
    	//------------------------
    	 //调用温湿度读取子程序 
    		RH();
    	 //串口显示程序 
    	 //--------------------------
    	Send_string("Humidity:");
    		str[0]=U8RH_data_H/10+0x30;
    		str[1]=U8RH_data_H%10+0x30;
    		str[2]='.';
    		str[3]=U8RH_data_L/10+0x30;
    		str[4]=U8RH_data_L%10+0x30;
    		str[5]='\0';
    		Send_string(str);
    		Send_string("%\r\n");
    		
    		Send_string("Temperature:");
    		str[0]=U8T_data_H/10+0x30;
    		str[1]=U8T_data_H%10+0x30;
    		str[2]='.';
    		str[3]=U8T_data_L/10+0x30;
    		str[4]=U8T_data_L%10+0x30;
    		str[5]='\0';
    		Send_string(str);
    		Send_string("℃\r\n");
    }
    

    如需DHT11相关资料, 请关注公众号,首页回复“DHT11”获取资料
    在这里插入图片描述

    展开全文
  • 使用DHT11温湿度传感器检测当前环境的温湿度,并在串口输出当前检测出的温度以及湿度情况。 实验器件 arduino X 1 DHT11温湿度传感器 X 1 USB数据烧写线 X 1 母头杜邦线 X 3 实验连线 DHT11 ...

    实验内容

    使用DHT11温湿度传感器检测当前环境的温湿度,并在串口输出当前检测出的温度以及湿度情况。
    

    请先点击了解DHT11相关内容及参数

    实验器件

    • arduino X 1
    • DHT11温湿度传感器 X 1
    • USB数据烧写线 X 1
    • 杜邦线 X 3

    实验连线

    DHT11 Arduino
    VCC 5V
    GND GND
    DATA 8

    实验电路图

    在这里插入图片描述

    实验步骤

    1.根据连线表格以及实验电路图,将DHT11与Arduino开发板进行连接;
    2.将Arduino开发板与电脑通过USB烧写线进行连接
    3.使用Arduino IDE将代码验证并上传
    4.打开串口监视器,查看DHT11输出的当前环境的温度以及湿度
    

    实验代码

    #include <dht11.h>   //引用dht11库文件,使得下面可以调用相关参数
    #define dht11Pin 8   //定义温湿度针脚号为8号引脚
    dht11 dht;    //实例化一个对象
    void setup()    //初始化函数,只执行一次
    {
      Serial.begin(9600);      //设置波特率参数
      pinMode(dht11Pin, OUTPUT);    //通过定义将Arduino开发板上dht11Pin引脚(8号口)的工作模式转化为输出模式
    }
    void loop()     //loop函数,重复循环执行
    {
      int tol = dht.read(dht11Pin);    //将读取到的值赋给tol
      int temp = (float)dht.temperature; //将温度值赋值给temp
      int humi = (float)dht.humidity; //将湿度值赋给humi
      Serial.print("Temperature:");     //在串口打印出Tempeature:
      Serial.print(temp);       //在串口打印温度结果
      Serial.println("℃");    //在串口打印出℃
      Serial.print("Humidity:");     //在串口打印出Humidity:
      Serial.print(humi);     //在串口打印出湿度结果
      Serial.println("%");     //在串口打印出%
      delay(1000);      //延时1秒
    }
    
    

    实验结果

    在这里插入图片描述

    实验使用库文件

    DHT11库文件下载
    提取码:12wz
    (如若失效请联系我进行更新)

    展开全文
  • 51单片机DHT11温湿度传感器

    万次阅读 多人点赞 2015-12-23 22:31:12
    DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。一.电路连接分析1.引脚图2.接线图DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中...

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

    一.电路连接分析

    1.引脚图

    这里写图片描述

    2.接线图

    DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。单总线通常要求外接一个约 5.1kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。

    这里写图片描述

    二.数据采集分析

    1.数据总时序

    用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,幵触发一次信采集

    这里写图片描述

    2.主机发送起始信号

    单片机连接DHT11的DATA引脚的I/O口输出低电平,且低电平保持时间不能小于 18ms,然后等待 DHT11 作出应答信号。

    这里写图片描述

    3.检测从机应答信号

    DHT11 的 DATA 引脚检测到外部信号有低电平时, 等待外部信号低电平结束, 延迟后 DHT11 的 DATA引脚处于输出状态,输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据。

    这里写图片描述

    4.接收数据
    (1)数据判定规则
    位数据“0”的格式为: 50 微秒的低电平和 26-28 微秒的高电平,位数据“1”的格式为: 50 微秒的低电平加 70微秒的高电平。

    接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us,再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。

    这里写图片描述

    (2)数据格式

    一次传送 40 位数据,高位先出

    8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据+8bit 校验位。

    (3)数据校正
    判断“8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据”的结果是否等于8bit 校验位。如果等于则数据接收正确,否则应该放弃这一次的数据,重新接收。

    三.驱动程序

    #include<reg51.h>
    #include<intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit Data=P3^6;   //定义数据线
    uchar rec_dat[9];   //用于显示的接收数据数组
    
    void DHT11_delay_us(uchar n)
    {
        while(--n);
    }
    
    void DHT11_delay_ms(uint z)
    {
       uint i,j;
       for(i=z;i>0;i--)
          for(j=110;j>0;j--);
    }
    
    void DHT11_start()
    {
       Data=1;
       DHT11_delay_us(2);
       Data=0;
       DHT11_delay_ms(20);   //延时18ms以上
       Data=1;
       DHT11_delay_us(30);
    }
    
    uchar DHT11_rec_byte()      //接收一个字节
    {
       uchar i,dat=0;
      for(i=0;i<8;i++)    //从高到低依次接收8位数据
       {          
          while(!Data);   等待50us低电平过去
          DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0 
          dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
          if(Data==1)    //数据为1时,使dat加1来接收数据1
             dat+=1;
          while(Data);  //等待数据线拉低    
        }  
        return dat;
    }
    
    void DHT11_receive()      //接收40位的数据
    {
        uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise; 
        DHT11_start();
        if(Data==0)
        {
            while(Data==0);   //等待拉高     
            DHT11_delay_us(40);  //拉高后延时80us
            R_H=DHT11_rec_byte();    //接收湿度高八位  
            R_L=DHT11_rec_byte();    //接收湿度低八位  
            T_H=DHT11_rec_byte();    //接收温度高八位  
            T_L=DHT11_rec_byte();    //接收温度低八位
            revise=DHT11_rec_byte(); //接收校正位
    
            DHT11_delay_us(25);    //结束
    
            if((R_H+R_L+T_H+T_L)==revise)      //校正
            {
                RH=R_H;
                RL=R_L;
                TH=T_H;
                TL=T_L;
            } 
            /*数据处理,方便显示*/
            rec_dat[0]='0'+(RH/10);
            rec_dat[1]='0'+(RH%10);
            rec_dat[2]='R';
            rec_dat[3]='H';
            rec_dat[4]=' ';
            rec_dat[5]=' ';
            rec_dat[6]='0'+(TH/10);
            rec_dat[7]='0'+(TH%10);
            rec_dat[8]='C';
        }
    }
    
    /*这里使用lcd1602来显示采集到的数据,lcd1602驱动程序在博主的51单片机系列博文中有详细讲解*/
    void main()
    {
       uchar i;   
       lcd_init();   //lcd1602初始化
       while(1)
       {   
           DHT11_delay_ms(1500);    //DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令
           DHT11_receive();
           lcd_write_command(0x80);   //从lcd1602第一行第一个位置开始显示
           for(i=0;i<9;i++)
           lcd_write_data(rec_dat[i]);   //显示数据                      
       }
    }
    展开全文
  • DHT11传感器的驱动程序,其中还用四个数码管显示,利用51单片机的七个I/O口控制
  • 该代码是基于CC2530的采集温湿度的代码,可直接烧到板子。
  • 1.温湿度传感器简介 1.1温度、湿度的相关概念 由于温度与湿度不管是从由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,所以温湿度一体的传感器就会相应产生。 温湿度传感器是指能将温度量...

    1.温湿度传感器简介

    1.1温度、湿度的相关概念
    由于温度与湿度不管是从由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,所以温湿度一体的传感器就会相应产生。 温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。 市场上的温湿度传感器一般是测量温度量和相对湿度量。

    温度:度量物体冷热的物理量,是国际单位制中7个基本物理量之一。在生产和科学研究中,许多物理现象和化学过程都是在一定的温度下进行的,人们的生活也和他密切相关。

    湿度:湿度很久以前就与生活存在着密切的关系,但用数量来进行表示较为困难。

    日常生活中最常用的表示湿度的物理量是空气的相对湿度。用%RH表示。在物理量的导出上相对湿度与温度有着密切的关系。一定体积的密闭气体,其温度越高相对湿度越低,温度越低,其相对湿度越高。其中涉及到复杂的热力工程学知识。

    有关湿度的一些定义:

    绝对湿度:指单位容积的空气里实际所含的水汽量,一般以克为单位。温度对绝对湿度有着直接影响,一般情况下,温度越高,水蒸气发得越多,绝对湿度就越大;相反,绝对湿度就小。

    饱和湿度:在一定温度下,单位容积,空气中所能容纳的水汽量的最大限度。如果超过这个限度,多余的水蒸气就会凝结,变成水滴,此时的空气湿度变称为饱和湿度。空气的饱和湿度不是固定不变的,它随着温度的变化而变化。温度越高,单位容积空气中能容纳的水蒸气就越多,饱和湿度就越大。

    露点:指含有一定量水蒸气(绝对湿度)的空气,当温度下降到一定程度时所含的水蒸气就会达到饱和状态

    (饱和湿度)并开始液化成水,这种现象叫做凝露。水蒸气开始液化成水时的温度叫做“露点温度”简称“露点”。如果温度继续下降到露点以下,空气中超饱和的水蒸气就会在物体表面上凝结成水滴。此外,风与空气中的温湿度有密切关系,也是影响空气温湿度变化的重要因素之一。

    1.2温度、湿度的测量方法

    湿度测量技术来由已久。随着电子技术的发展,近代测量技术也有了飞速的发展。湿度测量从原理上划分二、三十种之多。对湿度的表示方法有绝对湿度、相对湿度、露点、湿气与干气的比值(重量或体积)等等。但湿度测量始终是世界计量领域中最著名的难题之一。一个看似简单的量值,深究起来,涉及相当复杂的物理—化学理论分析和计算,初涉者可能会忽略在湿度测量中必需注意的许多因素,因而影响的合理使用。    常见的湿度测量方法有:动态法(双压法、双温法、分流法),静态法(饱和盐法、硫酸法),露点法、干湿球法和形形色色的电子式传感器法。    这里双压法、双温法是基于热力学P、V、T平衡原理,平衡时间较长,分流法是基于绝对湿气和绝对干空气的精确混合。由于采用了现代测控手段,这些设备可以做得相当精密,却因设备复杂,昂贵,运作费时费工,主要作为标准计量之用,其测量精度可达±2%RH -±1.5%RH。    静态法中的饱和盐法,是湿度测量中最常见的方法,简单易行。但饱和盐法对液、气两相的平衡要求很严,对环境温度的稳定要求较高。用起来要求等很长时间去平衡,低湿点要求更长。特别在室内湿度和瓶内湿度差值较大时,每次开启都需要平衡6~8小时。    露点法是测量湿空气达到饱和时的温度,是热力学的直接结果,准确度高,测量范围宽。计量用的精密露点仪准确度可达±0.2℃甚至更高。但用现代光—电原理的冷镜式露点仪价格昂贵,常和标准湿度发生器配套使用。

    干湿球法,这是18世纪就发明的测湿方法。历史悠久,使用最普遍。干湿球法是一种间接方法,它用干湿球方程换算出湿度值,而此方程是有条件的:即在湿球附近的风速必需达到2.5m/s以上。普通用的干湿球温度计将此条件简化了,所以其准确度只有5~7%RH,明显低于电子湿度传感器。显然干湿球也不属于静态法,不要简单地认为只要提高两支温度计的测量精度就等于提高了湿度计的测量精度。    这里强调两点:第一,由于湿度是温度的函数,温度的变化决定性地影响着湿度的测量结果。无论那种方法,精确地测量和控制温度是第一位的。须知即使是一个隔热良好的恒温恒湿箱,其工作室内的温度也存在一定的梯度。所以此空间内的湿度也难以完全均匀一致。第二,由于原理和方法差异较大,各种测量方法之间难以直接校准和认定,大多只能用间接办法比对。所以在两种测湿方法之间相互校对全湿程(相对湿度0~100%RH)的测量结果,或者要在所有温度范围内校准各点的测量结果,是十分困难的事。例如通风干湿球湿度计要求有规定风速的流动空气,而饱和盐法则要求严格密封,两者无法比对。最好的办法还是按国家对湿度计量器具检定系统(标准)规定的传递方式和检定规程去逐级认定。

    2数字温湿度传感器DHT11

    2.1DHT11简介

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

    采集范围:温度0-50°±2°,湿度:20-90%RH。
    图4.5.2 DHT11产品实物图

    2.2DHT11的应用领域

    DHT11广泛应用在一下几个方面:暖通、空调、测试及检测设备、汽车数据记录器、消费品自动控制、气象站、家电、湿度调节器、医疗、除湿器
    2.3DHT11的产品特点
    在这里插入图片描述
    2.4DHT11的外形尺寸
    在这里插入图片描述
    2.5产品参数 2.5.1产品电路图
    在这里插入图片描述
    2.5.2DHT11引脚说明
    在这里插入图片描述
    2.5电气特性 VDD=5V,T = 25℃,除非特殊标注
    在这里插入图片描述
    注:采样周期间隔不得低于1秒钟。 2.6典型电路
    2.6.1典型应用1 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。示意图见图4.5.5
    在这里插入图片描述
    图4.5.5 DHT11典型应用1

    1.典型应用电路中建议连接线长度短于 20 米时用 5.1K 上拉电阻,大于 20 米时根据实际情况降低上拉电阻的阻值。 (2) 使用 3.5V 电压供电时连接线长度不得大于 20cm。否则线路压降会导致传感器供电不足,造成测量 偏差。 (3) 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取两次,但不建议连续多次 读取传感器,每次读取传感器间隔大于 5 秒即可获得准确的数据。
    在这里插入图片描述
    图4.5.6 DHT11典型应用2

    2.7串行通信说明(单线双向) 2.7.1单总线说明 DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线 完成。设备(主机或从机)通过一个漏枀开路或三态端口连至该数据线,以允许设备在不发送数据时能够 释放总线,而让其它设备使用总线;单总线通常要求外接一个约 5.1kΩ 的上拉电阻,这样,当总线闲置时, 其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须 严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。

    2.7.2单总线传送及数据位定义

    DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。

    数据格式:8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据+8bit 校验位。

    2.7.3校验位数据定义
    在这里插入图片描述
    2.8数据时序图
    在这里插入图片描述
    DHT11的总体通信流程。第一步:主机先发送开始信号,从机会返回一个相应信号进行应答。 第二步:主机信号线拉高准备接收数据。 第三部:开始接收数据(一次接收40位)。

    那么这个就是一个人数据读取的一个流程,那么我们每一个流程又应该怎么做呢?

    步骤一:DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境
    温湿度数据,幵记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的
    DATA 引脚处于输入状态,时刻检测外部信号。

    步骤二:微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,然后微处理器的 I/O
    设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作
    出回答信号,发送信号如图所示:在这里插入图片描述
    步骤三:DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA
    引脚处于输出状态,输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接
    收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 80 微秒
    的高电平后的数据接收,发送信号如图所示:在这里插入图片描述
    步骤四:由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据,位数据“0”
    的格式为: 50 微秒的低电平和 26-28 微秒的高电平,位数据“1”的格式为: 50 微秒的低电平加 70
    微秒的高电平。位数据“0”、“1”格式信号如图所示:在这里插入图片描述
    (我们可以把这一段的时序理解为,我们主机先把数据线拉低50us,然后延时等待40us,然后再去读取信号线的电平,如果为低电平,则为位“0”;如果为高电平,则为位“1”)。

    结束信号:DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 50 微秒后转为输入状态,由于上拉电阻随
    之变为高电平。但 DHT11 内部重测环境温湿度数据,幵记录数据,等待外部信号的到来。

    我们在数据手册上了解的就这么多就可以了。
    2.9接下来我们看一起DHT11的参数特性
    在这里插入图片描述
    用红框圈出来的,就是重点,我们必须知道,这个DHT11温湿度传感器的测量范围,以及精度、分辨率。如果超出了这个范围,那么DHT11就不能够使用了。
    在这里插入图片描述
    接下来看一下引脚说明。 我们要注意的是:这个器件使用的是单总线协议是总所周知的了,但是他的供电范围我们也需要了解一下,范围是3.5-5.5v。如果超出这个范围,传感器可能会烧、假如低于这个范围,可能传感器会读出错误的温湿度数据或者压根就罢工了。 因此,我们在使用那些3.3v单片机做编程的时候,就要注意这一点了。

    同时,我自己也对DHT11的时序做了一个总结

    一. 单片机上点后1s内不读取(不重要)

    二. 主机(单片机)发送起始信号:1.主机先拉高data。2.拉低data延迟18ms。
    3.拉高data(单片机引脚设置为输入)。

    三. 从机(DHT11)收到起始信号后进行应答:
    从机拉低data,主机读取到data线被拉低持续80us后从机拉高data线,
    持续80us,直到高电平结束,意味着主机可以开始接受数据。

    四. 主机开始接收数据:
    1.主机先把data线拉高(io设置为输入)。
    2.从机把data线拉低,主机读取data线电平,直到低电平结束(大约50us)
    从机拉高data线后,延迟40us左右(28~70us之间)主机再次读取data线
    电平,如果为低电平,则为“0”,如果为高电平,则为“1”。
    3.继续重复上述1,2步骤累计40次。

    五. data线拉低50us代表读取结束

    六. 校验数据

    那么我们在程序上应该如何设计呢?(这里我的程序是基于stm32微处理器来讲解的,其他单片机也一样的操作,时序都是相同的)

    准备阶段我们先要有3个函数,数据引脚初始化函数,还有数据引脚切换输入输出方向的函数。

    void dht11_init (void )
    {
      GPIO_InitTypeDef GPIO_InitStructure;
      /* Enable  clock */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  , ENABLE);
      
      /* Configure Ports */
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
     
      GPIO_SetBits(GPIOA, GPIO_Pin_7);
    }
     
    void mode_input(void )
    {
      GPIO_InitTypeDef GPIO_InitStructure;
     
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
    }
     
    void mode_output(void )
    {
      GPIO_InitTypeDef GPIO_InitStructure;
     
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
    }
    

    接下来我们就再写一个函数,来读取dht11数据即可

    unsigned int dht11_read(void)
    {
      int i;
      long long val;
      int timeout;
     
      GPIO_ResetBits(GPIOA, GPIO_Pin_7);
      delay_us(18000);  //pulldown  for 18ms
      GPIO_SetBits(GPIOA, GPIO_Pin_7);
      delay_us( 20 );	//pullup for 30us
     
      mode_input();
     
      //等待dht11拉高80us
      timeout = 5000;
      while( (! GPIO_ReadInputDataBit  (GPIOA, GPIO_Pin_7)) && (timeout > 0) ) timeout--;	 //wait HIGH
     
      //等待dht11拉低80us
      timeout = 5000;
      while( GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_7) && (timeout > 0) ) timeout-- ;	 //wait LOW
     
    #define CHECK_TIME 28
     
      for(i=0;i<40;i++)
      {
    	timeout = 5000;
    	while( (! GPIO_ReadInputDataBit  (GPIOA, GPIO_Pin_7)) && (timeout > 0) ) timeout--;	 //wait HIGH
     
    	delay_us(CHECK_TIME);
    	if ( GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_7) )
    	{
    	  val=(val<<1)+1;
    	} else {
    	  val<<=1;
    	}
     
    	timeout = 5000;
    	while( GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_7) && (timeout > 0) ) timeout-- ;	 //wait LOW
      }
     
      mode_output();
      GPIO_SetBits(GPIOA, GPIO_Pin_7);
     
      if (((val>>32)+(val>>24)+(val>>16)+(val>>8) -val ) & 0xff  ) return 0; //校验
        else return val>>8; 
     
    }
    

    只要按照上述的时序步骤来操作,就能够读取出DHT11的温湿度值啦。

    同时我们要注意,只有读出来的数据校验通过了,我们才使用这一次的温湿度数据。

    还有他读取出来40位数据的数据结构: 8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据+8位校验位

    展开全文
  • 传感器系列 温湿度传感器DHt11

    万次阅读 2017-04-09 21:16:27
    开始从温湿度这快入手,DHT11。一款湿温度一体化的数字传感器,包括一个电阻式测湿元件和一个 NTC 测温元件。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O 口。传感器内部湿度和温度数据 40Bit ...
  • DHT11温湿度传感器模块-教程资料-技小新-DHT11温湿度传感器模块产品手册.pdf
  • 基于温度湿度一体的传感器DHT11 以下是在51单片机上测试成功的代码 #include #include<intrins.h>//加上这句下面的 _nop_();就能用 bit xianshiqiehuan; // sbit dht11_dat=P1^6; //开发板用 sbit dht11_...
  • 本文给大家分享了51单片机 温湿度传感器DHT11代码。
  • 温湿度传感器DHT11

    2012-07-10 15:47:13
    DHT11是我首次接触操作时序对时间要求非常高的原件,编写程序时要相当把握好时间,刚开始一直采集不到数据,最后终于成功。此次运用的硬件完全是自己手工焊接,感觉还可以。 #include #include #define uchar ...
  • 该头文件基于DHT11温湿度传感器,在主函数里调用DHT11_Run()子函数即可。将传感器连至单片机上课正常使用,要符合个人需求还需进行适当更改。 该头文件的使用需对编程有一定了解。有关包含的其他头文件,也可在我的...
  • 网上有很多DHT11的测试,试了N个程序,总是不得要领,各种报错,最后终于找到一套可用的库。首先是DHT11.h文件,其次是DHT11.cpp文件,最后是主程序文件,三个文件保存在同一个文件夹即可。
  • dht11 和 22的硬件详解与代码示例,内含DHT11 和 DHT22 及 SHT系列的传感器的介绍与代码,供使用温湿度模块的同学学习
  • 终端获得 DHT11 传感器的数据,无线传输给协调器;协调器再通过串口发给电脑串口调试助 手显示。协调器、终端通过串口输出,LCD 也同步刷新。
  • DHT11的库,可用于Arduino。用ESP8266-NODEMCU板亲测有效。
  • 小白学数字温湿度传感器DHT11模块

    万次阅读 多人点赞 2018-03-23 14:28:02
     DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用于专用的数字模块采集技术和温湿度传感技术,有着极高的可靠性和稳定性,抗干扰,响应快等优点。采用单线制串行接口,信号传输距离...
  • DHT11是非常用的温湿度传感器。其共有4个引脚,实物图网上一大把,这里就不放了,分别是VCC供电,串行单总线,NC空脚悬空就行,最后便是GND。 2、时序图 ​​​​​​​​​​​​​​这是它从低功耗状态转换高速...
  • 4.12温湿度传感器DHT11实验 4.12.1实验目的 学习使用温湿度传感器DHT11,并在串口显示温湿度数据。 4.12.2 实验讲解 首先根据开发板硬件原理图确定温湿度传感器DHT11与CC2530芯片的连接引脚,如图4-14所示。 图...
  • 主控芯片为STM32,使用温湿度传感器DHT11来检测当前环境的温度湿度,并通过串口打印显示,亲测可用
  • 1、适用于STM32RCT6最小系统板,DHT11温湿度模块(工作电压3--5.5V) 2、具有看门狗防死机功能 3、量程20%RH--90%RH,0--50℃ 4、精度±5%RH;±2℃
  • 数字温湿度传感器DHT11

    千次阅读 2020-01-16 19:23:32
    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温...
  • 本章我们将介绍数字温湿度传感器DHT11的使用,该传感器不但能测温度,还能测湿度。本章我们将向大家介绍如何使用STM32来读取DHT11数字温湿度传感器,从而得到环境温度和湿度等信息,并把从温湿度值显示在TFTLCD模块...
  • DHT11温湿度传感器

    万次阅读 2018-07-15 15:19:45
    一、器材 arduino UNO、面包板、DHT11温湿度传感器、连接线 这里说一下DHT11的基本情况: (1)引脚说明: 1、VDD 供电 3.5V-5.5V DC 2、DATA 串行数据,单总线 3、GND 接地,电源负极。 (2)DHT11data数据...
  • dth11温湿度传感器的stm32c程序以及工程文件,解压打开文件夹,打开工程就可以使用。其中显示是用led液晶屏显示用的板子为秉火的。

空空如也

1 2 3 4 5 ... 20
收藏数 2,220
精华内容 888
关键字:

dht11