STM32
直播中

吴湛

9年用户 884经验值
擅长:可编程逻辑
私信 关注
[问答]

火焰传感器的工作原理是什么

火焰传感器的工作原理是什么?

使用火焰传感器有哪些注意事项?

回帖(1)

李朗雯

2021-10-15 14:13:40
  实验材料
  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,火焰越大,可响应的有效距离越远。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分