收藏 分销(赏)

室内外环境监测报警系统设计报告.doc

上传人:人****来 文档编号:4006674 上传时间:2024-07-24 格式:DOC 页数:17 大小:337.90KB 下载积分:8 金币
下载 相关 举报
室内外环境监测报警系统设计报告.doc_第1页
第1页 / 共17页
室内外环境监测报警系统设计报告.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
太原工业学院大学生科技创新 室内外环境监测报警系统 设计报告 系 部 名 称: 电子工程系 项 目 名 称: 室内外环境监测报警系统 指 导 教 师: 陆 锋 申 请 者: 冯国栋 年 级 专 业: 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" void Deal_With(u8,u8); void Deal_Temp(u8,u8); extern unsigned char TH, TL, RH, RL; extern unsigned char temp[7]; extern u8 RES; int main(void) { u8 ts = 0; u8 fs = 1; u8 mq = 0; u8 ir = 0; u8 h_norm = H_TEMP; u8 l_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) { case KVALUE1 : fs = Set_LCD(ts); break; case KVALUE2 : h_norm = Set_H_Param(ts,fs); break; case KVALUE3 : l_norm = Set_L_Param(ts,fs); break; case KVALUE4 : Reset_Instrument(ts); break; default : break; } switch(fs) { case 0 : break; case 1 : Display_Indoor(); break; case 2 : Display_Outdoor_1(); break; case 3 : Display_Outdoor_2(); break; case 4 : 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__ extern unsigned char Ds18b20Initial(void); extern void Temp_test(void); extern void Temp_Conversion(void); extern unsigned char temp[7]; extern unsigned char tflag; #endif #include "iocc2530.h" #include "OnBoard.h" #define uint unsigned int #define uchar unsigned char #define Ds18b20Data P0_6 //温度传感器引脚 #define ON 0x01 //读取成功返回0x00,失败返回0x01 #define OFF 0x00 uchar temperature[2]; //存放温度数据 uchar temp[7];//存放分解的7个ASCII码温度数据 uchar tflag; void Ds18b20Delay(uint k); void Ds18b20InputInitial(void);//设置端口为输入 void Ds18b20OutputInitial(void);//设置端口为输出 uchar Ds18b20Initial(void); void Ds18b20Write(uchar infor); uchar Ds18b20Read(void); void Temp_test(void); //温度读取函数 void Temp_Conversion(void); //时钟频率为32M void Ds18b20Delay(uint k) { /*uint i,j; for(i=0;i<k;i++) for(j=0;j<2;j++);*/ MicroWait(k); } void Ds18b20InputInitial(void)//设置端口为输入 { P0DIR &= 0xbf; } void Ds18b20OutputInitial(void)//设置端口为输出 { P0DIR |= 0x40; } //ds18b20初始化 //初始化成功返回0x00,失败返回0x01 uchar Ds18b20Initial(void) { uchar Status = 0x00; uint CONT_1 = 0; uchar Flag_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); return Status; } //主机往Ds18b20写数据 void Ds18b20Write(uchar infor) { uint i; Ds18b20OutputInitial();//P0_6设置为输出模式 //发送一个字节 for(i=0;i<8;i++) { //发送一位 if((infor & 0x01)) { Ds18b20Data = 0; Ds18b20Delay(6); Ds18b20Data = 1; Ds18b20Delay(50); } else { Ds18b20Data = 0; Ds18b20Delay(50); Ds18b20Data = 1; Ds18b20Delay(6); } infor >>= 1;//移位 } } //主机从Ds18b20读数据 uchar Ds18b20Read(void) { uchar Value = 0x00; uint i; Ds18b20OutputInitial();//P0_6设置为输出模式 Ds18b20Data = 1;//总线拉高,准备读数据 Ds18b20Delay(10); for(i=0;i<8;i++) { Value >>= 1; Ds18b20OutputInitial();//P0_6设置为输出模式 Ds18b20Data = 0;//拉低总线产生读信号 Ds18b20Delay(3); Ds18b20Data = 1;//释放总线准备读数据 Ds18b20Delay(3); Ds18b20InputInitial();//P0_6设置为输入模式 //等待读取数据 if(Ds18b20Data == 1) Value |= 0x80; Ds18b20Delay(15); } return Value; } void Temp_test(void) //温度读取函数 { uchar V; Ds18b20Initial();//初始化 Ds18b20Write(0xcc);//逃过 ROM Ds18b20Write(0x44);//温度转换命令 Ds18b20Initial(); Ds18b20Write(0xcc);//逃过 ROM Ds18b20Write(0xbe);//读DS1820温度暂存器命令 temperature[0] = Ds18b20Read(); temperature[1] = Ds18b20Read(); V = temperature[1]; V <<= 8; V = V | temperature[0]; if(V < 0x0fff) { tflag = 0; }else { tflag = 1; } Ds18b20Initial(); } void Temp_Conversion(void) { uchar temp_data_1,temp_data_2; uint TempDec; temp_data_1 = temperature[1]; temp_data_1 &= 0xf0;//取高4位 if (temp_data_1 == 0xf0)//判断是正温度还是负温度读数 { //负温度读数求补,取反加1,判断低8位是否有进位 if (temperature[0]==0) { //有进位,高8位取反加1 temperature[0] = ~temperature[0]+1; temperature[1] = ~temperature[1]+1; } else { //没进位,高8位不加1 temperature[0] = ~temperature[0]+1; temperature[1] = ~temperature[1]; } } //取高字节低4位(温度读数高4位),注意此时是12位精度 temp_data_1 = temperature[1] << 4; //取低字节高4位(温度读数低4位),注意此时是12位精度 temp_data_2 = temperature[0] >> 4; //组合成完整数据 temp_data_1 = temp_data_1 | temp_data_2; temp[0] = temp_data_1/100+0x30;//取百位转换为ASCII码 temp[1] = (temp_data_1%100)/10+0x30;//取十位转换为ASCII码 temp[2] = (temp_data_1%100)%10+0x30;//取个位转换为ASCII码 temperature[0] &= 0x0f;//取小数位转换为ASCII码 //625=0.0625*10000,表示小数部分,扩大1万倍,方便显示 TempDec = temperature[0]*625; temp[3] = TempDec/1000+0x30;//取小数十分位转换为ASCII码 temp[4] = (TempDec%1000)/100+0x30;//取小数百分位转换为ASCII码 temp[5] = ((TempDec%1000)%100)/10+0x30;//取小数千分位转换为ASCII码 temp[6] = ((TempDec%1000)%100)%10+0x30;//取小数万分位转换为ASCII码 } 五、 项目总结 1.使用Altium Desicner软件,完成了基于STM32F103VBT6最小系统的核心电路板的设计、基于CC2530的核心板电路设计、室内监测模块电路设计、室外监测模块电路设计,并制作了电路板、完成了电路板焊接,通过了硬件测试。 2.完成了软件编程。分别使用了Keil和IAR软件完成了对STM32和CC2530的软件设计,并完成了软件测试。 3.使用了Zigbee 低功耗个域网协议,实现了无线数据联网、传递。 4.结合软件和硬件进行系统测试,分别进行了火灾监测报警、烟雾监测报警、有害气体报警监测、联网收集室内外温湿度测试,基本达到了设计要求。 通过本次创新设计,我掌握了很多知识,动手实践能力有了很大的提高,为我以后的学习、工作打下了良好的基础。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服