我是一個在校本科生,在實驗室學習,前幾周根據老師的意思設計一個家庭智能消防系統,需要完成的基本功能分為檢測,GSM通訊電話短信報警,語音播報,水泵滅火等方面。雖然簡單,但是其中確實也遇到了一些困難,所以把我這個方案的整個思路分享給大家,希望對大家有所幫助。同時也歡迎大神提出我的錯誤之處,給與我新的指導,感激不盡。PS:電路,程全部在壓縮包里。芯片是STC89C52
智能報警撲救系統主要可以分為火災隱患檢測,火災發生自動報警,火災發生語音引導逃生,火災發生自動施雨撲救滅火,這四個基本功能。其中第一項火災隱患檢測用到了三個傳感器,溫度傳感器用于感應屋內不正常的熱源起到警示作用,煙霧氣體傳感器用于感應液化氣,天然氣等易燃氣體,當感應到屋內氣體濃度到達設定的閾值時,蜂鳴器會起到警示作用。火焰傳感器檢測到周圍有火焰出現時,即火災已經初步發生,系統馬上啟動報警功能,向設定好的人發短信及撥打電話,并且警報聲響,語音播報開始引導人們開始逃生,同時,由系統控制的水泵開始降雨撲火。由于火災發生時,家庭電源一般自動斷電,所以本套系統采用自給供電,可以避免火災發生造成電路損壞無法工作的情況發生。
接下來說一下每個模塊的簡單情況,
(1)溫度傳感器,用的是大眾化的DS18B20芯片,我用的模塊上只有三個接口,GND,VCC,DQ,DQ是數據傳送接口,只需要連接到單片機上的一個普通的引腳上就可以。因為之前在測試溫度的時候,只有模塊沒有看不到實際溫度,所以我接了一個四位數碼管來顯示溫度,我提供的程序只顯示兩位數,不精確到小數點后兩位,實際上我并不需要那么精確的溫度,而且這個模塊說實話,你想要的很精確的話,最好別用這么廉價的。這個模塊不難,說的就這么多。
(2)煙霧氣體傳感器,我當時為了找那個可以檢測煙霧的傳感器在淘寶上找了好久,一搜索總是彈出來一大堆,MQ-2,MQ-5之類的傳感器,之后我發現這類傳感器根本不能檢測到煙霧,只是檢測可燃氣體,后來找到離子煙霧傳感元件,但是很可惜只是有個元件,我懶得焊電路,就沒有用這個,現在用的是MQ-5,MQ-5傳感器有四個口,GND,VCC,DO,AO。DO是數字輸出,什么是數字輸出呢,就是只輸出0和1,連接到單片機上就可以判斷成高低電平很方便,缺點是不夠精確的控制,你可以調節它的精度來簡單的判斷,比如說你調節到中間,那么只有一它檢測到氣體濃度到達那個閾值后,DO就可以輸出1報警什么的(之后自己加一個響應),AO是模擬輸出,就是輸出模擬值,這個值可以通過PCF8591芯片進行DA模數轉換成具體的值,然后在程序里if這個值,來精確的控制,可以這樣說,假如把精度區間分成100,那么手動調節精度旋鈕只是粗略的判斷,你們用數模轉化值判斷的話就很精確了,比如87?等等根據需要。
(3)火焰傳感器,是一個可以檢測火焰的傳感器,一般是用作機器人眼睛尋找判斷熱源的,它的用法和MQ-5極其極其的相似,在這里我就不贅述了,其他的描述大家可以百度百科。
(4) 語音播報模塊,簡單通俗的說,就是一個錄音放音的模塊,因為只是簡單的項目,所以買了一個幾塊錢的可以錄音10S的,可以手動操作,上面有可供選擇的按鍵,錄音鍵,播放鍵,同時也有兩排引腳和兩個跳線帽可以控制不同的播放模式,循環播放還是怎么的,同時由直通模式,可以做喊話器,說實話還挺好玩的,編程控制就是接到單片機上通過引腳控制。
(5) 水泵模塊,這個小水泵也是淘寶上逛了好久才發現了,供電12V,想到火災發生時,電都斷了,怎么給他供電,所以就買了一個12V的可充電電池,同時用降壓模塊,可以把12V降到5V供單片機使用,這就已經解決了電源的問題。其次,因為水泵模塊沒法直接用單片機控制,所以用到了一個繼電器模塊,繼電器模塊的原理,相信高中都學過,而且網上一大推原理圖,一頭接單片機VCC,GND,io口,另一頭接12V電池正,水泵負極。
(6) GSM通信模塊是有難度的,以前也沒接觸過,剛開始淘寶店家發的資料也啥都不是,只有一堆指令還有一個軟件可以用,看的暈暈乎乎的,后來同樣在論壇發現了一個我可以用的程序,檢查之后發現還是不適合自己,所以只能自己辛苦的探索了,我用的是安可信A6的GSM通信模塊,想參考的同學首先你得有個這樣的板子不是,首先,你的確需要了解一堆指令,我這次項目用到的是打電話和發短信,發短信相關的指令有AT,AT+CMGF=1,AT+CSCS,AT+CMGS,電話相關的指令有AT+SNFS=0,ATD+86132222222222,因為這個是需要單片機的串口進行發送指令,GSM模塊才會響應的,所以單純的每次修改程序,下載測試,,肯定非常的麻煩,所以必須要用到串口助手軟件,在電腦直接連接到模塊,通過串口助手發送指令信息,測試功能,在經歷N多次失敗后,終于測試出了正確的指令及正確的指令發送順序 - while(i--)
- {
- if (sendCommand("AT\r\n", "", 500, 2) == Success);
- delay_ms(500);
- if (sendCommand("AT+CMGF=1\r\n", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand("AT+CSCS=\"GSM\"\r\n", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand("AT+CMGS=\"13592606142\"\r\n", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand("Fire is coming!!!", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand(send_buf, "", 500, 1) == Success);
- delay_ms(5000);
- }
- /******************打電話****************************/
- while(j--)
- {
- if (sendCommand("AT\r\n", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand("AT+SNFS=0\r\n", "", 500, 1) == Success);
- delay_ms(500);
- if (sendCommand("ATD+8613592606142\r\n", "", 500, 1) == Success);
- delay_ms(20000);
-
- while(1);
- }
復制代碼需要注意的事,因為我之前是找到的別人的代碼程序,但是對于我的板子并不適用,所以我修改了大量的代碼,但是幾乎保存了原來作者的風格,其中比如if (sendCommand("AT\r\n", "", 500, 1) == Success);我改動了延時,減少了指令發送次數,本來是10次,現在一次或者兩次,延時增加,并且取消了返回值(這樣子其實不好,但是我每次測試都是100%成功,反而加上成功返回值反而總是失敗,所以干脆不加了,就是引號里本來是OK,但是現在什么都沒有加,)曾經有一段時間我已經可以發送短信了,但是我要求發送三條,但是總是偷空減料的只有僅僅一條,精心的研程序,并沒有什么可以看到的錯誤,困惱了一天,又拿到串口上測試,用同樣的延時,結果可以看到,成功的次數并不多,但是可以發送,所以在想,到底有時可以發送有時不可以有時為什么?突然聯想到反應速度這個詞上,如果我連續發送的數據模塊其實反應不過來那豈不是就是發送不成功了嗎,馬上增加延時時間到十倍,結果很完美,很成功的發送,看著連續的短信發來,開心,(心疼話費一波)后來調試到之前延時的2.5倍發現剛好不會出現錯誤,要不然指令那么慢,家都燒完了,電話才打出去豈不是完蛋了哈哈。這個模塊功能很強大,當然現在我只是學會了使用淺顯的一層,之后還是要好好看看的,畢竟40多大洋呢,雖然不是自己的錢買的,嘿嘿。 我會把數據資料和程序單獨發過來的,大家可以互相交流,畢竟我也是一只正在努力的小菜鳥了啊,眼界太窄,希望前輩指教。
突然發現數據資料100多兆,不讓傳,所以上傳都百度云盤了 下載地址:
如果文件已經失效請聯系論壇管理員qq125739409更新鏈接,51黑論壇的每一個用戶分享的網盤內容都是有備份的.
http://pan.baidu.com/s/1hs6Bai4
源碼下載地址:
完整版程序.rar
(91.82 KB, 下載次數: 262)
2017-8-29 16:47 上傳
點擊文件名下載附件
|