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

2023-11-11

实验材料

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,火焰越大,可响应的有效距离越远.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32配合火焰传感器的火灾报警 的相关文章

  • 当数据大小较小时,内存到内存 DMA 传输是否需要权衡?

    我正在学习 STM32 F4 微控制器 我正在尝试找出使用 DMA 的限制 根据我的理解和研究 我知道如果数据量较小 即设备使用DMA生成或消耗少量数据 则开销会增加 因为DMA传输需要DMA控制器执行操作 从而不必要地增加系统成本 我做了
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • 10个Python爬虫入门实例,建议收藏!!

    1 爬取强大的BD页面 打印页面信息 第一个爬虫示例 爬取百度页面 import requests 导入爬虫的库 不然调用不了爬虫的函数 response requests get http www baidu com 生成一个respon
  • STM32 之八 在线升级(IAP)超详细图解 及 需要注意的问题解决

    IAP 是啥 IAP In Application Programming 即在应用编程 也就是用户可以使用自己的程序对MCU的中的运行程序进行更新 而无需借助于外部烧写器 其实ST官网也给出了IAP的示例程序 感兴趣的可以直接去官网搜索
  • 【PHPMailer SMTP connect() failed】

    PHPMailer发送邮件 报错 SMTP connect failed 第一种情况 端口问题 现在一般使用的就是ssl的端口465 第二种情况 参数里面有一个password参数 注意这里是授权码 不是邮箱登录密码
  • 3、34道MySQL练习题及答案

    作业 取得每个部门最高薪水的人员名称 第一步 取得每个部门最高薪水 按照部门编号分组 找出每一组最大值 select deptno max sal maxsal from emp group by deptno deptno maxsal
  • 微信小程序项目 npm安装构建

    project config json文件 setting 中增加 packNpmManually true packNpmRelationList packageJsonPath package json miniprogramNpmDi
  • 【笔记总结】C陷阱与缺陷

    第一章 词法 陷阱 是赋值运算符 是比较运算符 赋值运算符的优先级要低于逻辑运算符 和 的优先级要高于 运算符 比较运算符的结果只可能是0或者1 不可能小于0 字符是用单引号引起的实际代表一个整数 整数值对应于该字符在编译器采用的字符集的序
  • Zabbix 监控 CPU 使用率

    system cpu util
  • Delphi2009控件的安装

    delphi2009控件的安装和delphi7的有很大的差别 1 控件包 File gt Open gt 打开控件的包文件 gt project manager gt 右键 gt Install 2 PAS文件 New gt Package
  • 红帽Redhat—Linux基本命令行使用

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 什么是shell 二 基本命令 1 命令访问 2 参数 命令的作用对象 3 配置主机名 4 修改系统语言 5 用户名密码管理 6 cat 7 rm 删除文件命令
  • linux sh查看wifi状态,adb结合wpa_cli查看wifi状态命令集

    1 status 查看当前的WIFI状态 adb shell wpa cli iwlan0 g android wpa wlan0 IFNAME wlan0 status bssid 70 62 b8 62 2e c4 一个长度为48位二进
  • LR为什么用sigmoid函数,这个函数有什么优点和缺点?为什么不用其他函数?

    一 功能的基本性质 首先 Sigmoid的公式形式 公式图像 该函数的基本属性 定义域 值范围 1 1 1 1 函数是域内的连续且平滑的函数 它可以在任何地方被引导 并且导数是 f x f x 1 f x 最早的Logistic功能由Pie
  • python如何实现可视化热力图

    这篇文章主要介绍了python如何实现可视化热力图 小编觉得挺不错的 现在分享给大家 也给大家做个参考 一起跟随小编过来看看吧 热力图 1 利用热力图可以看数据表里多个特征两两的相似度 参考官方API参数及地址 seaborn heatma
  • IC617

    tip 个人日常笔记 解决的问题 导入一个由很多MOS晶体管组成的cdl网表 网表部分内容如下图所示 SUBCKT 512x2ESDA8 指的是 接下来将对512x2ESDA8这一模块进行定义 紧跟在后面的 A 8 A 7 是对这一模块管脚
  • 【Java多数据源实现教程】实现动态数据源、多数据源切换方式

    前言 本文为 Java多数据源实现教程 相关知识 由于自己最近在做导师的项目的时候需要使用这种技术 于是自学了相关技术原理与实现 并将其整理如下 具体包含 多数据源的典型使用场景 包含业务复杂场景 读写分离场景 多数据源实现原理及实现方法
  • JavaScript教程,零基础到入门,switch语句,case分组,类型,函数声明,局部变量,外部变量,参数,返回值,函数命名,

    switch 语句 switch 语句可以替代多个 if 判断 switch 语句为多分支选择的情况提供了一个更具描述性的方式 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块 就像这样 switch
  • go 使用方式

    一 GO基本概念 Go是一个开源的编程语言 它能让构造简单 可靠且高效的软件变得容易 Go是从2007年末由Robert Griesemer 罗伯特 格利茨默 Rob Pike 罗伯 派克 gt Ken Thompson 肯 汤普森 主持开
  • C++预处理器

    预处理器是一些指令 指示编译器在实际编译之前所需完成的预处理 所有的预处理器指令都是以井号 开头 只有空格字符可以出现在预处理指令之前 不会以分号 结尾 define 预处理 define 预处理指令用于创建符号常量 该符号常量通常称为宏
  • Qt之程序发布以及打包成exe安装包

    1 简述 Qt 项目开发完成之后 需要打包发布程序 而因为用户电脑上没有 Qt 配置环境 所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中 然后再用 Inno Setup 打包工具打包成一个 exe
  • ArcGIS环境搭建及地图服务发布

    ArcGIS的环境需要如下文件 SQL Server2012 ArcGIS for Desktop ArcGIS for Server 目前网上提供的ArcGIS下载都是10 2 0版本 这个版本与win7的某几个补丁有冲突 会导致Publ
  • STM32配合火焰传感器的火灾报警

    实验材料 STM32F03 我这里用的是正点原子的战舰 火焰传感器 还有个蜂鸣器 我这个开发板自带 也是可外接的 火焰传感器介绍 工作原理 传感器模块在环境火焰光谱或者光源达不到设定阈值时 DO 口输出低电平 当外界环境火焰光谱或者光源超过