您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 室内外环境监测报警系统设计报告
1太原工业学院大学生科技创新室内外环境监测报警系统设计报告系部名称:电子工程系项目名称:室内外环境监测报警系统指导教师:陆锋申请者:冯国栋年级专业:11级电子信息工程申请日期:2013年11月24日联系电话:153885139262一、项目主要内容本项目将利用单片机与传感器等电子器件,设计一款实用方便的室内外环境监测报警系统。设计分为两个模块,室内模块和室外模块。室内模块主要功能是:测量室内温度和湿度、火灾监测报警、烟雾(或有害气体)监测报警;室外模块的主要功能是:测量室外温湿度。两个模块可以通过无线(采用ZigBee)连接,单片机将收集的数据进行处理,将温度、湿度及室内外温差显示在LCD显示器上;当出现火情、有害气体泄漏时,蜂鸣器用不同频率的响声分别对各种情况进行预警。二、项目主要创新1.设计的室内外环境监测报警系统灵巧、简便。2.将日常生活中需要的几种监测报警系统进行统一的整合。最主要的是设计了温湿检测、火灾监测、烟雾及有害气体监测报警。3.可以用我们设计的系统作为控制系统,外接风扇、水雾喷洒或换气系统。根据温度变化调节风扇、根据湿度喷洒水雾或根据空气质量开关换气系统。4.使用了ZigBee近距离无线组网通讯技术。三、硬件电路设计硬件电路包括室内模块和室外模块。室内模块相当于协调器,使用了STM32和CC2530两款芯片,主要用于检测室内温湿度并显示、监测火灾、有毒气体以及报警装置、接收室外温湿信息并显示、控制3继电器等。室外模块相当与终端设备,使用CC2530芯片,主要用于检测室外或其他地方温湿参数,并把这些参数无线发射到室内模块进行显示。下面是主要的硬件设计。1.STM32核心板电路图2.CC2530核心板电路图43.电源电路设计ASM117-3.3是5V转3.3V芯片4.DS18B20电路设计5.DHT11电路设计56.火灾、烟雾监测电路设计烟雾、有害气体监测使用MQ_2,利用红外接受二极管监测是否有火灾发生。LM393是一种低功率失调电压双比较器,它类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端,两个输入端一个称为同向输入端,一个称为反相输入端。在比较两个电压时,任意一个输入端加一个固定电压作参考电压,另一端加一个待比较信号电压。7.LCD显示电路设计68.继电器电路设计9.按键电路10.CC2530串口通信电路设计7四、部分软件设计由于程序较长,这里提供部分程序。1.STM32主程序部分#includestm32f10x.h#includedelay.h#includesys.h#includeUSART.h#includeLCD.h#includeDHT11.h#includeDS18B20.h#includeMQ_2.h#includeIR.h#includeLED.h#includeBUZZER.h#includeKEY.h#includeRELAY.h#includeDisplay.hvoidDeal_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();8USARTx_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);9externvoidTemp_test(void);externvoidTemp_Conversion(void);externunsignedchartemp[7];externunsignedchartflag;#endif#includeiocc2530.h#includeOnBoard.h#defineuintunsignedint#defineucharunsignedchar#defineDs18b20DataP0_6//温度传感器引脚#defineON0x01//读取成功返回0x00,失败返回0x01#defineOFF0x00uchartemperature[2];//存放温度数据uchartemp[7];//存放分解的7个ASCII码温度数据uchartflag;voidDs18b20Delay(uintk);voidDs18b20InputInitial(void);//设置端口为输入voidDs18b20OutputInitial(void);//设置端口为输出ucharDs18b20Initial(void);voidDs18b20Write(ucharinfor);ucharDs18b20Read(void);voidTemp_test(void);//温度读取函数voidTemp_Conversion(void);//时钟频率为32MvoidDs18b20Delay(uintk){/*uinti,j;for(i=0;ik;i++)for(j=0;j2;j++);*/MicroWait(k);}voidDs18b20InputInitial(void)//设置端口为输入{10P0DIR&=0xbf;}voidDs18b20OutputInitial(void)//设置端口为输出{P0DIR|=0x40;}//ds18b20初始化//初始化成功返回0x00,失败返回0x01ucharDs18b20Initial(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_18000)Flag_1=OFF;Status=Ds18b20Data;}Ds18b20OutputInitial();//P0_6设置为输出模式Ds18b20Data=1;//拉高总线Ds18b20Delay(100);returnStatus;}//主机往Ds18b20写数据voidDs18b20Write(ucharinfor){uinti;Ds18b20OutputInitial();//P0_6设置为输出模式11//发送一个字节for(i=0;i8;i++){//发送一位if((infor&0x01)){Ds18b20Data=0;Ds18b20Delay(6);Ds18b20Data=1;Ds18b20Delay(50);}else{Ds18b20Data=0;Ds18b20Delay(50);Ds18b20Data=1;Ds18b20Delay(6);}infor=1;//移位}}//主机从Ds18b20读数据ucharDs18b20Read(void){ucharValue=0x00;uinti;Ds18b20OutputInitial();//P0_6设置为输出模式Ds18b20Data=1;//总线拉高,准备读数据Ds18b20Delay(10);for(i=0;i8;i++){Value=1;Ds18b20OutputInitial();//P0_6设置为输出模式Ds18b20Data=0;//拉低总线产生读信号Ds18b20Delay(3);Ds18b20Data=1;//释放总线准备读数据Ds18b20Delay(3);Ds18b20InputInitial();//P0_6设置为输入模式//等待读取数据if(Ds18b20Data==1)Value|=0x80;12Ds18b20Delay(15);}returnValue;}voidTemp_test(void)//温度读取函数{ucharV;Ds18b20Initial();//初始化Ds18b20Write(0xcc);//逃过ROMDs18b20Write(0x44);//温度转换命令Ds18b20Initial();Ds18b20Write(0xcc);//逃过ROMDs18b20Write(0xbe);//读DS1820温度暂存器命令temperature[0]=Ds18b20Read();temperature[1]=Ds18b20Read();V=temperature[1];V=8;V=V|temperature[0];if(V0x0fff){tflag=0;}else{tflag=1;}Ds18b20Initial();}voidTemp_Conversion(void){uchartemp_data_1,temp_data_2;uintTempDec;temp_data_1=temperature[1];temp_data_1&=0xf0;//取高4位13if(temp_data_1==0xf0)//判断是正温度还是负温度读数{//负温度读数求补,取反加1,判断低8位是否有进位if(temperature[0]==0){//有进位,高8位取反加1temperature[0]=~temperature[0]+1;temperature[1]=~temperature[1]+1;}else{//没进位,高8位不加1temperature[0]=~temperature[0]+1;temperature[1]=~temperature[1];}}//取高字节低4位(温度读数高4位),注意此时是12位精度temp_data_1=temperature[1]4;//取低字节高4位(温度读数低4位),注意此时是
本文标题:室内外环境监测报警系统设计报告
链接地址:https://www.777doc.com/doc-6408448 .html