室内外环境监测报警系统设计报告.docx
《室内外环境监测报警系统设计报告.docx》由会员分享,可在线阅读,更多相关《室内外环境监测报警系统设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
14
太原工业学院大学生科技创新
室内外环境监测报警系统
设计报告
系部名称:
电子工程系
项目名称:
室内外环境监测报警系统
指导教师:
陆锋
申请者:
冯国栋
年级专业:
11级电子信息工程
申请日期:
2013年11月24日
联系电话:
15388513926
一、项目主要内容
本项目将利用单片机与传感器等电子器件,设计一款实用方便的室内外环境监测报警系统。
设计分为两个模块,室内模块和室外模块。
室内模块主要功能是:
测量室内温度和湿度、火灾监测报警、烟雾(或有害气体)监测报警;室外模块的主要功能是:
测量室外温湿度。
两个模块可以通过无线(采用ZigBee)连接,单片机将收集的数据进行处理,将温度、湿度及室内外温差显示在LCD显示器上;当出现火情、有害气体泄漏时,蜂鸣器用不同频率的响声分别对各种情况进行预警。
二、项目主要创新
1.设计的室内外环境监测报警系统灵巧、简便。
2.将日常生活中需要的几种监测报警系统进行统一的整合。
最主要的是设计了温湿检测、火灾监测、烟雾及有害气体监测报警。
3.可以用我们设计的系统作为控制系统,外接风扇、水雾喷洒或换气系统。
根据温度变化调节风扇、根据湿度喷洒水雾或根据空气质量开关换气系统。
4.使用了ZigBee近距离无线组网通讯技术。
三、硬件电路设计
硬件电路包括室内模块和室外模块。
室内模块相当于协调器,使用了STM32和CC2530两款芯片,主要用于检测室内温湿度并显示、监测火灾、有毒气体以及报警装置、接收室外温湿信息并显示、控制继电器等。
室外模块相当与终端设备,使用CC2530芯片,主要用于检测室外或其他地方温湿参数,并把这些参数无线发射到室内模块进行显示。
下面是主要的硬件设计。
1.STM32核心板电路图
2.CC2530核心板电路图
3.电源电路设计
ASM117-3.3是5V转3.3V芯片
4.DS18B20电路设计
5.DHT11电路设计
6.火灾、烟雾监测电路设计
烟雾、有害气体监测使用MQ_2,利用红外接受二极管监测是否有火灾发生。
LM393是一种低功率失调电压双比较器,它类似于增益不可调的运算放大器。
每个比较器有两个输入端和一个输出端,两个输入端一个称为同向输入端,一个称为反相输入端。
在比较两个电压时,任意一个输入端加一个固定电压作参考电压,另一端加一个待比较信号电压。
7.LCD显示电路设计
8.继电器电路设计
9.按键电路
10.CC2530串口通信电路设计
四、部分软件设计
由于程序较长,这里提供部分程序。
1.STM32主程序部分
#include"stm32f10x.h"
#include"delay.h"
#include"sys.h"
#include"USART.h"
#include"LCD.h"
#include"DHT11.h"
#include"DS18B20.h"
#include"MQ_2.h"
#include"IR.h"
#include"LED.h"
#include"BUZZER.h"
#include"KEY.h"
#include"RELAY.h"
#include"Display.h"
voidDeal_With(u8,u8);
voidDeal_Temp(u8,u8);
externunsignedcharTH,TL,RH,RL;
externunsignedchartemp[7];
externu8RES;
intmain(void)
{
u8ts=0;
u8fs=1;
u8mq=0;
u8ir=0;
u8h_norm=H_TEMP;
u8l_norm=L_TEMP;
delay_init();
LED_Init();
Buzzer();
RELAY_Init();
IR_Init();
MQ_Init();
USART1_Configuration();
USARTx_NVIC_Configuration();
LCD_Init(0x38,0x0c,0x06,0x01);
DS18B20_WriteEEPROM();
Scan_Key_Configuration();
while
(1)
{
DHT11_ReadData();
DS18B20_ReadTemperature();
Temp_Conversion();
Slect_Model();
mq=MQ_Scan();
ir=IR_Scan();
ts=Key_Scan();
switch(ts)
{
caseKVALUE1:
fs=Set_LCD(ts);break;
caseKVALUE2:
h_norm=Set_H_Param(ts,fs);break;
caseKVALUE3:
l_norm=Set_L_Param(ts,fs);break;
caseKVALUE4:
Reset_Instrument(ts);break;
default:
break;
}
switch(fs)
{
case0:
break;
case1:
Display_Indoor();break;
case2:
Display_Outdoor_1();break;
case3:
Display_Outdoor_2();break;
case4:
Display_Set_Temp_Param(h_norm,l_norm);break;
default:
break;
}
Deal_With(mq,ir);
Deal_Temp(h_norm,l_norm);
}
}
2.CC2530监测温度程序
#ifndef__DS18B20_H__
#define__DS18B20_H__
externunsignedcharDs18b20Initial(void);
externvoidTemp_test(void);
externvoidTemp_Conversion(void);
externunsignedchartemp[7];
externunsignedchartflag;
#endif
#include"iocc2530.h"
#include"OnBoard.h"
#defineuintunsignedint
#defineucharunsignedchar
#defineDs18b20DataP0_6//温度传感器引脚
#defineON0x01//读取成功返回0x00,失败返回0x01
#defineOFF0x00
uchartemperature[2];//存放温度数据
uchartemp[7];//存放分解的7个ASCII码温度数据
uchartflag;
voidDs18b20Delay(uintk);
voidDs18b20InputInitial(void);//设置端口为输入
voidDs18b20OutputInitial(void);//设置端口为输出
ucharDs18b20Initial(void);
voidDs18b20Write(ucharinfor);
ucharDs18b20Read(void);
voidTemp_test(void);//温度读取函数
voidTemp_Conversion(void);
//时钟频率为32M
voidDs18b20Delay(uintk)
{
/*uinti,j;
for(i=0;ifor(j=0;j<2;j++);*/
MicroWait(k);
}
voidDs18b20InputInitial(void)//设置端口为输入
{
P0DIR&=0xbf;
}
voidDs18b20OutputInitial(void)//设置端口为输出
{
P0DIR|=0x40;
}
//ds18b20初始化
//初始化成功返回0x00,失败返回0x01
ucharDs18b20Initial(void)
{
ucharStatus=0x00;
uintCONT_1=0;
ucharFlag_1=ON;//读取是否成功的标志位
Ds18b20OutputInitial();//P0_6设置为输出模式
Ds18b20Data=1;//拉高总线
Ds18b20Delay(260);
Ds18b20Data=0;//拉低总线
Ds18b20Delay(750);
Ds18b20Data=1;//拉高总线
Ds18b20InputInitial();//P0_6设置为输入模式
while((Ds18b20Data!
=0)&&(Flag_1==ON))//等待ds18b20响应,具有防止超时功能
{//等待约60ms左右
CONT_1++;
Ds18b20Delay(10);
if(CONT_1>8000)Flag_1=OFF;
Status=Ds18b20Data;
}
Ds18b20OutputInitial();//P0_6设置为输出模式
Ds18b20Data=1;//拉高总线
Ds18b20Delay(100);
returnStatus;
}
//主机往Ds18b20写数据
voidDs18b20Write(ucharinfor)
{
uinti;
Ds18b20OutputInitial();//P0_6设置为输出模式
//发送一个字节
for(i=0;i<8;i++)
{
//发送一位
if((infor&0x01))
{
Ds18b20Data=0;
Ds18b20Delay(6);
Ds18b20Da