当前位置: 首页 > article >正文

火焰传感器详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

三、程序设计

main.c文件

IR.h文件

IR.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        火焰传感器是一种常用于检测火焰或特定波长(760nm-1100nm)红外光的传感器。探测角度60°左右,对火焰光谱特别灵敏。灵敏度可调(图中蓝色的电位器调节)。对火焰的探测距离与灵敏度和火焰强度有关,一般在1m以内。有较强的适用性,适用于工业自动化、安全监控、消防预警、机器人技术等领域。

以下是火焰传感器的参数:

工作电压

3.3~5V

阈值调节

电位器调节

尺寸

14mm×32mm

输出方式

数字量(AO)或者模拟量(DO

检测波长

760~1100nm

哔哩哔哩视频:

火焰传感器详解(STM32)

(资料分享见文末) 

二、传感器原理

1.原理图

2.引脚描述:

引脚名称

描述

VCC

供给电压3~5V

GND

地线

DO

开关信号

AO

模拟信号

使用模块在环境火焰光谱或者光源达不到设定阈值时,D0口输出高电平,当外界环境火焰光谱或者光源超过设定阈值时,模块D0输出低电平。

三、程序设计

1.使用STM32F103C8T6读取火焰传感器采集的数据,通过串口发送至电脑

2.将读取得到的光照数据同时在OLED上显示

火焰传感器AO

PA0

火焰传感器DO

PA1

OLED_SCL

PB11

OLED_SDA

PB10

串口

串口1

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "IR.h"
#include "adcx.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	火焰传感器实验                     
 * 版本			: V1.0
 * 日期			: 2024.8.10
 * MCU			:	STM32F103C8T6
 * 接口			:	参看IR.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

u16 fire;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	IR_Init();
	USART1_Config();//串口初始化
	
	OLED_Init();
	printf("Start \n");
	delay_ms(1000);
	
	OLED_Clear();
	//显示“火焰强度:”
	OLED_ShowChinese(0,0,0,16,1);
	OLED_ShowChinese(16,0,1,16,1);
	OLED_ShowChinese(32,0,2,16,1);
	OLED_ShowChinese(48,0,3,16,1);
	OLED_ShowChar(64,0,':',16,1);
	
	

  while (1)
  {
		LED_Toggle();
		fire = IR_FireData();
		printf("火焰强度: %d\r\n",fire);
		OLED_ShowNum(80,0,fire,4,16,1);
		
		if(fire)
		{
			OLED_ShowChinese(48,32,6,16,1);	//火
			OLED_ShowChinese(60,32,7,16,1);	//灾
		}
		else
		{
			OLED_ShowChinese(48,32,4,16,1);	//正
			OLED_ShowChinese(60,32,5,16,1);	//常
		}

		delay_ms(200);
  }
}

IR.h文件

#ifndef __LDR_H
#define	__LDR_H
#include "stm32f10x.h"
#include "adcx.h"
#include "delay.h"
#include "math.h"

/*****************辰哥单片机设计******************
											STM32
 * 文件			:	火焰传感器h文件                   
 * 版本			: V1.0
 * 日期			: 2024.8.10
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/

#define IR_READ_TIMES	10  //火焰传感器ADC循环读取次数

//模式选择	
//模拟AO:	1
//数字DO:	0
#define	MODE 	0

/***************根据自己需求更改****************/
// LDR GPIO宏定义
#if MODE
#define		IR_AO_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	IR_AO_GPIO_PORT								GPIOA
#define 	IR_AO_GPIO_PIN								GPIO_Pin_0
#define   ADC_CHANNEL               		ADC_Channel_0	// ADC 通道宏定义

#else
#define		IR_DO_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	IR_DO_GPIO_PORT								GPIOA
#define 	IR_DO_GPIO_PIN								GPIO_Pin_1			

#endif
/*********************END**********************/


void IR_Init(void);
uint16_t IR_FireData(void);

#endif /* __ADC_H */

IR.c文件

#include "IR.h"


/*****************辰哥单片机设计******************
											STM32
 * 文件			:	火焰传感器c文件                   
 * 版本			: V1.0
 * 日期			: 2024.8.10
 * MCU			:	STM32F103C8T6
 * 接口			:	见代码							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥

**********************BEGIN***********************/

void IR_Init(void)
{
	#if MODE
	{
		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd (IR_AO_GPIO_CLK, ENABLE );	// 打开 ADC IO端口时钟
		GPIO_InitStructure.GPIO_Pin = IR_AO_GPIO_PIN;					// 配置 ADC IO 引脚模式
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		// 设置为模拟输入
		
		GPIO_Init(IR_AO_GPIO_PORT, &GPIO_InitStructure);				// 初始化 ADC IO

		ADCx_Init();
	}
	#else
	{
		GPIO_InitTypeDef GPIO_InitStructure;
		
		RCC_APB2PeriphClockCmd (IR_DO_GPIO_CLK, ENABLE );	// 打开连接 传感器DO 的单片机引脚端口时钟
		GPIO_InitStructure.GPIO_Pin = IR_DO_GPIO_PIN;			// 配置连接 传感器DO 的单片机引脚模式
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			// 设置为上拉输入
		
		GPIO_Init(IR_DO_GPIO_PORT, &GPIO_InitStructure);				// 初始化 
		
	}
	#endif
	
}

#if MODE
uint16_t IR_ADC_Read(void)
{
	//设置指定ADC的规则组通道,采样时间
	return ADC_GetValue(ADC_CHANNEL, ADC_SampleTime_55Cycles5);
}
#endif

uint16_t IR_FireData(void)
{
	
	#if MODE
	uint32_t  tempData = 0;
	for (uint8_t i = 0; i < IR_READ_TIMES; i++)
	{
		tempData += IR_ADC_Read();
		delay_ms(5);
	}

	tempData /= IR_READ_TIMES;
	return 4095 - (uint16_t)tempData;
	
	#else
	uint16_t tempData;
	tempData = !GPIO_ReadInputDataBit(IR_DO_GPIO_PORT, IR_DO_GPIO_PIN);
	return tempData;
	#endif
}

四、实验效果 

五、资料获取

项目分享


http://www.kler.cn/a/286529.html

相关文章:

  • STM32标准库移植RT-Thread nano
  • Vuex中的getter和mutation有什么区别
  • c++:vector
  • Cannot resolve symbol ‘XXX‘ Maven 依赖问题的解决过程
  • AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言
  • 不只是mini-react第二节:实现最简fiber
  • 【案例63】SSL RC4 加密套件支持检测 (Bar Mitzvah)修复方案
  • 《使用 LangChain 进行大模型应用开发》学习笔记(一)
  • 动手学深度学习(pytorch)学习记录17-房价预测[学习记录]
  • OpenCV绘图函数(6)绘制椭圆函数ellipse()的使用
  • 线性回归算法详解
  • 简单工作流-节点增加输入内容
  • 工业软件架构5:(QT和C++实现)
  • .NetCore发布到IIS
  • 基于单片机的仿生水母水下机器人设计
  • CentOS 7 的默认YUM源更换为国内的镜像源保姆级教程(附:常见的国内 CentOS 镜像源地址)
  • 线程池在接受到30个比较耗时的任务时的状态,在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?
  • 【Unity3D优化】优化内置shader的内存占用
  • Web3前端开发:重塑互联网的未来
  • 元数据与 Annotated:Python 类型系统的新视角
  • NLP入门
  • 如何优化LSTM模型的性能:具体实践指南
  • 深入理解指针(6)
  • 计算机毕业设计Hadoop+Spark抖音可视化 抖音舆情监测 预测算法 抖音爬虫 抖音大数据 情感分析 NLP 自然语言处理 Hive 机器学习 深度学习
  • QIIME2宏基因组学教程--2024年春季莱顿和苏黎世教程
  • oracle物理存储结构文件详解