PM2.5粉尘传感器详解(STM32)

news2024/11/14 18:26:51

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

3.工作原理介绍

4.粉尘浓度转化关系

5.空气污染指数 

三、程序设计

main.c文件

PM25.h文件

PM25.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        GP2Y1014AU是日本夏普公司开发的一款光学灰尘浓度检测传感器,设计用来感应空气中的尘埃粒子,其内部对角安放着红外线发光二极管和光电晶体管,使得其能够探测到空气中尘埃反射光,即使非常细小的如烟草烟雾颗粒也能够被检测到,通常应用在空气净化系统中。

以下是PM2.5传感器的参数:

型号

GP2Y1014AU

工作电压

5~7V

工作电流

<20mA

工作温度

-10~65

存储温度

-20~80

灵敏度

0.5V(0.1mg/m3)

最小粒子检出值

0.8微米

哔哩哔哩视频链接:

PM2.5粉尘传感器详解(STM32)

(资料分享见文末) 

二、传感器原理

1.原理图

L-VCC引脚接电阻是用来限流,接电容是用来稳压 

2.引脚描述

引脚名称

描述

L-VCC

LED灯正极

L-GND

LED灯负极

LED

LED灯引脚

S-GND

模块负极

OUT

模拟量输出引脚

VCC

模块正极

3.工作原理介绍

     PM2.5传感器其内部对角安放着红外线发光二极管光电晶体管,它们的光轴相交,当带灰尘的气流通过光轴相交的交叉区域,粉尘对红外光反射,反射的光强与灰尘浓度成正比。光电晶体管能够探测到空气中尘埃反射光,尘埃浓度越高,反射光越多,从而输出模拟电压值越高,通过ADC将模拟值转化为数字电压值,利用比例关系式,最终得到尘埃浓度。

4.粉尘浓度转化关系

V

0.95

1.45

2.00

2.65

3.25

3.60

Mg/m3

0

0.1

0.2

0.3

0.4

0.5

5.空气污染指数 

PM2.5
浓度均值(μg/m3)

空气质量
AQI

空气质量级别

空气质量指数类别

0-35

0-50

一级

35-75

51-100

二级

75-115

101-150

三级

轻度污染

115-150

151-200

四级

中度污染

150-250

201-300

五级

重度污染

250以上

300

六级

严重污染

  三、程序设计

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

2.将读取得到信息数据同时在OLED上显示

PM2.5_LED

PA0

PM2.5_VO

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 "PM25.h"
#include "adcx.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	PM2.5粉尘传感器实验                     
 * 版本			: V1.0
 * 日期			: 2024.9.10
 * MCU			:	STM32F103C8T6
 * 接口			:	参看PM25.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

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

u16 pm;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	PM25_Init();
	USART1_Config();//串口初始化
	
	OLED_Init();
	printf("Start \n");
	delay_ms(1000);
	//显示“粉尘浓度:”
	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();
		pm = Get_PM25_Average_Data();
		printf("粉尘浓度: %d\r\n",pm);
		
		OLED_ShowNum(80,0,pm,3,16,1);

		delay_ms(500);
  }
}

PM25.h文件

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

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	PM2.5粉尘传感器实验                     
 * 版本			: V1.0
 * 日期			: 2024.9.10
 * MCU			:	STM32F103C8T6
 * 接口			:	参看PM25.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

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

u16 pm;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	PM25_Init();
	USART1_Config();//串口初始化
	
	OLED_Init();
	printf("Start \n");
	delay_ms(1000);
	//显示“粉尘浓度:”
	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();
		pm = Get_PM25_Average_Data();
		printf("粉尘浓度: %d\r\n",pm);
		
		OLED_ShowNum(80,0,pm,3,16,1);

		delay_ms(500);
  }
}

PM25.c文件

#include "PM25.h"

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

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

/**
  * @brief  PM25初始化程序
  * @param  无
  * @retval 无
  */

void PM25_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd (PM25_GPIO_CLK, ENABLE );					// 打开 ADC IO端口时钟
	GPIO_InitStructure.GPIO_Pin = PM25_LED_GPIO_PIN;					// 配置 ADC IO 引脚模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;					// 设置为推挽输出
	
	GPIO_Init(PM25_LED_GPIO_PORT, &GPIO_InitStructure);				// 初始化 ADC IO
	
	//PA1作为模拟通道输入引脚 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	
	GPIO_InitStructure.GPIO_Pin = PM25_VO_GPIO_PIN;
	GPIO_Init(PM25_VO_GPIO_PORT, &GPIO_InitStructure);
	
	ADCx_Init();
	
}
	
uint16_t PM25_ADC_Read(void)
{
	//设置指定ADC的规则组通道,采样时间
	return ADC_GetValue(ADC_CHANNEL, ADC_SampleTime_239Cycles5);
}


/**
  * @brief  PM25 ADC数据读取
  * @param  无
  * @retval 返回转换后的PM25模拟信号数值
  */
	
u16 PM25_GetData(void)
{
	uint16_t ADCVal;
	int dustVal = 0;
	float Voltage;

	PM25_LED_H;	//置1  开启内部LED
	delay_us(280); 	// 开启LED后的280us的等待时间
	ADCVal = PM25_ADC_Read();  //PA1 采样,读取AD值
	delay_us(19);			  //延时19us,因为这里AD采样的周期为239.5,所以AD转换一次需耗时21us,19加21再加280刚好是320us
	PM25_LED_L;	//置0  关闭内部LED
	delay_us(9680);			//需要脉宽比0.32ms/10ms的PWM信号驱动传感器中的LED
	
	Voltage = 3.3f * ADCVal / 4096.f * 2; //获得AO输出口的电压值
	
	dustVal = (0.17*Voltage-0.1)*1000;  //乘以1000单位换成ug/m3//

	if (dustVal < 0)
		dustVal = 0;            //限位//

	if (dustVal>500)        
		dustVal=500;

	return dustVal;
}

/**
  * @brief  平均值滤波法
  * @param  无
  * @retval 返回滤波后的数据
  */
u16 Get_PM25_Average_Data(void)
{
	u16 temp_val=0;
	u8 t;
	for(t=0;t<PM25_READ_TIMES;t++)	//#define PM25_READ_TIMES	20	定义读取次数,读这么多次,然后取平均值
 
	{
		temp_val+=PM25_GetData();	//读取ADC值
		delay_ms(5);
	}
	temp_val/=PM25_READ_TIMES;//得到平均值
    return (u16)temp_val;//返回算出的ADC平均值
}

四、实验效果 

五、资料获取

项目分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索 Web Speech API:实现浏览器语音识别与合成

引言 Web Speech API 是一项由 W3C 开发的 Web 标准&#xff0c;为开发者提供了在 Web 应用程序中实现语音识别和语音合成的能力。通过 Web Speech API&#xff0c;我们可以让网页与用户进行语音交互&#xff0c;实现更加智能化和便捷的用户体验。本文将深入探讨 Web Speech A…

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件&#xff0c;在下列情形中&#xff0c;可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果&#xff0c;你需要对transition组件的name属性自定义。…

【Linux】当前进展

驱动层日志添加了下文件目录&#xff0c;函数&#xff0c;代码行的打印&#xff08;这里要小心&#xff0c;驱动目录源代码打印日志里边添进程号可能有问题&#xff0c;因为在驱动初始化的时候&#xff0c;内核还没有创建进程&#xff0c;不过猜测可以先不打印进程相关信息&…

python使用vscode 所需插件

1、导读 环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景&#xff1a;换系统需要重新安装&#xff0c;避免后期忘记&#xff0c;此处记录一下啊 事件&#xff1a;20240921 说明&#xff1a;记录&#xff0c;方便后期自己查找 2、插件…

Ansys Zemax | 如何使用琼斯矩阵表面

附件下载 联系工作人员获取附件 概览 琼斯矩阵 (Jones Matrix) 表面是一种非常简便的定义偏振元件的方法。这篇文章通过几个示例介绍了如何使用琼斯矩阵。 介绍 光线追迹程序一般只考虑光线的几何属性&#xff08;位置、方向和相位&#xff09;。光线传播到一个表面时的全…

SQL - 进阶语法(二)约束

1. SQL约束 约束用于约束表中的数据规则&#xff0c;如若存在违反行为&#xff0c;行为会被约束终止。 • NOT NULL 确保列不能有NULL值 如果添加一行新的数据&#xff0c;不能有null值&#xff0c;否则无法添加 新建表格 CREATE TABLE new_table( ID int NOT NULL, NAME …

梯形区域分解实现避障路径规划全覆盖路径规划

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言&#xff08;1&#xff09;功能&#xff08;2&#xff09;算法&#xff08;3&#xff09;参考链接&#xff08;4&#xff09;…

【服务器第二期】mobaxterm软件下载及连接

【服务器第二期】mobaxterm软件下载及连接 前言什么是SSH什么是FTP/SFTP mobaxterm软件介绍mobaxterm软件下载SSH登录使用方法1-新建ssh连接方法2-打开已有的ssh连接方法3-通过ssh命令建立连接 SFTP数据传输方法1-建立ssh连接后直接拖拽方法2-建立sftp连接再拖拽方法3-直接使用…

Nacos配置管理(2)-----配置热更新

有很多的业务相关参数&#xff0c;将来可能会根据实际情况临时调整。例如购物车业务&#xff0c;购物车数量有一个上限&#xff0c;默认是10&#xff0c;对应代码如下&#xff1a; 现在这里购物车是写死的固定值&#xff0c;我们应该将其配置在配置文件中&#xff0c;方便后期…

while(cin>>a)

while(cin>>a)要结束输入CTRLZ换行 输入先调用&#xff1a; istream& operator>> (istream& is, string& str); 但返回值类型时istream&#xff0c; 再调用&#xff1a; 重载的原为(bool)istream&#xff0c;返回值为bool,重载的为括号&#xff0c…

若依前后端分离版项目电子证书查询系统部署到Linux生产环境

项目背景&#xff1a;这个项目之前是PHP语言开发的&#xff0c;采用MVC混编的&#xff0c;前端用Layui框架后端用ThinkPHP8.0框架。客户要求给改成Java语言的&#xff0c;就选用了若依前后端分离低代码版。本地开发调试没有问题&#xff0c;就记录下整个项目上线过程。 服务器背…

How can I stream a response from LangChain‘s OpenAI using Flask API?

题意&#xff1a;怎样在 Flask API 中使用 LangChain 的 OpenAI 模型流式传输响应 问题背景&#xff1a; I am using Python Flask app for chat over data. In the console I am getting streamable response directly from the OpenAI since I can enable streming with a f…

Go语言基础学习02-命令源码文件;库源码文件;类型推断;变量重声明

命令源码文件 GOPATH指向的一个或者多个工作区&#xff0c;每个工作区都会有以代码包为基本组织形式的源码文件。 Go语言中源码文件可以分为三类&#xff1a;命令源码文件、库源码文件、测试源码文件。 命令源码文件&#xff1a; 命令源码文件是程序的运行入口&#xff0c;是每…

k8s技术

---------------第一部分---------------------- 一.应用部署方式 1.传统部署&#xff1a;直接部署在物理机上&#xff0c;简单但是耗资 2.虚拟化部署&#xff1a;一台物理机上面有多个虚拟机&#xff0c;提供了虚拟机间一定的安全&#xff0c;但是增加了操作系统&#xff0c;…

【C++】STL----deque

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】STL----stack和queue常见用法 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一…

某花顺爬虫逆向分析

目标网站&#xff1a; aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 一、抓包分析 携带了cookie&#xff0c;每次请求的cookie都不一样&#xff0c;且不携带cookie不能成功返回数据 hook Cookie代码 _cookie document.cookie Object.defineProperty(document, cookie, {get(){con…

前端框架的选择和对比

前端框架的选择取决于项目的具体需求、团队的技术栈以及长期的技术规划。以下是几个主流前端框架的对比和选择建议&#xff1a; 1. React 特点: 由Facebook开发&#xff0c;基于组件化的设计思想&#xff0c;使用JSX语法&#xff0c;数据流单向&#xff0c;生态系统丰富。适用…

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对的问题 解决办法 出现 Oracle Library is not loaded 错误提示&#xff0c;通常是因为 Navicat 无法找到或加载 Oracle 客户端库&#xff08;OCI.dll&#xff09;。要解决这个问题&#x…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…

openEuler系统安装内网穿透工具实现其他设备公网环境远程ssh连接

目录 前言 1. 本地SSH连接测试 2. openEuler安装Cpolar 3. 配置 SSH公网地址 4. 公网远程SSH连接 5. 固定连接SSH公网地址 6. SSH固定地址连接测试 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊openEuler系统安装内网穿透工具实现其他…