摘要:高層建築越來越多,高樓大廈的消防預警系統就成為了現代高樓設計的重中之重。
一、項目場景
高層建築越來越多,高樓大廈的消防隱患就更加嚴峻,加之目前的消防救援車輛對高層的火災救援仍舊沒有很好的解決方案,因此大樓在發生火災后通常只能等待大火燃盡熄滅,造成的經濟損失,社會影響都比較嚴重。為了避免此類問題的發生,大樓的消防預警系統就成為了現代高樓設計的重中之重。
二、任務目標
某百層以上的摩天大樓即將完工,為提高大樓的安全性需要對大樓的消防設施進行配套。為配合噴淋及大樓報警裝置的使用,需要使用火焰傳感器對大樓內的明火進行提前預警。請使用火焰傳感器對明火信號進行監測,並將監測結果發送至上位等待對明火的進一步處理。
三、火焰傳感器介紹
火焰是由各種燃燒生成物、中間物、高溫氣體、碳氫物質以及無機物質為主體的高溫固體微粒構成的。火焰的熱輻射具有離散光譜的氣體輻射和連續光譜的固體輻射。
火焰傳感器檢測火焰主要依靠光譜中的特征波長的光線。
-
火焰傳感器類型
火焰傳感器檢測火焰主要依靠光譜中的特征波長的光線,根據不同特征的光線可將火焰傳感器分為遠紅外火焰傳感器和紫外火焰傳感器。
-
紅外接收管
火焰傳感器之所以能夠檢測火焰接受到紅外信號的原因是由於使用紅外接收頭做為火焰傳感器的眼睛。常見的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操作系統如何移植進項目?
項目如何對接華為雲平台?
歡迎留下你的想法~