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

实验材料

STM32F03(我这里用的是正点原子的战舰)
STM32配合火焰传感器的火灾报警_第1张图片
火焰传感器
STM32配合火焰传感器的火灾报警_第2张图片
还有个蜂鸣器,我这个开发板自带,也是可外接的

火焰传感器介绍

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

实验测试

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

连线
STM32配合火焰传感器的火灾报警_第5张图片
STM32配合火焰传感器的火灾报警_第6张图片

STM32配合火焰传感器的火灾报警_第7张图片

配置蜂鸣器的模块(时钟、输出模式、引脚初始化)
我这里是让传感器的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
STM32配合火焰传感器的火灾报警_第8张图片
STM32配合火焰传感器的火灾报警_第9张图片
配置蜂鸣器的模块(时钟、输出模式、引脚初始化)
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,火焰越大,可响应的有效距离越远.

你可能感兴趣的:(STM32f103,传感器,stm32)