解決方案|智慧消防預警系統突破高層樓房限制
摘要:高層建築越來越多,高樓大廈的消防預警系統就成為了現代高樓設計的重中之重。
一、專案場景
高層建築越來越多,高樓大廈的消防隱患就更加嚴峻,加之目前的消防救援車輛對高層的火災救援仍舊沒有很好的解決方案,因此大樓在發生火災後通常只能等待大火燃盡熄滅,造成的經濟損失,社會影響都比較嚴重。為了避免此類問題的發生,大樓的消防預警系統就成為了現代高樓設計的重中之重。
二、任務目標
某百層以上的摩天大樓即將完工,為提高大樓的安全性需要對大樓的消防設施進行配套。為配合噴淋及大樓報警裝置的使用,需要使用火焰感測器對大樓內的明火進行提前預警。請使用火焰感測器對明火訊號進行監測,並將監測結果傳送至上位等待對明火的進一步處理。
三、火焰感測器介紹
火焰是由各種燃燒生成物、中間物、高溫氣體、碳氫物質以及無機物質為主體的高溫固體微粒構成的。火焰的熱輻射具有離散光譜的氣體輻射和連續光譜的固體輻射。
火焰感測器檢測火焰主要依靠光譜中的特徵波長的光線。
-
火焰感測器型別
火焰感測器檢測火焰主要依靠光譜中的特徵波長的光線,根據不同特徵的光線可將火焰感測器分為遠紅外火焰感測器和紫外火焰感測器。
-
紅外接收管
火焰感測器之所以能夠檢測火焰接受到紅外訊號的原因是由於使用紅外接收頭做為火焰感測器的眼睛。常見的940nm紅外接收管如圖。
遠紅外火焰感測器可以用來探測火源或其它一些波長在700奈米~1100奈米範圍內的熱源。
-
紅外接收管的特徵與原理
紅外線接收管是將紅外線光訊號變成電訊號的半導體器件,它的核心部件是一個特殊材料的PN接面,和普通二極體相比,在結構上採取了大的改變,紅外線接收管為了更多更大面積的接受入射光線,PN接面面積儘量做的比較大,電極面積儘量減小,而且PN接面的結深很淺,一般小於1微米。
紅外線接收二極體是在反向電壓作用之下工作的。沒有光照時,反向電流很小(一般小於0.1微安),稱為暗電流。當有紅外線光照時,攜帶能量的紅外線光子進入PN接面後,把能量傳給共價鍵上的束縛電子,使部分電子掙脫共價鍵,從而產生電子——空穴對(簡稱:光生載流子)。
四、專案分析
本專案設計中通過940nm的紅外接收管經過運算放大器採集火焰紅外資訊,並將採集資訊列印在PC上,定時進行更新,硬體結構主要由STM32F407、火焰感測器、串列埠和LCD螢幕組成。
五、專案硬體圖
火焰感測器原理圖
六、火焰感測器程式邏輯
七、專案實現
主函式模組
/********************************************************************************************* * 標頭檔案 *********************************************************************************************/ #include "stm32f4xx.h" #include "delay.h" #include "led.h" #include "key.h" #include "lcd.h" #include "usart.h" #include "Flame.h" /********************************************************************************************* * 名稱:main() * 功能:火焰感測器驅動邏輯程式碼 * 引數:無 * 返回:無 * 修改: *********************************************************************************************/ void main(void) { unsigned char led_status = 0; //儲存火焰狀態變數 delay_init(168); //延時初始化 led_init(); //初始化LED控制管腳 key_init(); //初始化按鍵檢測管腳 lcd_init(FLAME1); //LCD初始化 usart_init(115200); //串列埠初始化 flame_init(); //火焰感測器初始化 while(1){ //迴圈體 if(get_flame_status() == 1){ //檢測到火焰 led_status = ~led_status; //LED燈的狀態反轉 printf("fire!\r\n"); //串列埠列印提示資訊 //LCD更新資料 LCDDrawFnt16(4+30,30+20*7,4,320," 檢測到火焰",0x0000,0xffff); } else{ //沒有檢測到火焰 led_status = 0; //熄滅LED燈 printf("no fire!\r\n"); //串列埠列印提示資訊 //LCD更新資料 LCDDrawFnt16(4+30,30+20*7,4,320,"未檢測到火焰",0x0000,0xffff); } if(led_status == 0) //根據LED燈的狀態控制LED燈的變化 led_control(0); //關閉LED燈 else led_control(D3|D4); //點亮LED燈 delay_ms(1000); //延時1秒 } }
火焰感測器初始化
void flame_init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定義一個GPIO_InitTypeDef型別的結構體 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //開啟火焰相關的GPIO外設時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //選擇要控制的GPIO引腳 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //設定引腳的輸出型別為推輓 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //設定引腳模式為輸入模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //設定引腳為下拉模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //設定引腳速率為2MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO配置 }
獲取火焰感測器狀態
unsigned char get_flame_status(void) { if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10)) return 1; else return 0; }
八、專案思考
火焰感測器檢測火焰訊號的原理是什麼?
火焰感測器在工業上有哪些應用?
LiteOS作業系統如何移植進專案?
專案如何對接華為雲平臺?
歡迎留下你的想法~
點選關注,第一時間瞭解華為雲新鮮技