技术文档

51单片机湿度检测 基于AT89C51的温湿度监测系统

小编 2024-11-23 技术文档 23 0

基于AT89C51的温湿度监测系统

张东东

(苏州大学 电子信息学院,江苏 苏州 215006)

摘要 :在现代生产领域,温湿度的监测与控制应用广泛,对于监测技术的研究也越显重要。鉴于国内外温湿度测量技术的发展现状,基于AT89C51单片机和DHT11数字式温湿度传感器设计实现了一个温湿度监测系统。硬件电路包括微控制器模块、数据采集模块、显示电路、报警电路以及按键设置5个部分,用户可通过按键设定温湿度上下限,当测得的数据超出所设定的范围时发出报警信号(蜂鸣器蜂鸣)。软件部分由主程序和各部分子程序构成。系统精确度较好,在日常环境监测以及生产活动中都有一定的应用价值。

0引言

随着现代科技的发展与通信技术的进步,温湿度测量系统的整体性能及其优越性也取得了很大突破,对于温湿度传感器的应用和开发也越来越智能化。

国外很早就开始了对于温湿度测量技术的研究,且一些技术已趋于成熟,集成化的监测设计、传感器的应用、智能测试系统等技术早已研发出来并得以应用,这是国际传感器领域的重大突破。

目前,虽然国内外对于此技术的研究已较为成熟,但科技探索是永无止境的,未来生产领域必然会提出更高的要求,一种完全智能化甚至完全无人化的潮流正悄然兴起,这是不可避免的发展趋势[1]。

1设计任务及方案论证

1.1设计要求

基于微控制器的温湿度测量系统设计要求如下[2]:

(1)对所处环境的温湿度进行检测,要求温度检测范围为0℃~50℃,测温精度为±2℃; 湿度检测范围为20%~90%RH,测湿精度为±5%RH。

(2)能够通过按键设定阈值。

(3)当检测数据超出阈值蜂鸣报警。

(4)系统使用4位LCD显示。

1.2设计方案

对温湿度进行实时监测并LCD显示,可自主设定温湿度阈值,当传感器所测得数据超出设定范围,蜂鸣器报警。为达到本次设计的要求,系统需包含以下功能模块[3]:温湿度传感器模块、主控制模块、按键和显示模块、报警电路。系统原理框图如图1所示。

2硬件设计

2.1主控制模块

AT89C51是一种带4 KB移序存储器的低电压、高性能CMOS 8位微处理器,其内部包含下列几个部件[45]:一个8位CPU;一个片内振荡器及时钟电路;4 KB程序存储器,128 B数据存储器;两个定时器,也可用作计数功能;一个可编程全双工串行口;4个8位可编程并行I/O端口;5个中断源和两个优先级嵌套中断结构。

以上各部分通过内部总线相连接。另外,除了8位CPU外,MCS-51内部还有一个微处理器,它实际上是一个完整的一位字长的计算机。

AT89C51单片机引脚排列图如图2所示。

DHT11的DATA口与单片机AT89C51的P3.0口连接。LCD1602显示电路就是将各引脚依次与单片机的P0口相连,蜂鸣器超限蜂鸣。

2.2主要功能模块

2.2.1晶振与复位电路

XTAL1和XTAL2分别是单片机内用于构成振荡器的放大器的输入端和输出端。在XTAL1和XTAL2的引脚上接一个石英晶体和两个电容,便能使内部振荡器自激振荡。与石英晶体振荡器并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。石英晶振的电容可以在20~40 pF之间选择,本文选择22 pF。

单片机复位电路也是必不可少的部分。当程序执行出现问题时,复位操作使单片机的程序重新运行,复位操作至少要两个机器周期以上的高电平位于RST引脚。本设计采用的是上电复位。

2.2.2温湿度传感器电路

温湿度采集是完成环境与微处理器数据沟通的前端部分,采用DHT11来完成设计[6]。

(1)DATA单总线通信[7]

DATA接口用于数据通信,传送的数据由小数部分和整数部分组成。主机等待DHT11响应时,总线处于高电平状态,当传感器接收到开始信号时,就会发送一个响应信号,使总线处于低电平状态,信号长80 μs,如果读取高电平响应信号,但DHT11并无响应,则说明线路连接可能表1DHT11性能指标测量范围测量精度分辨力0℃~50℃,

20%~90%RH±2℃±5%RH1出现问题。

(2) DHT11各项性能指数如表1、表2、表3所示。

(3)DHT11典型应用如图3所示。

2.2.3报警电路

基于微型计算机所设计的控制系统中,通常都设定有紧急状态报警系统,以便采取应对措施。本次设计如果测值超出此设定范围则进行报警,即蜂鸣器持续鸣叫[8]。报警电路如图4所示。

2.2.4LCD显示电路

显示模块选用LCD1602液晶显示屏,它是目前工控系统中使用最广泛的液晶屏之一,显示质量高。1602字符型液晶模块是点阵型液晶,驱动方便,经过编程后显示内容多样化[9]。

LCD1602参数如表4、表5所示。表4LCD1602液晶屏的主要参数内容参数工作电压/V4.5~5.5容量/字符16×2最佳工作电压/V5工作电流/mA2.0字符尺寸/mm2.95×4.35表5LCD1602引脚定义引脚号符号引脚说明1VDD正极2VSS地3VL液晶显示偏压4RS数据/命令5R/W读/写6EN使能信号7~14D0~D7数据15BLA背光源正极16BLK背光源负极将LCD1602的7~14脚依次与单片机的P0端口相连。

3软件设计

3.1编程思想

本文设计的温湿度测量系统,其主要功能是对当前环境的温湿度进行实时监测,并在LCD1602上进行显示,当所测数据超出所设定的阈值范围时,蜂鸣器蜂鸣报警。软件设计:首先将LCD初始化,LCD1602采用5×7点阵并分两行显示,然后读取温湿度值进行处理和按键检测,判断数值是否超出预设范围,超出则蜂鸣器报警。第一次按键单片机复位,进入设定界面分别完成,3个设定按键设定数据切换、数据加、数据减等功能。

3.2软件流程图

本设计采用按键复位与阈值设置操作,第一个按键可切换至阈值设置界面,按2次键可选择设置参数;第二与第三个按键分别完成参量加减操作,按键检测软件流程如图5所示。

整个系统的软件设计流程图如图6所示,上电启动系统,蜂鸣器蜂鸣,图6软件设计流程图然后将LCD1602初始化,微控制器读取温湿度值,经检测后与预设值进行比较,若超出阈值范围,则蜂鸣器蜂鸣,并模拟启动控制设备,直至温湿度处于预设范围之内,若未超出,则温湿度值正常显示[10]。

4系统调试与测试结果

4.1仿真分析

Proteus仿真运行结果如图7所示[11]。

4.2测试结果

(1)在上电之后,电源指示灯工作,系统正常运行,图8为温湿度正常显示界面。

(2)第一次按下按键1,系统进入阈值设置界面,再次按下可选择要设置的参数,第二个与第三个按键分别执行参量加与减操作。

(3)若当前温湿度超出预设范围,报警指示灯亮,蜂鸣器持续鸣叫。

5结论

本设计是基于51单片机与DHT11的一个温湿度监测系统,是对实际生产应用系统的一个模拟,通过DHT11温湿度传感器与单片机完成实时监测,按键与LCD实现人机交互,可自主设置温湿度阈值,实时显示当前数据,并带有超限报警功能,在实际生产中,可以启动相应设备调整环境数据,实现安全生产。

通过实验仿真与系统实测,系统可以达到预期目标,这样的一个系统可以经过更加精准的优化改进投入到实际应用中。

参考文献

[1] 刘宝元,张玉虹,姜旭,等.基于单片机的温湿度监控系统设计[J].国外电子测量技术,2009,28(12):7780.

[2] 薛玲,孙曼,张志会,等.基于单片机AT89S51的温湿度控制仪[J].化工自动化及仪表,2010, 37(7):6669.

[3] 张广军,黄俊钦,李行善,等.温度传感器现场动态校准方法与 实验研究[J].北京航空航天大学学报,1997,23(3):311315.

[4] 徐春河.浅谈AT89S51[J].制造业自动化,2010(12):8082.

[5] 吴汉清.常用的典型单片机资料[J].无线电,2007,18(11):7280.

[6] 张冬林,李鑫,戴梅,等.基于DHT11的低成本蚕室温湿度自动控制系统的设计[J].现代农业科技,2010(18):1415.

[7] 周鹏.基于STC89C52单片机的多功能测温仪设计[J].微型机与应用,2013,32(1):2629.

[8] 李建民.单片机在温度控制系统中的应用[J].江汉大学学报,1999,16(3):6062.

[9] 梁振涛,樊泽明,任永亮,等.基于单片机的移动监控系统硬件设计[J].微型机与应用,2014,33(2):2527,30.

[10] 吴大中,宋俊飞.实验室智能监控系统设计[J].电子技术应用,2014,40(3):120122.

[11] 汤武辉.Proteus仿真软件与单片机实验教学[J].长江大学学报,2010,7(3):408409.

51单片机实现温湿度传感器实时监控并LCD显示的解决方案

简介:

51单片机STC89C52RC是本方案的选用芯片,以其8位处理和极低的价格来看,是很适合进行本次实验。LCD显示屏本次选用的型号是1602A。

在实现51单片机实现温湿度传感器实时监控并LCD显示的基础功能后,还可以通过单片机的串口通信和WIFI模块或者Zigbee模块进行物联网连接,使设备连接互联网,再通过TCP连接进行物联网的一整套方案,包括手机APP实时监控数据,也可以是手机APP远程开启风扇来调节温度或者湿度,但这些不在本次方案中细说,本人已经实现上述功能,只是技术不完善,所以不在此公布。

Protues8仿真图:

51单片机完整程序(代码很长,但是完整,可以直接复制使用):

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

//

//

//

//

//

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

#include <reg52.h>

#include <intrins.h>

#include <lcd.c>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

//

typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */

typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */

typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */

typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */

typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */

typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */

typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

//

#define uchar unsigned char

#define uint unsigned int

#define Data_0_time 4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbit P2_0 = P2^0 ;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8 U8FLAG,k;

U8 U8count,U8temp;

U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8 U8comdata;

U8 outdata[5]; //定义发送的字节数

U8 indata[5];

U8 count, count_r=0;

U8 str[5]={"RS232"};

U16 U16temp1,U16temp2;

U8 a[]={"Temperature: "};

U8 b[]={"Humidity: "};

U8 wd_sw,wd_gw,sd_sw,sd_gw;

void Delay(U16 j)

{

U8 i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

void Delay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

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

}//rof

}

//--------------------------------

//-----湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

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;

}//fi

}//fi

}

void main()

{

U8 i,j;

LcdInit();

Delay(1); //延时100US(12M晶振)

while(1)

{

RH();//调用温湿度读取子程序

str[0]=U8T_data_H;

str[1]=U8T_data_L;

str[2]=U8RH_data_H;

str[3]=U8RH_data_L;

str[4]=U8checkdata;

wd_sw=U8T_data_H/10%10+0x30;

wd_gw=U8T_data_H%10+0x30;

sd_sw=U8RH_data_H/10%10+0x30;

sd_gw=U8RH_data_H%10+0x30;

a[12]=wd_sw;

a[13]=wd_gw;

a[14]=0xdf;

a[15]='C';

a[16]='\0';

LcdWriteCom(0x00+0x80);

for(i=0;i<16;i++)

{

LcdWriteData(a[i]);

}

b[9]=sd_sw;

b[10]=sd_gw;

b[11]='\%';

b[12]='\0';

LcdWriteCom(0x42+0x80);

for(i=0;i<12;i++)

{

LcdWriteData(b[i]);

}

//读取模块数据周期不易小于 2S

Delay(30000);

}

}

相关问答

温湿度 监测器价格是多少- 一起装修网

一起装修网问答平台为您提供温湿度监测器价格是多少的相关答案,并为您推荐了关于温湿度监测器价格是多少的相关问题,一起装修网问答平台:装修问题,因我而止。

怎样让它进行空气 湿度 检测 ?怎样进行自动进行空气加湿?怎...

[最佳回答]S系列小型超声波空气加湿器,共有两种加湿量可供您选择,其控制方式均为手动开关控制方式.S系列小型超声波加湿机是应用于各种低温展柜、食品展架、...

你好啊,可否教我如何把温 湿度 传感器连接到电脑,我在网上看到你给别人回答了,但是我还是不懂,谢谢?

温湿度传感器是和单片机连接的,它们采集的数据都是先传给单片机,再由单片机控制传给电脑的,单片机与电脑之间的数据传输需要使用串口,然后才能进行数据传送,...

单片机 、光耦

[回答]1系统总体结构原理粮食在储藏期间,由于受环境、气候和通风条件等因素的变化,粮仓内温度或湿度会发生异常,这极易造成粮食的霉烂、或发生虫害。那么...

检查官甲醛 检测 仪G丅58使用说明书随机说明书?

开机后,经过传感器的自动校灵,会跳出综合测量的页面。此时,会显示甲醛的浓度、评估目前的危害严重程度,还会显示当前的温度与湿度等等。如果这里的显示数值...

物联网如何打造智慧城市?

什么是智慧城市?借助数字技术和大数据致力于改善人民生活的城市是智慧城市。一个智慧城市是城市地区使用不同类型的电子的传感器来收集数据,然后使用从中获得...

...车空调温度 湿度 设定值由乘务员手动调整,但在客车空调_作业帮

[最佳回答]Withtheeconomyuninterruptedgrowthandceaselesslivingstandardrise,thepassengercaresaboutt...

小弟问一下温 湿度 传感器的接线方式,采用几线制,用RS-485总线行吗?谢谢啊?

数字温湿度传感器基本是I2C通讯,,通过单片机接收后,转化成串口信号,可以用485来采集,模拟的温湿度传感器,也可以单片机采集转化成485的.数字温湿度传感器基本...

什么是iot,阿里小米华为这些公司都在做iot,如果要学习iot,要学习什么知识?

根据我所知道的回答一下这个问题。我的回答适合于初学者,或者IOT爱好者,在业余时间鼓捣鼓捣的那种。对于IOT的专业人士,有可能过于肤浅了。我以前用各种传感...

python可以 单片机 编程吗,怎么样?

包括数十个简单入门案例,如LED控制、wifi控制、智能小车、PM2.5检测仪等。其中书中教程实例所搭配的实验开发板即为TPYBoard开发板。所以有了先进的软件、硬件...

猜你喜欢