參考論文-基于單片機(jī)的可燃?xì)怏w報(bào)警器_第1頁
參考論文-基于單片機(jī)的可燃?xì)怏w報(bào)警器_第2頁
參考論文-基于單片機(jī)的可燃?xì)怏w報(bào)警器_第3頁
參考論文-基于單片機(jī)的可燃?xì)怏w報(bào)警器_第4頁
參考論文-基于單片機(jī)的可燃?xì)怏w報(bào)警器_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

由可燃性氣體傳感器對待測氣體(液體)進(jìn)行檢測,轉(zhuǎn)換成輸出電壓信號,以單片機(jī)為核心的控制、聲光報(bào)警電路發(fā)送短信以及顯示、排氣電路。測試儀進(jìn)行氣體檢測的基本步驟是單片機(jī)先采集MQ-2傳感器的響應(yīng)信號,然后進(jìn)行轉(zhuǎn)換,儲存在數(shù)據(jù)儲存器中,最后單片機(jī)通過特定的算法進(jìn)行氣體濃度的識別,同時(shí)將分析的值與設(shè)定值進(jìn)行對比,對超出設(shè)定值進(jìn)行報(bào)警發(fā)送短信,并且將結(jié)果輸出到LED顯示屏幕上。本系統(tǒng)由煙霧傳感器,單片機(jī),聲音報(bào)警,GSM短信,排氣扇以及LCD顯示等部分組成,在這次的整體設(shè)計(jì)中詳細(xì)涉及下面幾個(gè)方面,其原理框圖如圖3-1所示:電源電路單片機(jī)控制電路電源電路單片機(jī)控制電路液晶顯示電路液晶顯示電路晶振電路煙霧檢測電路晶振電路煙霧檢測電路復(fù)位電路復(fù)位電路聲光報(bào)警電路聲光報(bào)警電路按鍵電路按鍵電路GSM模塊電路風(fēng)扇GSM模塊電路風(fēng)扇電路系統(tǒng)總設(shè)計(jì)框圖3.2硬件設(shè)計(jì)外圍電路3.2.1晶振電路、復(fù)位電路設(shè)計(jì)單片機(jī)工作的過程中各指令的微操作在時(shí)間上有嚴(yán)格的次序,這種微操作的時(shí)間次序稱作時(shí)序。單片機(jī)的時(shí)鐘信號用來為單片機(jī)芯片內(nèi)部各種微操作提供時(shí)間基準(zhǔn)。STC89C52的時(shí)鐘產(chǎn)生方式有兩種,一種是內(nèi)部時(shí)鐘方式,一種是外部時(shí)鐘方式。內(nèi)部時(shí)鐘方式即在單片機(jī)的外部接一個(gè)晶振電路與單片機(jī)里面的振蕩器組合作用產(chǎn)生時(shí)鐘脈沖信號。外部時(shí)鐘方式是把外部已有的時(shí)鐘信號引入到單片機(jī)內(nèi),此方式常用于多片STC89C52單片機(jī)同時(shí)工作,以便于各單片機(jī)的同步,一般要求外部信號高電平的持續(xù)時(shí)間大于20ns,且為頻率低于12MHz的方波。對于CHMOS工藝的單片機(jī),外部時(shí)鐘要由XTAL1端引入,而XTAL2端應(yīng)懸空。本系統(tǒng)中為了盡量降低功耗的原則,采用了內(nèi)部時(shí)鐘方式。本設(shè)計(jì)中復(fù)位電路采用的是開關(guān)復(fù)位電路,開關(guān)S9未按下是上電復(fù)位電路,上電復(fù)位電路在上電的瞬間,由于電容上的電壓不能突變,電容處于充電(導(dǎo)通)狀態(tài),故RST腳的電壓與VCC相同。隨著電容的充電,RST腳上的電壓才慢慢下降。選擇合理的充電常數(shù),就能保證在開關(guān)按下時(shí)是RST端有兩個(gè)機(jī)器周期以上的高電平從而使STC89C51內(nèi)部復(fù)位。開關(guān)按下時(shí)是按鍵手動復(fù)位電路,RST端通過電阻與VCC電源接通,通過電阻的分壓就可以實(shí)現(xiàn)單片機(jī)的復(fù)位。如圖3-3所示:3.2.2報(bào)警設(shè)計(jì)在單片機(jī)應(yīng)用系統(tǒng)中,一般的工作狀態(tài)可以通過指示燈或數(shù)碼顯示來指示,供操作人員借鑒。但針對某些特定狀態(tài),例如系統(tǒng)檢測到的錯(cuò)誤狀態(tài)等,為了使操作人員不小心忽視,及時(shí)采取措施,必須還需要有某種更能引人注意,提起警覺的報(bào)警信號。這種報(bào)警信號一般有閃光報(bào)警、鳴音報(bào)警和語音報(bào)警三種類型。其中,前兩種報(bào)警裝置因硬件結(jié)構(gòu)簡單,軟件編程方便,往往在單片機(jī)應(yīng)用系統(tǒng)中使用。但語音報(bào)警雖然警報(bào)信息較直接,并且硬件成本高,結(jié)構(gòu)相對復(fù)雜,軟件量也增加。閃光報(bào)警實(shí)現(xiàn)單頻音報(bào)警的接口電路比較簡單,只要當(dāng)值高于警報(bào)值的時(shí)候給一個(gè)低電頻就能驅(qū)動二極管發(fā)光,簡單易懂。系統(tǒng)采用聲光報(bào)警,二極管指示燈點(diǎn)亮,蜂鳴器出聲。沒有超過上限值時(shí)綠燈點(diǎn)亮。電路圖如下所示:3.2.2風(fēng)扇設(shè)計(jì)當(dāng)氣體濃度超過上限值之后,啟動風(fēng)扇,減小氣體的濃度。在未報(bào)警的狀態(tài)下風(fēng)扇處于靜止?fàn)顟B(tài),超過上限之后才會啟動。電路部分如下圖所示:3.2.3按鍵設(shè)計(jì)在設(shè)計(jì)中可以通過按鍵調(diào)節(jié)上限值的大小,k2是上限值加,k3是上限值減。上下值的加減是有掉電存儲功能的,設(shè)置的數(shù)值重新上電之后可以保留之前的數(shù)據(jù)。電路部分如下圖所示:四、系統(tǒng)軟件設(shè)計(jì)4.1主程序流程圖主程序?qū)崿F(xiàn)的功能:與硬件相結(jié)合實(shí)現(xiàn)便攜式氣體濃度檢測儀的各個(gè)功能主要是檢測與顯示,數(shù)據(jù)存儲功能子函數(shù)的調(diào)用。流程圖圖4-1所示:首先開啟啟動按鈕,啟動單片機(jī)和顯示器,同時(shí)對單片機(jī)內(nèi)部進(jìn)行初始化,緊接著初始化顯示屏,初始化完畢后顯示開機(jī)畫面顯示主菜單。初始化初始化是否觸發(fā)報(bào)警采集MQ-2檢測到的數(shù)據(jù)按鍵設(shè)置警報(bào)值開始NY圖3.1.1發(fā)送端主程序流程圖結(jié)束聲光報(bào)警,發(fā)送報(bào)警短信,打開排氣扇按鍵是否按下Y五、本設(shè)計(jì)總結(jié)與展望此檢測儀會向更穩(wěn)定,更可靠,更快捷等要求發(fā)展。工廠,企業(yè)到居民家庭,可燃性氣體泄露的檢測,對居民的人身和財(cái)產(chǎn)安全都十分重要且必不可少的??扇夹詺怏w檢測儀不僅能實(shí)現(xiàn)聲光報(bào)警,能通過短信告知在外工作的人,或工廠的管理者,將安全隱患扼殺在萌芽狀態(tài)?,F(xiàn)如今,由于人們安全意識增強(qiáng),對環(huán)境安全性和生活適性要求提高。單片機(jī)具有受集成限制,片內(nèi)儲存量較小,可靠性好,擴(kuò)展簡單,控制功能強(qiáng)等特點(diǎn),所以,基于單片機(jī)的可燃性氣體檢測儀的研究和開發(fā)生產(chǎn)具有十分廣泛的現(xiàn)實(shí)市場和潛在的市場需求。針對目前的現(xiàn)狀,該系統(tǒng)設(shè)計(jì)遵循體積小,質(zhì)量輕,性價(jià)比高的原則。軟件是C語言編寫的,具有很好的可控性、模塊化和移植性。本系統(tǒng)的主要模塊為傳感檢測、A/D轉(zhuǎn)換、液晶顯示、GSM模塊。通過本次電子信息技術(shù)比賽,我加深了很多在大學(xué)課本上學(xué)到的知識,并且用于實(shí)踐,相信在以后的工作中,這次設(shè)計(jì)是我寶貴的財(cái)富。附錄:原理圖:PCB圖:程序:#include<REGX52.H>#include<intrins.h>#include"LCD1602.h"#include"ADC0832.h"#include"eeprom52.h"#defineuintunsignedint#defineucharunsignedcharsbitkey1=P3^4; //按鍵sbitkey2=P3^5; sbitbeep=P1^7; //蜂鳴器sbitFan=P3^6; //風(fēng)扇bitkey1_flag=0; //按鍵標(biāo)志位 bitkey2_flag=0;sbitLED0=P1^6; //指示燈sbitLED1=P1^4; ucharsec=0;sec1=0; //長按標(biāo)志位uchars0=0,temp,temp1,ms;//濃度值,定時(shí)時(shí)間,濃度上限uintValue=0;uinttemp_h;bitSend_flag=0;bitflag=1;//>GSM相關(guān)變量ucharphone[11]=;//手機(jī)號數(shù)組//>Uart1AndGSMDefinitionunsignedcharxdataUart1_Buff[50];//串口1緩沖數(shù)組unsignedcharUart1_Count=0;//串口1累加變量unsignedcharQuest_flag=1; //初始化標(biāo)志位unsignedintGSM_Send_Time=0; //GSM延時(shí)變量unsignedcharGSM_Num=0; //發(fā)送指令變量unsignedcharGSM_Send=0; //發(fā)送標(biāo)志位unsignedcharGSM_Send_Num=0;//發(fā)送具體短信內(nèi)容變量bitmemory_flag=0;voiddelay(uintT) //延時(shí)程序{ while(T--);}voidmemory() //掉電存儲{unsignedcharq=0; if(memory_flag) { memory_flag=0; SectorErase(0x2000); byte_write(0x2000,temp_h/256); byte_write(0x2001,temp_h%256); for(q=0;q<11;q++) { byte_write(0x2100+q,phone[q]); } }}voidread_memory() //上電讀存儲{unsignedcharq=0; temp_h=byte_read(0x2000)*256+byte_read(0x2001);for(q=0;q<11;q++){phone[q]=byte_read(0x2100+q);} if(temp_h>255||temp_h<0) { temp_h=20; }}voidtimer_init() //定時(shí)器初始化{ TMOD=0x01; //定時(shí)器0,方式1 TH0=0x3c; //初值50ms TL0=0XB0; TR0=1; ET0=1; EA=1;}voiddisplay() //顯示函數(shù){ LCD1602_write(0,0x80); LCD1602_writebyte("NOWGAS:"); if(temp/100==0) { LCD1602_writebyte(""); if(temp%100/10==0) { LCD1602_writebyte(""); } else { LCD1602_write(1,'0'+temp%100/10); } LCD1602_write(1,'0'+temp%10); LCD1602_writebyte("PPM"); } else { LCD1602_write(1,'0'+temp/100); LCD1602_write(1,'0'+temp%100/10); LCD1602_write(1,'0'+temp%10); LCD1602_writebyte("PPM"); } LCD1602_write(0,0xc0); LCD1602_writebyte("WARNING:"); if(temp_h/100==0) { LCD1602_writebyte(""); if(temp_h%100/10==0) { LCD1602_writebyte(""); } else { LCD1602_write(1,'0'+temp_h%100/10); } LCD1602_write(1,'0'+temp_h%10); LCD1602_writebyte("PPM"); } else { LCD1602_write(1,'0'+temp_h/100); LCD1602_write(1,'0'+temp_h%100/10); LCD1602_write(1,'0'+temp_h%10); LCD1602_writebyte("PPM"); }}/*按鍵操作的方式多種多樣,在學(xué)校里學(xué)到的普遍都是判斷按鍵按下,延時(shí)等待一下再次判斷按鍵按下,進(jìn)行消抖,然后確定按鍵按下之后執(zhí)行所要執(zhí)行的,再死循環(huán)等待按鍵釋放。這樣寫按鍵自然也行,但是有一個(gè)弊端,就是按鍵如果不松開,程序就會一直卡在那里,所以這里我換了一種書寫方式,標(biāo)志位的方式>按鍵松開的時(shí)候,將標(biāo)志位置一,按鍵按下之后,不進(jìn)行延時(shí)消抖再次判斷,而是判斷標(biāo)志位是否為1,如果是1,就說明在你按下之前按鍵是松開的,將標(biāo)志位清零,執(zhí)行一下所要執(zhí)行的操作,下面就算你按鍵是一直按著不松開的,因?yàn)闃?biāo)志位是0,他也不會再次執(zhí)行所要執(zhí)行的操作了,只有當(dāng)按鍵松開之后將標(biāo)志位置一。*/voidkeyscan() //按鍵掃描{ if(!key1) //按鍵按下 { if(key1_flag)//按鍵標(biāo)志為為1 { key1_flag=0; if(temp_h<255)temp_h++; } if(sec==0) //當(dāng)這個(gè)數(shù)據(jù)為0的時(shí)候說明按鍵一直處于按下的狀態(tài),也就是按鍵長按的效果 { key1_flag=0; if(temp_h<255)temp_h++; } memory_flag=1; //執(zhí)行按鍵操作之后將數(shù)據(jù)寫到存儲部分 } else { key1_flag=1;//按鍵沒有按下的時(shí)候這個(gè)數(shù)據(jù)是2S sec=2; } if(!key2) { if(key2_flag) { key2_flag=0; if(temp_h>0)temp_h--; } if(sec1==0) { key2_flag=0; if(temp_h>0)temp_h--; } memory_flag=1; } else { key2_flag=1; sec1=2; }}voidTimer2_Uart(){ T2CON=0x34; RCAP2H=0xFF; RCAP2L=0xDC; TH2=0xFF; TL2=0xDC; TR2=1; SCON=0x50; ES=1; EA=1;}voidUart1Data(unsignedchardat)//發(fā)送一個(gè)字節(jié){ SBUF=dat; while(!TI); TI=0;}voidUartData_Byte(char*s)//發(fā)送一串?dāng)?shù)據(jù){while(*s!='\0'){Uart1Data(*s++);}}voidGSM_Init2(){unsignedcharG_Tab[20]=0;if(Quest_flag==1)//開始查詢GSM狀態(tài)//此時(shí)還沒有初始化完成,首先,先初始化,發(fā)AT,能夠響應(yīng)上,關(guān)回顯,設(shè)置短信處理方式 { switch(GSM_Num) { case0:UartData_Byte("AT\r\n");break;//AT case1:UartData_Byte("ATE1\r\n");break;//關(guān)回顯 case2:UartData_Byte("AT+CNMI=3,2,2,0,1\r\n");break;//設(shè)置 case3:UartData_Byte("AT+CMGF=1\r\n");break;//配制 case4:UartData_Byte("AT+COPS?\r\n");break;//查詢網(wǎng)絡(luò) case5:Quest_flag=0;GSM_Num=0;GSM_Send=0;GSM_Send_Num=0;break;//初始化徹底結(jié)束 } GSM_Send_Time=30; } else { GSM_Send_Time=20; if(GSM_Send==1)//發(fā)送短信標(biāo)志 { if(GSM_Send_Num==0)//Num是短信編號,就是發(fā)送哪條短信,這個(gè)是返回SetEnd的 { switch(GSM_Num) { case0:UartData_Byte("AT+CMGF=1\r\n");break; case1:UartData_Byte("AT+CMGS=\""); Uart1Data(phone[0]); Uart1Data(phone[1]); Uart1Data(phone[2]); Uart1Data(phone[3]); Uart1Data(phone[4]); Uart1Data(phone[5]); Uart1Data(phone[6]); Uart1Data(phone[7]); Uart1Data(phone[8]); Uart1Data(phone[9]); Uart1Data(phone[10]); UartData_Byte("\"\r\n");break;//AT+CMGS= case2:UartData_Byte("SetEnd");GSM_Num=3;break; case3:G_Tab[0]=0x1a; Uart1Data(G_Tab[0]);break; case4:GSM_Num=0;GSM_Send=0;break; } } elseif(GSM_Send_Num==1) { switch(GSM_Num) { case0:UartData_Byte("AT+CMGF=0\r\n");break; case1:UartData_Byte("AT+CMGS=41\r\n");break; case2:UartData_Byte("0011000D9168");G_Tab[0]=phone[1]; G_Tab[1]=phone[0]; G_Tab[2]=phone[3]; G_Tab[3]=phone[2]; G_Tab[4]=phone[5]; G_Tab[5]=phone[4]; G_Tab[6]=phone[7]; G_Tab[7]=phone[6]; G_Tab[8]=phone[9]; G_Tab[9]=phone[8]; G_Tab[10]='F'; G_Tab[11]=phone[10]; UartData_Byte(G_Tab); UartData_Byte("0008A91A");//末尾兩位數(shù)是發(fā)送的短信長度,每個(gè)漢字占兩個(gè)字節(jié)(18個(gè)字節(jié)轉(zhuǎn)16進(jìn)制為12)UartData_Byte("67095BB36C144F536D535EA68FC79AD8FF0C8BF76CE8610FFF01");//有害氣體濃度過高,請注意!GSM_Num=3; break; case3:G_Tab[0]=0x1a; Uart1Data(G_Tab[0]);break; case4: UartData_Byte("AT+CMGF=1\r\n"); delay(666);delay(666); GSM_Send=0; GSM_Num=0; break; } } } elseGSM_Num=0; }}voidSend_message(){ if(Send_flag==1)//短信發(fā)送的標(biāo)志位為1 { if(GSM_Send==0&&GSM_Num==0)//在綁定手機(jī)的狀態(tài)下觸發(fā)報(bào)警會導(dǎo)致發(fā)送綁定成功的 { //短信會被覆蓋,為了避免這種情況,在沒有發(fā)送短信的狀態(tài)下才開始執(zhí)行報(bào)警短信的發(fā)送 GSM_Send=1; //打開短信發(fā)送的開關(guān) GSM_Send_Num=1; //確定短信發(fā)送的內(nèi)容 Send_flag=0; } }}voidpolice() //超限報(bào)警{ if(temp>=temp_h) { if(s0) beep=0; elsebeep=1; Fan=0; if(flag)//短信的標(biāo)志位 { flag=0; //保證在報(bào)警狀態(tài)下短信只發(fā)送一條 Send_flag=1;//短信發(fā)送的標(biāo)志位 } LED0=0; LED1=1; } else { beep=1; Fan=1; flag=1; LED0=1; LED1=0; }}voidmain() //主函數(shù){ ucharnum=0; temp_h=20; //上限賦初值 LCD1602_cls(); //液晶1602初始化 timer_init(); //定時(shí)器初始化 Timer2_Uart(); read_memory(); //讀存儲數(shù)據(jù) num=0; while(1) { if(num<80) { Value+=A_D();//將得到的AD值進(jìn)行累加 num++; } else { num=0; temp=temp*0.5+(Value/80)*0.5;//累加之后的AD值在經(jīng)過均值處理會得到一個(gè)更穩(wěn)定的數(shù)據(jù) //這里是處理AD的得到的濃度值,將已經(jīng)測得的濃度值和新取得的 //濃度值各取百分之50都是為了保證數(shù)據(jù)的穩(wěn)定性 Value=0; } memory(); display(); police(); Send_message(); if(GSM_Send_Time==0)GSM_Init2(); }}voidtimer()interrupt1{ TH0=0x3c;//定時(shí)器定時(shí)50ms TL0=0XB0; ms++; if(GSM_Send_Time!=0)GSM_Send_Time--; keyscan(); if(ms%10==0)//每500ms執(zhí)行一次 { s0=~s0; } if(ms%20==0)//每秒執(zhí)行一次 { if(sec!=0)sec--;//數(shù)據(jù)每秒減一 if(sec1!=0)sec1--; }}voidUart1()interrupt4{uchari=0;if(RI){ RI=0; Uart1_Buff[Uart1_Count]=SBUF; Uart1_Count=(Uart1_Count+1)%50; Uart1_Buff[Uart1_Count]=0; if(Quest_flag==1)//說明此時(shí)在初始化 { if(GSM_Num==0||GSM_Num==1||GSM_Num==2||GSM_Num==3)//這里都是返回的OK { if(Uart1_Count>=4&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='K'&&Uart1_Buff[Uart1_Count-4]=='O') { GSM_Num++; GSM_Send_Time=10; } } elseif(GSM_Num==4)//+COPS:0,0,"CHINAMOBILE" {// if(Uart1_Count>=25&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='"'&&Uart1_Buff[Uart1_Count-4]=='E'&&Uart1_Buff[Uart1_Count-11]=='A') if(Uart1_Count>=4&&Uart1_Buff[Uart1_Count-1]=='\n'&&Uart1_Buff[Uart1_Count-2]=='\r'&&Uart1_Buff[Uart1_Count-3]=='K'&&Uart1_Buff[Uart1_Count-4]=='O') { GSM_Num++; GSM_Send_Time=10; } } } else {

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論