传感器课程设计

时间:2024.4.20

QQ图片20151217172943

地下室火灾报警器

学院:信息工程学院

班级:13普本测控

学号:

姓名:

目录

摘  要.................................................................... 1

一、 绪论................................................................. 2

1.1 课题描述........................................................... 2

1.2 方案设计........................................................... 2

1.3 方案比较:......................................................... 2

1.4 基本工作原理及框图................................................. 3

二、 相关芯片、传感器及硬件电路设计....................................... 4

2.1 STC89C52RC芯片.................................................... 4

2.2 DS18B20 温度传感器................................................. 5

2.3 LCD1602字符型液晶................................................. 6

2.4 光敏电阻........................................................... 7

系统软件设计[2]......................................................... 9

3.1温度传感器控制程序................................................. 9

3.2 液晶屏控制程序.................................................... 13

3.3主程序 “main.c”................................................. 15

四、 总结................................................................ 21

五、 参考文献............................................................ 22


地下室火灾报警器

摘  要

本设计是用于地下室的火灾报警,利用火灾发生时产生的剧烈光强,还有高温,进行感光感温报警。同时如果地下室存放的是一些温度敏感的物品,也可以通过设置进行温度过高/过低报警。用到的传感器主要有温度传感器DS18B20和光电传感器光敏电阻。

关键词:DS18B20,光敏电阻,STC89C52,LCD1602


一、绪论

1.1 课题描述

地下室常作为人们的杂物间使用,或者充当饭店的酒窖功能,里面经常摆放着很多易燃物品,由于地下室经常潮湿和经常飘散的灰尘会使普通的烟雾报警器误报[1]。所以设计此种地下室火灾报警器。

1.2 方案设计

方案一:火灾发生的时候会有光亮,会使昏暗的地下室光强出现变化,故采用光敏电阻设计此报警器;

方案二:火灾发生的时候会产生大量热量,会使阴冷的地下室温度变化,故采用温度传感器设计此报警器;

方案三:由于火灾发生时产生光和热,同时采用光敏电阻和温度传感器级联设计此报警器。

1.3 方案比较:

方案一只采用光敏电阻,电路设计比较简单,但是如果地下室入口没有密封好,或者地下室开有透光窗,外界光强变化时,容易出现报警器误报;

方案二采用温度传感器设计,电路上和方案三相当,但是如果地下室密封性好,地下室的一些容易发酵的酒水或者其他粮食蔬菜之类的发酵产生的大量热量,也会使报警器出现误报;

方案三综合光强变化和温度变化,电路设计上只比方案二多一个光敏传感器,但是却同时具备了光强和温度传感。如果地下室密封性好,温度升高的时候并没有光照变化,避免误报;如果地下室密封性不好或者开有透光窗,光强变化的时候,发酵产生的热量及时的散出地下室,报警器也不会误报。只有火灾时候瞬间产生高温不会及时散去,而且有大量光照,报警器才会工作。

综合以上方案,故采用方案三。

1.4 基本工作原理及框图

1.4.1 工作原理:

温度传感器测温,在lcd1602上实时显示温度。当温度超过设置的标准温度时,打开外部中断。如果没有中断,主程序继续检测温度报警开关K1是否打开,如果温度报警开关关闭,则程序返回开始位置继续测温。如果温度报警开关打开,则出现提示音“地下室温度过高,请及时通风”。

在温度过高时,同时出现了光照,光敏电阻阻值减小,电压拉低,则出现外部中断,提示音“地下室有火情”。

1.4.2程序流程图:

主程序:

火灾报警器主程序

中断处理程序:

火灾报警器中断

1.4.3框图:

按键1:设置报警温度+;

按键2:设置报警温度-;

按键3:设置每次加减的大小(1或者5);

按键4:退出设置;

开关1:打开/关闭温度报警;

温度报警:用LED灯亮表示;

火灾报警:用蜂鸣器响表示;

二、相关芯片、传感器及硬件电路设计

2.1 STC89C52RC芯片

STC89C52RC是STC公司生产的一款8051内核芯片,内部含有Flash EEPROM,为CMOS产品,内部有8KB的程序存储空间,512B的RAM。因为本设计应用于火灾报警,因此要选用温度范围-40℃至+85℃的工业级产品。外部晶振最高可接入40MHz,双列直插式封装。

需要为维持51单片机运行搭建最小系统,硬件连接如图。

2.2 DS18B20 温度传感器

使用DS18B20单线数字温度传感器具有以下优点:

(1)和微处理器连接时,仅需要一个I/O口就可实现。单总线具有经济性好、抗干扰能力强、使用方便等优点;

(2)测温范围宽,测量精度高:DS18B20测温范围为-55℃到+125℃;在-10℃至+85℃范围内,精度为±0.5℃。

(3)测量参数可配置:DS18B20测量分辨率可通过程序设定9-12位。

(4)DS18B20体积小、适用电压宽。

DS18B20连接如图:

测温电路实图:

QQ图片20151206181649

2.3 LCD1602字符型液晶

LCD1602是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x11的点阵字符位组成,一共可显示2行,每行可显示16个字符,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。

LCD1602的电路图如图

液晶连接实物图:QQ图片20151206181640

2.4 光敏电阻

光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的一种电阻器,又称为光电导探测器,入射光强,电阻减小,入射光弱,电阻增大。

光敏电阻部分的电路如图:

总电路图如图:

总电路实图:

QQ图片20151206181636

三、系统软件设计[2]

3.1温度传感器控制程序

3.1.1头文件名“ds18b20.h”

#ifndef _DS18B20_H_

#define _DS18B20_H  //定义ds18b20.h

#include <reg52.h>

#ifndef uchar

#define uchar unsigned char

#endif //定义uchar为类型unsigned char

#ifndef uint

#define uint unsigned int

#endif //定义uint 为类型unsigned int

sbit  DSIO = P2^3; //将P2^3命名为DSIO

void TempDelay1ms(); //声明一个延时1ms的函数

void TempDelay100ms(); //声明一个延时100ms的函数

uchar Ds18b20Init(); //声明DS18B20的初始化函数

void Ds18b20WriteByte(uchar dat); //声明一个函数将一个8位的二进制数写入DS18B20

uchar Ds18b20ReadByte(); //声明一个函数读取DS18B20的一个8位二进制数

void Ds18b20ChangTemp(); //声明一个函数写入温度转换命令到DS18B20

void Ds18b20ReadTempCom(); //声明一个函数发送读取温度命令到DS18B20

int Ds18b20ReadTemp(); //声明一个函数读取温度并返回

#endif

3.1.2源文件名“ds18b20.c”

#include"ds18b20.h"

void TempDelay1ms()

{

    uchar a,b,c;

    for(c=1;c>0;c--)

        for(b=142;b>0;b--)

            for(a=2;a>0;a--);

}

void TempDelay100ms()

{

    uchar a,b,c;

    for(c=19;c>0;c--)

        for(b=20;b>0;b--)

            for(a=130;a>0;a--);

}

uchar Ds18b20Init()

{

    uint i;

    DSIO=0; //拉低总线

    i=70;

    while(i--); //延时

    DSIO=1; //释放总线

    while(DSIO)

    {

        i++;

        if(i>5)

            return 0; //初始化失败

     }

     return 1; //初始化成功

}

void Ds18b20WriteByte(uchar dat)

{

    uint i,j;

    for(j=0;j<8;j++)

    {

        DSIO=0; //拉低总线

        i++; //延时

        DSIO=dat&0x01; //从最低位开始送数据到ds18b20

        i=6;

        while(i--); //延时

        DSIO=1; //释放总线

        dat>>=1; //数据移位,准备送下一位

    }

}

uchar Ds18b20ReadByte()

{

    uchar byte,bi;

    uint i,j;

    for(j=8;j>0;j--)

    {

        DSIO=0; //拉低总线

        i++; //延时

        DSIO=1; //释放总线

        i++;

        i++; //延时

        bi=DSIO; //读ds18b20传到总线的数据,从最低位开始

        byte=(byte>>1)|(bi<<7); //移位,准备读取下一位

        i=4;

        while(i--); //延时

    }

    return byte; //返回读取到的数据

}

void Ds18b20ChangTemp()

{

    Ds18b20Init(); //初始化

    TempDelay1ms(); //延时

    Ds18b20WriteByte(0xcc); //跳过ROM操作

    Ds18b20WriteByte(0x44); //发送温度转换命令

    TempDelay100ms(); //延时

}

void Ds18b20ReadTempCom()

{

    Ds18b20Init(); //初始化

    TempDelay1ms(); //延时

    Ds18b20WriteByte(0xcc);  //跳过ROM操作

    Ds18b20WriteByte(0xbe); //发送读取温度命令

}

int Ds18b20ReadTemp()

{

    uint temp=0;

    uchar tmh,tml;

    Ds18b20ChangTemp(); //发送温度转换命令

    Ds18b20ReadTempCom();  //发送读取温度命令

    tml=Ds18b20ReadByte(); //读取温度(共16位),先读低8位

    tmh=Ds18b20ReadByte(); //读取温度高8位

    temp=tmh;

    temp<<=8;

    temp|=tml; //将16位温度数据保存到16位变量temp

    return temp; //返回温度值

}

3.2 液晶屏控制程序

3.2.1头文件名“lcd1602.h”

#ifndef _LCD1602_H_

#define _LCD1602_H_ //定义lcd1602.h

#include<reg51.h>

#ifndef uchar

#define uchar unsigned char //定义uchar为类型unsigned char

#endif

#ifndef uint

#define uint unsigned int  //定义uint 为类型unsigned int

#endif

#define GPIO_LCD P1  //定义GPIO_LCD替换P1,作为lcd1602的输入

sbit RS=P2^0; //声明RS为I/O口P2^0

sbit RW=P2^1; //声明RW为I/O口P2^1

sbit E=P2^2; //声明E为I/O口P2^2

void LcdDelay5ms(); //声明一个延时5ms的函数

void LcdWriteCom(uchar com); //声明一个函数给lcd1602写入命令

void LcdWriteData(uchar dat); //声明一个函数给lcd1602写数据

void LcdInit(); //声明一个函数lcd1602初始化

#endif

3.2.2源文件名“lcd1602.c”

#include"lcd1602.h"

void LcdDelay5ms()

{

    uchar a,b;

    for(b=19;b>0;b--)

        for(a=130;a>0;a--);

}

void LcdWriteCom(uchar com)

{

    RS=0; //操作命令

    RW=0; //写操作

    E=0; //关闭使能

    GPIO_LCD=com; //命令送到P1口

    LcdDelay5ms(); //延时(大于40ns)

    E=1; //开使能

    LcdDelay5ms(); //延时 (大于150ns)

    E=0; //写命令结束,关闭使能

}

void LcdWriteData(uchar dat)

{

    RS=1; //操作数据

    RW=0; //写操作

    E=0; //关闭使能

    GPIO_LCD=dat; //将数据送到P1口

    LcdDelay5ms(); //延时(大于40ns)

    E=1; //开使能

    LcdDelay5ms(); //延时(大于150ns)

    E=0; //写数据结束,关闭使能

}

void LcdInit()

{

    LcdWriteCom(0x38); //设置显示模式(8位总线,双行显示,5*7点阵字符)

    LcdWriteCom(0x0c); //显示开关控制(整屏显示开,不显示光标)

    LcdWriteCom(0x06); //设置输入模式,读/写一个字符,地址指针加1,整屏显示不动

    LcdWriteCom(0x01); //清屏

    LcdWriteCom(0x80); //设置数据存储器地址(第一行第一位)

}

3.3主程序 “main.c”

#include <reg51.h>

#include "lcd1602.h"

#include "ds18b20.h"

sbit Key1=P2^7;

sbit Key2=P2^6;

sbit Key3=P2^5;

sbit Key4=P2^4;

sbit K1=P3^0;

sbit LED=P3^6;

sbit BZ=P3^7;

int temp100;

/*温度显示函数*/

void TempDisplay(int temp)

{

    int a;

    uchar datas[]={0,0,0,0,0};

    float tp;

    a=temp;

    if(temp<0)

    {

        LcdWriteCom(0x86);

        LcdWriteData('-');

        a-=1;

        a=~a;

        tp=a;

        a=tp*0.0625*100+0.5;

    }

    else

    {

        LcdWriteCom(0x86);

        LcdWriteData('+');

        tp=a;

        a=tp*0.0625*100+0.5;

    }

    temp100=a;

    datas[0]=a/10000;

    datas[1]=a%10000/1000;

    datas[2]=a%1000/100;

    datas[3]=a%100/10;

    datas[4]=a%10;

    LcdWriteCom(0x87);

    LcdWriteData(datas[0]+'0');

    LcdWriteData(datas[1]+'0');

    LcdWriteData(datas[2]+'0');

    LcdWriteData('.');

    LcdWriteData(datas[3]+'0');

    LcdWriteData(datas[4]+'0');

}

void main()

{

/*初始化*/

    uchar i,step,set;

    uchar code st[]="STD:";

    uchar code wd[]="TEMP:";

    uchar code sp[]="STEP:";

    uchar sets[]={0,0,0};

    int temp;

    Ds18b20Init();

    Ds18b20ChangTemp();

    LED=0;

    BZ=0;

    LcdInit();

    EA=1;//中断允许

    EX0=0;//外部中断0关  

    set=24;//默认报警温度

    step=1;//默认每次加/减温度的步长

    P2|=0xf0;//按键IO写1,准备读取按键状态

    K1=1;//报警开关IO口写1,准备读取报警开关状态

/*进入报警温度设置,Key1(报警温度加),Key2(报警温度减),Key3(每次加/减d 步长1或者5),Key4退出设置,按复位键重新进入设置*/

    while(Key4)

    {

        LcdWriteCom(0xc0);

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

        {

            LcdWriteData(st[i]);

        }//显示字符std

        LcdWriteCom(0xc8);

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

        {

            LcdWriteData(sp[i]);

        }//显示字符step     

        sets[0]=set/100;

        sets[1]=set%100/10;

        sets[2]=set%10;

        LcdWriteCom(0xc4);

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

        {

            LcdWriteData('_');

        }//std的温度闪烁

        LcdDelay5ms();

        LcdWriteCom(0xc4);

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

        {

            LcdWriteData(sets[i]+'0');

        }//显示std的设定温度

        LcdDelay5ms();

        LcdDelay5ms();

        LcdDelay5ms();

        LcdDelay5ms();

        LcdDelay5ms();

        LcdWriteCom(0xce);

        LcdWriteData(step+'0');//显示步长

        if(Key1==0)

        {

            LcdDelay5ms();

            if(Key1==0)

            {

                if(set<100)

                    set+=step;

                else

                    set=24;

            }

            while(!Key1);

        }

        if(Key2==0)

        {

            LcdDelay5ms();

            if(Key2==0)

            {

                if(set>24)

                    set-=step;

                else

                    set=100;

            }

            while(!Key2);

        }

        if(Key3==0)

        {

            LcdDelay5ms();

            if(Key3==0)

            {

                switch(step)

                {

                    case(1):step=5;

                            break;

                    case(5):step=1;

                            break;

                }

            }

            while(!Key3);

        }

     }

/*进入测温程序*/

     while(1)

     { 

        temp=Ds18b20ReadTemp();

        LcdWriteCom(0x80);

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

        {

            LcdWriteData(wd[i]);

        }

        LcdWriteCom(0x8e);

        LcdWriteData('C');

        TempDisplay(temp);

        if(temp100>(set*100))

        {

          IT0=1;//外部中断0电平触发

EX0=1;//外部中断0开

            if(K1==1)

            {

                LED=1;

             }             

        }

        else

        {

            LED=0;

        }

}

}

/*光照中断函数*/

void HZ() interrupt 0

{

BD=1;

while(1);

}

四、总结

此地下室火灾报警器可以对一般明火火情及时反应工作,但是像其他火灾报警器一样,对于阴燃火情发现不及时。

该报警器还可拆开成两个报警器用:

(1)拆成一个报警温度可调节的温度报警器,可以用在养殖场、温室大棚、孵化场等对温度有要求场合;

(2)拆成一个光照报警器,可以用在洗照片的暗室等场合。

五、参考文献

[1] 杨帆. 离子感烟防火报警器使用注意事项[J]. 家庭电子. 四川:家庭电子杂志社, 2000(12).

[2] 郭天祥. 51单片机C语言教程[M]. 北京:电子工业出版社,2009.

更多相关推荐:
传感器课程设计报告

一课程设计目的和任务一课程设计的目的1通过传感器的课程设计进一步加深对课本理论知识的理解掌握各类传感器的工作原理培养独立分析问题解决问题的能力提高实践技能2根据某一类传感器的特性提出具体应用3设计原理电路进行印...

传感器课程设计实验报告

河北科技大学课程设计报告姓名学号专业班级课程名称指导教师学年学期年月课程设计成绩评定表目录一设计目的1二摘要1三正文11设计题目12电路原理图13电路原理说明24电路组成说明25元器件明细表46制作加工元器件5...

传感器课程设计报告

完成时间20xx年4月17日项目名称光电编码器信号译码显示电路设计小组编号光电第三组设计小组名单张井组长王鸣峰袁璟报告撰写人张井上海交通大学电子信息与电气工程学院摘要光电编码器是一种位移一数字转换器它具有精度高...

20xx年最新传感器课程设计报告

成绩评定表1课程设计任务书2目录一引言4二设计目的及要求411设计目的412设计要求4三设计方案及论证之硬件电路设计521传感器简介522电路原理图6221电机测速即驱动部分6222电路供电系部分7223显示部...

传感器课程设计

目录内容摘要2第1章课程设计的目的和要求311课程设计目的312课程设计题目和任务313课程设计要求4第2章总体设计421方案1422方案2523方案3624方案比较725方案选择7第3章气敏传感器的选择831...

传感器与检测技术课程设计报告

北方民族大学课程设计报告院(部、中心)电气信息工程学院姓名***学号***专业测控技术与仪器班级测控技术与仪器101同组人员**课程名称传感器与检测技术设计题目名称噪音测量仪的设计起止时间20**.12.27-…

传感器课程设计报告

河北科技大学课程设计报告学生姓名:**学号:**专业班级:电子信息工程L126班课程名称:传感器原理及应用学年学期:20XX20XX学年第一学期指导教师:***20XX年12月课程设计成绩评定表目录一、引言--…

单片机课程设计 基于数字温度传感器的数字温度计报告

单片机原理及应用课程设计报告书课题名称基于数字温度传感器的数字温度计姓名学号专业指导教师机电与控制工程学院年月日填写说明1正文部分1标题与正文格式定义标准如下一级标题1标题1二级标题11标题2三级标题111标题...

传感器课程设计-热释电红外探测器

摘要随着社会经济的日益发展防盗成了人们越来越关心的问题铁门铁窗等已经不能给人们带来太多的安全感社会对报警器材的需求日益迫切智能防盗系统是以保障安全为目的建立起来的技术防范系统他包括以现代物理和电子技术及时发现侵...

《传感器技术》课程设计报告

黄冈师院物电学院传感器技术课程设计报告题目名称热释红外电子狗设计专业年级电子信息科学与技术20xx级学号20xx22340220学生姓名阳诗海报告完成日期20xx年12月20日评阅结课评阅教师传感器技术课程设计...

传感器课程设计

东北石油大学课程设计20xx年7月16日任务书课程传感器课程设计题目紫外线传感器应用电路设计专业测控技术与仪器姓名学号主要内容本设计为紫外线火焰监测系统紫外线是一种不可见光波长范围001040微米光子能量大当火...

传感器课程设计论文

激发不同层次的学生学习传感器的兴趣电气工程与自动化系王文川论文摘要本文结合传感器教学改革实践的经验笔者提出了一种适合当前成都市技师院校传感器实践教学的新思路突出能力为本的思想打破学科为本的模式激发学生学习的积极...

传感器课程设计总结(28篇)