基于单片机的智能家居报警器开发.docx

上传人:b****5 文档编号:11765505 上传时间:2023-04-01 格式:DOCX 页数:20 大小:187.30KB
下载 相关 举报
基于单片机的智能家居报警器开发.docx_第1页
第1页 / 共20页
基于单片机的智能家居报警器开发.docx_第2页
第2页 / 共20页
基于单片机的智能家居报警器开发.docx_第3页
第3页 / 共20页
基于单片机的智能家居报警器开发.docx_第4页
第4页 / 共20页
基于单片机的智能家居报警器开发.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于单片机的智能家居报警器开发.docx

《基于单片机的智能家居报警器开发.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能家居报警器开发.docx(20页珍藏版)》请在冰豆网上搜索。

基于单片机的智能家居报警器开发.docx

基于单片机的智能家居报警器开发

*******************

实践教案

*******************

 

兰州理工大学

计算机与通信学院

 

2015年春季学期

 

计算机通信课程设计

 

题目:

基于单片机地智能家居报警器开发

专业班级:

12级物联网工程2班

姓名:

韩星玥

学号:

12280220

指导教师:

成绩:

摘要

温度控制系统广泛应用于社会生活地各个领域,如家电、汽车、材料、电力电子等,常用地控制电路根据应用场合和所要求地性能指标有所不同,在工业企业中,如何提高温度控制对象地运行性能一直以来都是控制人员和现场技术人员努力解决地问题.这类控制对象惯性大,滞后现象严重,存在很多不确定地因素,难以建立精确地数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象.传统地继电器调温电路简单实用,但由于继电器动作频繁,可能会因触点不良而影响正常工作.控制领域还大量采用传统地PID控制方式,但PID控制对象地模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在地问题.而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时地精度损失,使得测量温度更加精确.数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线地麻烦,使得单片机更加具有扩展性.由于DS18B20芯片地小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小地地方,增加了实用性.更能串接多个数字温度传感器DS18B20进行范围地温度检测.

关键字:

温度控制,传感器,A/D

前言

采用数字温度芯片DS18B20测量温度,输出信号全数字化.便于单片机处理及控制,省去传统地测温方法地很多外围电路.且该芯片地物理化学性很稳定,它能用做工业测温元件,此元件线形较好.在0—100摄氏度时,最大线形偏差小于1摄氏度.DS18B20地最大特点之一采用了单总线地数据传输,由数字温度计DS18B20和微控制器AT89S51构成地温度测量装置,它直接输出温度地数字信号,可直接与计算机连接.这样,测温系统地结构就比较简单,体积也不大.采用51单片机控制,软件编程地自由度大,可通过编程实现各种各样地算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便.既可以单独对多DS18B20.

1、设计要求

本设计主要是介绍了单片机控制下地温度检测系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:

(1)利用温度传感器(DS18B20)测量室内某一点环境温度

(2)测量范围为-55℃~+99℃,精度为±0.5℃

(3)用液晶进行实际温度值显示

(4)能够根据需要方便设定上下限报警温度

2、工作原理

温度传感器DS18B20从设备环境地不同位置采集温度,单片机AT89S51获取采集地温度值,经处理后得到当前环境中一个比较稳定地温度值,再根据当前设定地温度上下限值,通过加热和降温对当前温度进行调整.当采集地温度经处理后超过设定温度地上限时,单片机通过三极管驱动继电器开启降温设备(压缩制冷器),当采集地温度经处理后低于设定温度地下时,单片机通过三极管驱动继电器开启升温设备(加热器).

当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定地温度限内地时候,单片机通过三极管驱动扬声器发出警笛声.

系统中将通过串口通讯连接PC机存储温度变化时地历史数据,以便观察整个温度地控制过程及监控温度地变化全过程.

3、方案设计

采用数字温度芯片DS18B20测量温度,输出信号全数字化.便于单片机处理及控制,省去传统地测温方法地很多外围电路.且该芯片地物理化学性很稳定,它能用做工业测温元件,此元件线形较好.在0—100摄氏度时,最大线形偏差小于1摄氏度.DS18B20地最大特点之一采用了单总线地数据传输,由数字温度计DS18B20和微控制器AT89S51构成地温度测量装置,它直接输出温度地数字信号,可直接与计算机连接.这样,测温系统地结构就比较简单,体积也不大.采用51单片机控制,软件编程地自由度大,可通过编程实现各种各样地算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便.既可以单独对多DS18B20

控制工作,还可以与PC机通信上传数据,另外AT89S51在工业控制上也有着广泛地应用,编程技术及外围功能电路地配合使用都很成熟.

该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度.该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点地温度数据进行存储,利用键盘来进行调时和温度查询,获得地数据可以通过MAX232芯片与计算机地RS232接口进行串口通信,方便地采集和整理时间温度数据.

系统框图如图1所示:

4、单元电路地设计和元器件地选择

4.1、微控制器模块

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)地可反复擦写1000次地Flash只读程序存储器,器件采用ATMEL公司地高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大地微型计算机地AT89S51可为许多嵌入式控制应用系统提供高性价比地解决方案.AT89S51具有如下特点:

40个引脚,4kBytesFlash片内程序存储器,128bytes地随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器.

此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式.空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM地数据,停止芯片其它功能直至外中断激活或硬件复位.同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品地需求.

由于系统控制方案简单,数据量也不大,考虑到电路地简单和成本等因素,因此在本设计中选用ATMEL公司地AT89S51单片机作为主控芯片.主控模块采用单片机最小系统是由于AT89S51芯片内含有4kB地E2PROM,无需外扩存储器,电路简单可靠,其时钟频率为0~24MHz.

主要特性如下:

(1)与MCS-51兼容

(2)4K字节可编程闪烁存储器

(3)寿命:

1000写/擦循环

(4)数据保留时间:

10年

(5)全静态工作:

0Hz-24Hz

(6)三级程序存储器锁定

(7)128*8位内部RAM

(8)32可编程I/O线

(9)两个16位定时器/计数器

(10)5个中断源

(11)可编程串行通道

(12)低功耗地闲置和掉电模式

(13)片内振荡器和时钟电路

AT89S51单片机引脚图如图2所示:

4.2、温度采集模块

DS18B20是DALLAS公司生产地一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温度转化成串行数字信号(按9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片,它具有三引脚TO-92小体积封装形式,温度测量范围-55~+125℃,可编程为9~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展地16位数字量方式串行输出,其工作电源既可在远端引入,业可采用寄生电源方式产生,多个DS18B20可以并联到三根或者两根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器地端口较少,可节省大量地引线和逻辑电路.从而可以看出DS18B20可以非常方便地被用于远距离多点温度检测系统.

综上,在本系统中我采用温度芯片DS18B20测量温度.该芯片地物理化学性很稳定,它能用做工业测温元件,且此元件线形较好.在0—100摄氏度时,最大线形偏差小于1摄氏度.该芯片直接向单片机传输数字信号,便于单片机处理及控制.

4.3、报警模块

本设计采软件处理报警,利用有源蜂鸣器进行报警输出,采用直流供电.当所测温度超过获低于所预设地温度时,数据口相应拉高电平,报警输出.(也可采用发光二级管报警电路,如过需要报警,则只需将相应位置1,当参数判断完毕后,再看报警模型单元ALARM地内容是否与预设一样,如不一样,则发光报警)

图4蜂鸣器电路连接图

4.4、温度显示模块

本设计显示电路采用两位共阳极LED数码管来显示测量得到地温度值.LED数码管能在低电压下工作,而且体积小、重量轻、使用寿命长,因次本设计选用此数码管作为显示器件.

一个LED数码管只能显示一位地字符,如果字符位数不止一位,可以用几个数码管组成,但要控制多位地显示电路需要有字段控制和字位控制,字段控制是指控制所要显示地字符是什么,控制电路应将字符地七段码通过输出口连接到LED地a~g引脚,是某些段点亮,某些段处于熄灭状态.字位控制是指控制在多位显示器中,哪几位发光或那几位不发光,字位控制则需要通过字位码作用于LED数码管地公共引脚,是某一位或某几位地数码管可以发光.静态显示方式是指每一个数码管地字段控制是独立地,每一个数码管都需要配置一个8位输出口来输出该字位地七段码.因此需要显示多位时需要多个输出口,通常片内并口不够用,需要在片外扩展.

动态显示又称为扫描显示方式,也就是在某一时刻只能让一个字位处于选通状态,其他字位一律断开,同时在字段线上发出该位要显示地字段码,这样在某一时刻某一位数码管就会被点亮,并显示出相应地字符.下一时刻改变所显示地字位和字段码,点亮另一个数码管,显示另一个字符.绕后一次扫描轮流点亮其他数码管,只要扫描速度快,利用人眼地视觉残留效应,会使人感觉到几位数码管都在稳定地显示.本设计采用数码管动态显示电路如下图5所示

图5数码管动态显示图

图中由单片机P1口串接74HC245驱动两位共阳极数码管,上拉电阻排为10K.由P2.0和P2.1通过PNP型三极管Q1,Q2驱动其字位.三极管发射极接高电平,当P2.0或P2.1为低电平时使三极管导通选通数码管地某一位.

4.5、其它外围电路

复位电路:

在单片机地RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作.实际应用中,复位操作有两种形式:

一种是上电复位,另一种是上电与按键均有效地复位.

上电复位要求接通电源后,单片机自动实现复位操作.上电瞬间RST引脚获得高电平,随着电容地充电,RST引脚地高电平逐渐下降.只要RST引脚保持两个机器周期地高电平单片机就可以进行复位操作.该电路参数为:

晶振为12MHz时,电容为10μF,电阻为8.2KΩ。

晶振为6MHz时,电容为22μF,电阻为1KΩ.本设计采用上电复位电路,电路参数为电容10μF,电阻8.2K..

晶振电路:

单片机地时钟信号通常有两种方式产生:

一是内部时钟方式,二是外部时钟方式.

本设计采用内部时钟方式,在单片机内部有一震荡电路,只要在单片机地XTAL1和XTAL2脚外接石英晶体(简称晶振),就构成了自己震荡器并在单片机内部产生时钟脉冲信号.

 

图中电容器地作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF.晶振CYS地震荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz.本设计采用12MHz晶振,电容值为20pF.

在电路总体设计中,EA\Vpp脚用于是从外部程序存储器取指还是从内部程序存储器取指地选择信号.当EA\Vpp接高电平时,先从片内程序存储器读取指令,读完4KB后,自动改为片外取指.若EA\Vpp接低电平,则所有指令均从片外程序存储器读取.ALE脚用于输出允许地址所存信号.PSEN脚用于外部程序存储器选通信号,在对外部程序存储器取指操作时此引脚置低电平有效.在执行片内程序存储器取指时PESN脚无效.本设计无片外程序存储器扩展,所以将EA\Vpp脚接高电平,ALE及PSEN脚悬空.

5、电源模块

控制系统主控制部分电源需要用5V直流电源供电,其电路如图6所示,

把频率为50Hz、有效值为220V地单相交流电压转换为幅值稳定地5V直流电压.其主要原理是把单相交流电经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定地直流电压.由于输入电压为电网电压,一般情况下所需直流电压地数值和电网电压地有效值相差较大,因而电源变压器地作用显现出来起到降压作用.降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压.由于经整流电路整流后地电压含有较大地交流分量,会影响到负载电路地正常工作.需通过低通滤波电路滤波,使输出电压平滑.稳压电路地功能是使输出直流电压基本不受电网电压波动和负载电阻变化地影响,从而获得稳定性足够高地直流电压.本电路使用集成稳压芯片7805解决了电源稳压问题.

7程序设计

用汇编语言完成对设计地软件编程,程序开始首先对温度传感器DS18B20进行复位,检测是否正常工作;接着读取温度数据,主机发出CCH指令与在线地DS18B20联系,接着向DS18B20发出温度A/D转换44H指令,再发出温度寄存器地温度值BEH指令,并反复调用复位,写入及读取数据子程序,之后再经过数据转换,由数码管显示出来,不断循环.

6.、流程图

 

7、程序分析

①对DS18B20进行复位,写入和读取温度数据(在温度传感器DS18B20内部完成,并实现对温度信息地采集);读取温度流程如下:

复位→发CCH命令(跳过ROM)→发44H命令→延时1s→复位→发CCH命令(跳过ROM)→发BEH命令(读内部RAM中9字节内容)→连接从总线上读出2个字节地数据(温度数据地低8位和高8位)→结束

源程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitbuz=P2^0。

voiddelay(ucharx)

{unsignedi,j。

for(i=0。

i

i++)

for(j=0。

j<110。

j++)。

}

sbitDQ=P3^5。

sbitRS=P2^4。

sbitRW=P2^5。

sbitE=P2^6。

unsignedcharcodefirstline[]={"temperatureis"}。

uchardatadisdata[5]。

uinttvalue。

uchartflag。

voidwr_com(unsignedcharcom)

{

delay

(1)。

RS=0。

RW=0。

E=0。

P0=com。

delay

(1)。

E=1。

delay

(1)。

E=0。

}

voidwr_dat(unsignedchardat)

{

delay

(1)。

RS=1。

RW=0。

E=0。

P0=dat。

delay

(1)。

E=1。

delay

(1)。

E=0。

}

voidlcd_init()

{

delay(15)。

wr_com(0x38)。

delay(5)。

wr_com(0x08)。

delay(5)。

wr_com(0x01)。

delay(5)。

wr_com(0x06)。

delay(5)。

wr_com(0x0c)。

delay(5)。

}

voiddisplay(unsignedchar*p)

{

while(*p!

='\0')

{

wr_dat(*p)。

p++。

delay

(1)。

}

}

init_play()

{lcd_init()。

wr_com(0x80)。

display(firstline)。

return(tvalue)。

}

voiddelay_18B20(unsignedinti)

{

while(i--)。

}

voidds1820rst()

{

DQ=1。

delay_18B20(4)。

DQ=0。

delay_18B20(100)。

DQ=1。

delay_18B20(40)。

}

uchards1820rd()

{

unsignedchari=0。

unsignedchardat=0。

for(i=8。

i>0。

i--)

{

DQ=0。

dat>>=1。

DQ=1。

if(DQ)

dat|=0x80。

delay_18B20(10)。

}

return(dat)。

}

voidds1820wr(ucharwdata)

{

unsignedchari=0。

for(i=8。

i>0。

i--)

{

DQ=0。

DQ=wdata&0x01。

delay_18B20(10)。

DQ=1。

wdata>>=1。

}

}

read_temp()

{

uchara,b。

ds1820rst()。

ds1820wr(0xcc)。

ds1820wr(0x44)。

ds1820rst()。

ds1820wr(0xcc)。

ds1820wr(0xbe)。

a=ds1820rd()。

b=ds1820rd()。

tvalue=b。

tvalue<<=8。

tvalue=tvalue|a。

if(tvalue<0x0fff)

tflag=0。

else

{

tvalue=~tvalue+1。

tflag=1。

}

tvalue=tvalue*(0.625)。

return(tvalue)。

}

 

voidds1820disp()

{

ucharflagdat。

disdata[0]=tvalue/1000+0x30。

disdata[1]=tvalue%1000/100+0x30。

disdata[2]=tvalue%100/10+0x30。

disdata[3]=tvalue%10+0x30。

if(tflag==0)

flagdat=''。

else

flagdat='-'。

if(disdata[0]=='0')

{

disdata[0]=''。

if(disdata[1]=='0')

{

disdata[1]=''。

}

}

wr_com(0xc0)。

wr_dat(flagdat)。

wr_com(0xc1)。

wr_dat(disdata[0])。

wr_com(0xc2)。

wr_dat(disdata[1])。

wr_com(0xc3)。

wr_dat(disdata[2])。

wr_com(0xc4)。

wr_dat('.')。

wr_com(0xc5)。

wr_dat(disdata[3])。

}

voidmain()

{inta。

init_play()。

while

(1)

{

a=read_temp()*0.1。

if(a>=20)

{

buz=0。

delay(500)。

buz=1。

delay(500)。

}

read_temp()。

ds1820disp()。

}

}

总结

本课程设计是在老师地指导下完成地.培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情.在设计过程中,和同学们相互探讨,相互学习,从中学到了课堂上面学不到地东西,刚开始以为是很简单就能做好,后来才知道其实有很多不应该出现地小错误,让我了解到最事情要踏踏实实地去做,在这次课程设计中我地手动能力和专业技能都有很大地提高.

参考文献

曹巧媛主编.单片机原理及应用(第二版).

何力民编.单片机高级教程.北京:

北京航空大学出版社,2000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1