【IoT美学】解决方案—智能建筑消防预警系统设计与实现
主要内容
项目场景说明
火焰传感器介绍
红外接收管
项目实现
一、项目场景
高层建筑越来越多,高楼大厦的消防隐患就更加严峻,加之目前的消防救援车辆对高层的火灾救援仍旧没有很好的解决方案,因此大楼在发生火灾后通常只能等待大火燃尽熄灭,造成的经济损失,社会影响都比较严重。为了避免此类问题的发生,大楼的消防预警系统就成为了现代高楼设计的重中之重。
二、任务目标
某百层以上的摩天大楼即将完工,为提高大楼的安全性需要对大楼的消防设施进行配套。为配合喷淋及大楼报警装置的使用,需要使用火焰传感器对大楼内的明火进行提前预警。请使用火焰传感器对明火信号进行监测,并将监测结果发送至上位等待对明火的进一步处理。
三、火焰传感器介绍
火焰是由各种燃烧生成物、中间物、高温气体、碳氢物质以及无机物质为主体的高温固体微粒构成的。火焰的热辐射具有离散光谱的气体辐射和连续光谱的固体辐射。
火焰传感器检测火焰主要依靠光谱中的特征波长的光线。
火焰传感器类型
火焰传感器检测火焰主要依靠光谱中的特征波长的光线,根据不同特征的光线可将火焰传感器分为远红外火焰传感器和紫外火焰传感器。
红外接收管
火焰传感器之所以能够检测火焰接受到红外信号的原因是由于使用红外接收头做为火焰传感器的眼睛。常见的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操作系统如何移植进项目?
项目如何对接华为云平台?
注:参考项目,记得在评论区回复:拯救小白
关于项目思考的问题,大家可以在评论区积极讨论!!!说不定会有额外大奖哦!
- 点赞
- 收藏
- 关注作者
评论(0)