当前位置:首页 >> 信息与通信 >>

DHT11温湿度传感器


基于单片机的DHT11温湿度 传感器设计

姓名:史延林 指导老师:黄智伟 学院:电气工程学院 学号:20094470321
摘要:
温湿度是生活生产中的重要的参数。本设计为基于单片机的温湿度检测与控制 系统, 采用模块化、 层次化设计。 用新型的智能温湿度传感器DHT11主要实现对温度、 湿度的检测,将温度湿度信号通过传感器进行信号的采集

并转换成数字信号,再运 用单片机STC89C52进行数据的分析和处理,为显示和报警电路提供信号,实现对温

湿度的控制报警。报警系统根据设定报警的上下限值实现报警功能,显示部分采用 LCD1602液晶显示所测温湿度值。系统电路简单、集成度高、工作稳定、调试方便、 检测精度高,具有一定的实用价值。

关键词:单片机;DHT11温湿度传感器; LCD1602显示
第一章:课程构思

1.1课题背景
温湿度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生 产和生活中的更加广泛的应用。在生产中,温湿度的高低对产品的质量影响很大。 由于温湿度的检测控制不当,可能使我们导致无法估计的经济损失。为保证日常工 作的顺利进行,首要问题是加强生产车间内温度与湿度的监测工作,但传统的方法 过于粗糙,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和 降温等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大, 随机性大。目前,在低温条件下(通常指100℃以下),温湿度的测量已经相对成熟。 利用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。但人 们对它的要求越来越高,要为现代人工作、科研、学习、生活提供更好的更方便的 设施就需要从数字单片机技术入手,一切向着数字化,智能化控制方向发展。 对于国内外对温湿度检测的研究,从复杂模拟量检测到现在的数字智能化检测 越发的成熟,随着科技的进步,现在的对于温湿度研究,检测系统向着智能化、小 型化、低功耗的方向发展。在发展过程中,以单片机为核心的温湿度控制系统发展 为体积小、操作简单、量程宽、性能稳定、测量精度高,等诸多优点在生产生活的 各个方面实现着至关重要的作用。 温湿度传感器除电阻式、电容式湿敏元件之外,还有电解质离子型湿敏元件、 重量型湿敏元件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声 表面波湿敏元件等。湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元 件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。1.2

主要内容

本文设计的是基于单片机STC89C52的温湿度检测和控制系统,主要以广泛应用 的DHT11作为温度和湿度的检测,该仪器具有测量精度较高、硬件电路简单、并能很 好的进行显示,可测试不同环境温湿度的特点。另外和控制电路相连,可以进行加 湿电路和除湿电路的控制,使温度和湿度参数在预先设定的范围内,不需要人的直 接参与。 单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。因此单 片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。本设计中,最 终选用的集成温度传感器DHT11, 采集到的温湿度信号送至单片机, 实现温湿度的显 示与控制。 系统主要由以上元器件组成,通过硬件电路和软件程序的设计,实现系统的基 本功能

1.3系统总体方案设计
用新型的智能集成温温度传感器DHT11主要实现检测温度、 湿度的检测, 将温度 湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进 行数据的分析和处理,并在LCD1602上显示当前温湿度。

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

DHT11传感器实物图

2、引脚说明
引脚号 1 2 3 4 引脚名称 VCC Dout NC GND 类型 电源 输出 空 地 引脚说明 正电源输入,3V-5.5V DC 单总线,数据输入/输出引脚 空脚,扩展未用 电源地

3、电源引脚
DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状

态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电 容,用以去耦滤波。

4、串行接口(单线双向)
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通 讯时间4ms左右, 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模 式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号 采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采 集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后 转换到低速模式。

1.4单片机STC89C52 STC89C52是一种低功耗、 高性能CMOS八位微控制器, 具有8K在系统可编程Flash 存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和 引脚完全兼容。片上Flash允许ROM在系统可编程,亦适于常规编程器。在单芯片上, 拥有灵巧的8位CPU和在系统可编程Flash, 使其为众多嵌入式控制应用系统提供灵活 的解决方案。
1、主要特性如下:

1.增强型8051单片机, 6时钟/机器周期和12时钟/机器周期可以任意选择, 指令 代码完全兼容传统8051 2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机) 3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达 48MHz 4.用户应用程序空间为8K字节 5.片上集成512字节RAM 6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏 极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻 7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿 真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成 8.具有EEPROM功能 9. 具有看门狗功能 10.共3个16位定时器/计数器。即定时器T0、T1、T2

11.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中 断低电平触发中断方式唤醒 12.通用异步串行口(UART),还可用定时器软件实现多个UART 13. 14. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) PDIP封装

2、 STC89C52RC单片机的工作模式

掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续原程序 空闲模式:典型功耗2mA 正常工作模式:典型功耗4Ma~7mA 掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备

如图芯片引脚图 VCC:电源 Vss:地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。 作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗 输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复 用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节; 而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。 P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O 口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1 时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使 用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。 此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定 时器/计数器2的触发输入(P1.1/T2EX)。 P2端口 (P2.0~P2.7, 21~28引脚) P2口是一个带内部上拉电阻的8位双向I/O : 端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1 时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使 用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX @DPTR”指 令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX @R1” 指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容), 在整个访问期间不会改变。 在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。 P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O 端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1 时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用 时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。 在对Flash ROM编程或程序校验时,P3还接收一些控制信号。

RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用 来完成单片机的复位初始化操作。 看门狗计时完成后, RST引脚输出96个晶振周期的

高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认 状态下,复位高电平有效。 ALE/PROG (30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时, 锁存低8位地址的输出脉冲。在Flash编程时,此引脚也用作编程输入脉冲。 在一般情况下, ALE以晶振六分之一的固定频率输出脉冲, 可用来作为外部定时 器或时钟使用。 然而, 特别强调, 在每次访问外部数据存储器时, ALE脉冲将会跳过。 如果需要, 通过将地址位8EH的SFR的第0位置“1”, ALE操作将无效。 这一位置“1”, ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位 (地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。 PSEN(29引脚):外部程序存储器选通信号是外部程序存储器选通信号。当 AT89C51RC从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次, 而访问外部数据存储器时,PSEN 将不被激活。 EA/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的 外部程序存储器读取指令, EA必须接GND。注意加密方式1时,EA 将内部锁定位 RESET。为了执行内部程序指令,EA 应该接VCC。在Flash编程期间,EA 也接收12 伏VPP电压。 XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。

第2章 系统的硬件设计和连接
2.1、时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别 是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。 如下:

2.2、复位电路

RST引脚是单片机复位端,高电频有效。在引脚端输入至少连续两个单片 机周期的高电频,单片机复位。使用时,在引脚与VSS引脚之间接一个10KΩ的 下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。 如下:

2.2、显示模块

LCD1602引脚功能图:

2.3、传感器模块

第3章 总结
回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,在接近二星期的 日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩 固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次 课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服 务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题, 可以说得是困难重重,难免会遇到过各种各样的问题。首先,说说焊接的美观程度, 这是我所骄傲的,我焊接的很美观、明了。但在设计的过程中也发现了自己的不足 之处,对以前所学过的知识理解得不够深,把硬件焊接出来后,由于编程不熟,导 致推迟了对硬件功能的检测,最终在指导老师的耐心指导下完成所有功能检测,两 位老师的耐心指导,使我意识到专业知识的重要性,以后会更加努力!

第4章
程序: /***********************lcd1602.h***************************/ U8 code table2[]=" wendu U8 code table3[]=" . shidu . "; ";

sbit RS=P2^6; sbit RW=P2^5; sbit E=P2^7;

void write_com(U8 com) { E=0; RS=0; RW=0;

Delay(5); E=1; P0=com; E=0; } void write_date(U8 date) { E=0; RS=1; RW=0; Delay(5); E=1; P0=date; E=0; P0=0; } void init() { U8 num; Delay(15); write_com(0x38); write_com(0x38); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); for(num=0;num<15;num++) {

write_date(table2[num]); Delay(1); } write_com(0x80+0x40); for(num=0;num<15;num++) { write_date(table3[num]); Delay(1); } } void write_dht11(U8 add,U8 date) { U8 shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); }

/***********************dht11.h***************************/ typedef unsigned char typedef unsigned int U8; U16;

sbit

P1_0

= P2^0 ;

U8 U8

U8FLAG,k; U8temp;

U8 U8

U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8chec kdata_temp; U8 U8comdata;

void Delay(U16 z) { U8 x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void {

delay_10us()

U8 i; i--; i--; i--; i--; i--; i--; }

void {

COM(void) //数据0 1确认

U8 i; for(i=0;i<8;i++)

{ U8FLAG=2; while((!P1_0)&&U8FLAG++); //1bit是否结束 delay_10us(); delay_10us(); delay_10us(); U8temp=0;// 26us~28us 表示为0 if(P1_0)U8temp=1; // 超过28us依然为高电平 表示为1 U8FLAG=2; while((P1_0)&&U8FLAG++);

if(U8FLAG==1)break;//U8FLAG溢出超时则跳出for循环 //判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1

U8comdata<<=1; U8comdata|=U8temp; }

}

void RH(void) //-----湿温度读取子程序 -----------{

P1_0=0; Delay(34); //主机拉低高于18ms P1_0=1;

//总线由上拉电阻拉高 主机延时20us delay_10us(); delay_10us(); delay_10us(); delay_10us();

P1_0=1;//主机设为输入 判断从机响应信号

if(!P1_0)//判断从机是否有低电平响应信号 如不响应则跳出, 响应则向 下运行 { U8FLAG=2; while((!P1_0)&&U8FLAG++);//判断从机是否发出 80us 的低电平响应 信号是否结束 U8FLAG=2; while((P1_0)&&U8FLAG++);//判断从机是否发出 80us 的高电平, 如 发出则进入数据接收状态

COM();//数据接收状态 U8RH_data_H_temp=U8comdata; //湿度整数8位 COM(); U8RH_data_L_temp=U8comdata; //湿度小数8位 COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; //校验位 //温度小数8位 //温度整数8位

P1_0=1; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_tem p); 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; }

} }

/***********************main.c***************************/ #include <reg52.h>

#include <LCD1602.h>

U16 a,b,t; U8 flag,i; void main() { RW=1; t=0;

flag=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; init(); P1_0=1; P2=0xff; Delay(40); while(1) { RH(); write_dht11(0,U8T_data_H); write_dht11(3,U8T_data_L); write_dht11(9,U8RH_data_H); write_dht11(12,U8RH_data_L); if(flag==2)//100后flag为2,进行比较 { if(a==U8T_data_H&&b==U8RH_data_H) Buzzer=0; while(a==U8T_data_H&&b==U8RH_data_H); flag=0; } test(); } }

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++; if(t==2000)//100秒检测一次 { t=0; flag=2;//100秒后flag为2 } if(flag==0)//最开始 flag为0 赋值 { a=U8T_data_H; b=U8RH_data_H; flag=1;//flag变化 } } 电路原理图:

电路PCB图:

元件参数表:

元件参数表

资料引用 《新概念C51单片机》 郭天祥著 2006 电子工业出版社


相关文章:
DHT11数字温湿度传感器
DHT11数字温湿度传感器_工学_高等教育_教育专区。学习1、DHT11 产品概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感 器。它应用专用的数...
数字温湿度传感器DHT11详解及例程利用串口显示
数字温湿度传感器DHT11详解及例程利用串口显示_电子/电路_工程科技_专业资料。数字温湿度传感器DHT11 1、概述 DHTxx 系列数字温湿度传感器是一款含有已校准数字信号输...
数字温湿度传感器DHT11详解及例程利用串口显示(已经测试)
数字温湿度传感器DHT11详解及例程利用串口显示(已经测试)_专业资料。数字温湿度传感器DHT11详解及例程利用串口显示(程序已经测试) 数字温湿度传感器DHT11 1、概述 DHT...
温湿度采集传感器DHT11_图文
温湿度采集传感器DHT11_电子/电路_工程科技_专业资料。物联网数字温湿度传感器 DHT11 ?相对湿度和温度测量 ?全部校准,数字输出 ?卓越的长期稳定性 ?无需额外部件...
基于51单片机的DHT11温湿度传感器
基于51单片机的DHT11温湿度传感器_电子/电路_工程科技_专业资料。DHT11基于51 单片机的 DHT11 温湿度传感器 #include<reg52.h> #include<stdio.h> #define uchar...
DHT11温湿度模块的开发及应用
1 本课设采用 8051 系列单片机以及 DHT11 温湿度传感器相结合 的方式来测量周围环境温度,其特点具有采集温度、湿度的时间 快,所采集到的温湿度数值精度相对传统温...
利用DHT11测温度湿度实验报告_图文
22 1 测量气压温度测量系统洪强南京信息工程大学电子科学与技术,南京 210044 摘要 本实验基于使用 STC89C52 单片机、DHT11 传感器模块、1602 液晶显示屏模块以及报警...
湿度传感器DHT11说明书
超低能耗 ?4 引脚安装 ?完全互换 DHT11产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 传感器。它应用专用的数字模块采集技术和温湿度...
-DHT11数字型温湿度模块
-DHT11数字型温湿度模块_信息与通信_工程科技_专业资料。温湿度模块 DHT11 产品手册 一、产品概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复...
基于DHT11的温湿度监测电路设计_图文
DHT11 温湿度传感器是一款含 有已校准数字输出的温湿度复合传感器,传感器包括一个电阻式感湿原件和一个 NTC 测温元件,该产品具有品质卓越、超快响应、抗干扰能力强...
更多相关标签:
dht11 | dh11温湿度传感器 | 温湿度传感器 | sht11温湿度传感器 | 湿度传感器 | dht11 arduino | sht10温湿度传感器 | dht11引脚图 |