STM32配合火焰传感器的火灾报警

实验材料

STM32F03(我这里用的是正点原子的战舰)
在这里插入图片描述
火焰传感器
在这里插入图片描述
还有个蜂鸣器,我这个开发板自带,也是可外接的

火焰传感器介绍

工作原理
传感器模块在环境火焰光谱或者光源达不到设定阈值时,DO 口输出低电平,当外界环境火焰光谱或者光源超过设定阈值时,模块 DO口输出高电平
引脚说明(这个传感器有三个引脚的也有两个引脚的)我这里介绍三个引脚的
在这里插入图片描述
原理图
在这里插入图片描述

实验测试

思路:我们可以根据工作原理加上蜂鸣器的配合,当有火焰靠近时,DO引脚输出的高电平,然后让蜂鸣器响。这样就能大致模仿火灾报警。

连线
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

配置蜂鸣器的模块(时钟、输出模式、引脚初始化)
我这里是让传感器的DO引脚接STM32的PA1引脚
fire.h

#include "stm32f10x.h"


#define GPIO_FIRE_RCC  RCC_APB2Periph_GPIOA
#define GPIO_FIRE_PORT GPIOA//选择GPIOA寄存器
#define GPIO_FIRE_PIN  GPIO_Pin_1 //引脚1


void FIRE_CONFIG(void	);

fire.c

#include "fire.h"
#include "stm32f10x.h"

void FIRE_CONFIG(void)
{
	
	GPIO_InitTypeDef GPIO_FIRE;
	
	/*配置时钟*/
		//RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
	RCC_APB2PeriphClockCmd(GPIO_FIRE_RCC,ENABLE);
	
	GPIO_FIRE.GPIO_Pin  = GPIO_FIRE_PIN;
	GPIO_FIRE.GPIO_Mode =  GPIO_Mode_IN_FLOATING;//浮空输入模式
	
	/*配置GPIO 输入*/
		//void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
	GPIO_Init(GPIO_FIRE_PORT,&GPIO_FIRE);
	
}


通过原理图我们查出蜂鸣器的输出引脚是PB8
在这里插入图片描述
在这里插入图片描述
配置蜂鸣器的模块(时钟、输出模式、引脚初始化)
beep.h

#include "stm32f10x.h"


#define GPIO_BEEP_RCC  RCC_APB2Periph_GPIOB
#define GPIO_BEEP_PORT GPIOB//选择GPIOB寄存器
#define GPIO_BEEP_PIN  GPIO_Pin_8 //引脚8


void BEEP_CONFIG(void);

beep.c

#include "beep.h"
#include "stm32f10x.h"


void BEEP_CONFIG(void)
{
	GPIO_InitTypeDef GPIO_BEEP;
	/*配置时钟*/
		//void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
	RCC_APB2PeriphClockCmd(GPIO_BEEP_RCC,ENABLE);
	GPIO_BEEP.GPIO_Mode  = GPIO_Mode_Out_PP;//推挽输出
	GPIO_BEEP.GPIO_Pin 	 = GPIO_BEEP_PIN;
	GPIO_BEEP.GPIO_Speed = GPIO_Speed_50MHz;
	
	/*配置GPIO 输出*/
		//void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
	GPIO_Init(GPIO_BEEP_PORT,&GPIO_BEEP);
	
	
	
}

main.c

#include "stm32f10x.h"
#include "fire.h"
#include "beep.h"


//毫秒级的延时
void delay_ms(u16 time){    
 
   u16 i=0;  
 
   while(time--){
 
      i=12000;  //自己定义
      while(i--) ;    
   }
}

int main(void)
{
	/*初始化火焰传感器*/
	FIRE_CONFIG();
	
	/*初始化蜂鸣器感器*/
	BEEP_CONFIG();
	GPIO_ResetBits(GPIO_BEEP_PORT,GPIO_BEEP_PIN);//一上电蜂鸣器不响
	
	//delay_ms(2000);
	
	
	while(1){
		/*如果检测到低电平则蜂鸣器报警*/
			//uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
		if(GPIO_ReadInputDataBit(GPIO_FIRE_PORT,GPIO_FIRE_PIN)){
			
				//void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
			GPIO_ResetBits(GPIO_BEEP_PORT,GPIO_BEEP_PIN);//否则就报警
		}else{
			
				//void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
			
			GPIO_SetBits(GPIO_BEEP_PORT,GPIO_BEEP_PIN);//没有检测到低电平蜂鸣器不响
			
			
		}
		
		
		
	}
	return 0;
}

如需要整个工程文件私聊

注意事项

火焰传感器对火焰敏感,对普通光也是有反应的,一般用作火焰报警灯用途;

传感器模块在环境火焰光谱或者光源达不到设定阈值时,DO 口输出高电平,当外界环境火焰光谱或者光源超过设定阈值时,模块 DO口输出低电平;

传感与火焰保持一定距离,以免高温损坏传感器,打火机测试距离为80cm,火焰越大,可响应的有效距离越远.

### 设计与编程基于STM32和数字火焰传感器火灾报警系统 #### 系统硬件组成 该系统的硬件部分主要包括STM32微控制器、数字火焰传感器以及用于报警提示的蜂鸣器。STM32作为核心处理器负责接收来自火焰传感器的数据并判断是否触发警报机制;而火焰传感器则用来感知周围环境中是否存在明火或高温源,其输出信号为数字形式便于直接接入MCU进行逻辑运算处理[^1]。 #### 软件架构说明 为了使整个装置具备良好的性能表现,在软件层面需构建一套完整的程序框架来支持各项功能需求: - **初始化配置** 开始运行前要完成对外设资源(如GPIO口、中断服务例程等)的基础设置工作,确保各组件间通信顺畅无阻。 - **数据采集流程** 定期读取由火焰探测元件传回的状态信息,并将其转换成可供后续分析使用的数值型变量表示法。 - **事件判定算法** 对获取到的结果实施条件匹配操作——当检测值超出预定义的安全范围时即刻激活应急措施并向外界发出警示通知。 - **反馈控制环节** 同步开启声光告警装置提醒相关人员注意险情发生位置以便采取相应行动减少损失程度。 ```c #include "stm32f0xx_hal.h" // 假定PA0连接着火焰传感器, PB5连接着蜂鸣器 #define FLAME_SENSOR_PIN GPIO_PIN_0 #define BUZZER_PIN GPIO_PIN_5 #define FLAME_GPIO_PORT GPIOA #define BEEP_GPIO_PORT GPIOB void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1){ if(HAL_GPIO_ReadPin(FLAME_GPIO_PORT, FLAME_SENSOR_PIN)){ // 如果检测到了火焰,则打开蜂鸣器报警 HAL_GPIO_WritePin(BEEP_GPIO_PORT, BUZZER_PIN, GPIO_PIN_SET); }else{ // 若未检测到任何异常状况就关闭声音警告 HAL_GPIO_WritePin(BEEP_GPIO_PORT, BUZZER_PIN, GPIO_PIN_RESET); } // 添加适当延时防止CPU占用过高影响其他任务执行效率 HAL_Delay(100); } } /** * @brief 初始化GPIO端口配置. */ static void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置PA0为输入模式 */ GPIO_InitStruct.Pin = FLAME_SENSOR_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); /* 设置PB5为推挽输出模式 */ GPIO_InitStruct.Pin = BUZZER_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB,&GPIO_InitStruct); } ``` 此段代码展示了如何利用C语言编写针对特定型号单片机平台的应用实例,具体来说就是围绕上述提到的关键要素展开论述并通过实际编码加以体现出来。值得注意的是这段示范仅作为一个基础版本供学习交流之用,在真实项目开发过程中还需要考虑更多细节方面的要求比如电源管理策略优化、抗干扰能力增强等问题[^2]。
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值