历史上的今天
返回首页

历史上的今天

今天是:2025年05月08日(星期四)

正在发生

2019年05月08日 | GP2Y10驱动含PM2.5和AQI(STM32)

2019-05-08 来源:eefocus

一、前期准备

单片机:STM32F103ZET6

开发环境:MDK5.14

库函数:标准库V3.5

GP2Y10模块:淘宝有售

在这里插入图片描述

二、实验效果


在这里插入图片描述
在这里插入图片描述

三、驱动原理

主要就是采集AD电压,对应转换公式做相关的转换。

需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。


四、驱动代码

gp2y10.h


#ifndef __GP2Y10_H__

#define __GP2Y10_H__

#include "stm32f10x.h"

#include "gpio.h"

#include "delay.h"

#include "uart.h"


#define GP2Y10_CONTROL PAout(0)

#define GP2Y10_PIN GPIO_Pin_0

#define GP2Y10_CLKLINE RCC_APB2Periph_GPIOA

#define GP2Y10_PORT GPIOA


extern void GP2Y10Configuraiton(void);

extern void GetGP2Y10Value(uint16_t *AQI, uint16_t *PM25);

#endif


gp2y10.c


#include "gp2y10.h"


void GP2Y10Configuraiton(void)

{

GPIO_InitTypeDef    GPIO;

    

    //Enable APB2 Bus

    RCC_APB2PeriphClockCmd(GP2Y10_CLKLINE, ENABLE);

    

    //Register IO 

    GPIO.GPIO_Pin   = GP2Y10_PIN;

    GPIO.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO.GPIO_Mode  = GPIO_Mode_Out_PP;

    GPIO_Init(GP2Y10_PORT, &GPIO);

GP2Y10_CONTROL = 0;

}


void GetGP2Y10Value(uint16_t *AQI, uint16_t *PM25)

{

uint16_t tmp[10] = {0}, max, min;

uint32_t value = 0;

uint8_t i, pMax = 0, pMin = 0;;

for(i = 0; i < 10; i ++)

{

GP2Y10_CONTROL = 0;

DelayUs(280);

tmp[i] = ADC_GetConversionValue(ADC1);

DelayUs(22);

GP2Y10_CONTROL = 1;

DelayUs(9680);

}

max = min  = tmp[0];

for(i = 0; i < 10; i ++)

{

if (min > tmp[i])

{

min = tmp[i];

pMin = i;

}

if (max < tmp[i])

{

max = tmp[i];

pMax = i;

}

}

tmp[pMax] = 0;

tmp[pMin] = 0;

for (i = 0; i < 10; i ++)

{

value += tmp[i];

}

value = (uint16_t)((float)value / 10.0);

//printf("Volatge = %0.2f!rn", (float)(((float)value) / 4096.0 * 3.3));

*PM25 = (uint16_t)(((float)(((float)value) / 4096.0 * 3.3) * 0.17 - 0.1) * 1000.0);

if (*PM25 > 0 && *PM25 <= 35)

{

*AQI = (uint16_t)(50.0/35.0*(float)(*PM25 - 0) + 0);

}

if (*PM25 > 35 && *PM25 <= 75)

{

*AQI = (uint16_t)(50.0/40.0*(float)(*PM25 - 35) + 35.0);

}

if (*PM25 > 75 && *PM25 <= 115)

{

*AQI = (uint16_t)(50.0/40.0*(float)(*PM25 - 75) + 75.0);

}

if (*PM25 > 115 && *PM25 <= 150)

{

*AQI = (uint16_t)(50.0/35.0*(float)(*PM25 - 115) + 115.0);

}

if (*PM25 > 150 && *PM25 <= 250)

{

*AQI = (uint16_t)(100.0/100.0 * (float)(*PM25 - 150) + 150.0);

}

if (*PM25 > 250 && *PM25 <= 350)

{

*AQI = (uint16_t)(100.0/100.0*(float)(*PM25 - 250) + 250.0);

}

if (*PM25 > 350 && *PM25 <= 500)

{

*AQI = (uint16_t)(100.0/150.0*(float)(*PM25 - 350) + 350.0);

}

}


推荐阅读

史海拾趣

DL Instruments LLC公司的发展小趣事

DL Instruments的成功离不开其领导层的智慧与远见。David Woolston先生作为公司的创始人之一,凭借其丰富的行业经验和敏锐的市场洞察力,带领公司不断突破自我、超越竞争对手。他注重人才培养和技术创新,为公司的发展奠定了坚实的基础。

AITSEMI公司的发展小趣事

为了进一步提升竞争力,AITSEMI公司积极寻求与产业链上下游企业的战略合作。通过与晶圆制造、封装测试等环节的领军企业建立紧密的合作关系,AITSEMI不仅确保了稳定的供应链和优质的产品质量,还成功实现了产业链的垂直整合,为公司的长远发展奠定了坚实的基础。

成都成电硅海公司的发展小趣事

成都成电硅海公司自2009年成立以来,就以其独特的技术创新能力在电子行业中崭露头角。公司创始人李德全深谙半导体行业的技术趋势,带领团队攻克了一个又一个技术难题。在成立初期,公司就成功研发出一款高性能的硅基材料,这一创新不仅打破了国外企业的技术垄断,还为公司赢得了市场的初步认可。

Electrocube Inc公司的发展小趣事

Electrocube Inc公司的创始人在创立之初便面临着重重挑战。当时,电子行业正处于快速发展阶段,市场竞争激烈。然而,创始人凭借对电子技术的深刻理解和敏锐的市场洞察力,成功开发出了一款高性能、低成本的电容器产品。这款产品迅速获得了市场的认可,为公司赢得了第一桶金,也为后续的发展奠定了坚实的基础。

ELMOS公司的发展小趣事

ELMOS公司自创立以来,就专注于汽车电子领域的发展。多年来,公司不断积累在模拟混合信号集成电路设计方面的专业知识,形成了深厚的技术底蕴。这种长期的技术积累使得ELMOS在汽车和工业物理接口领域拥有广泛的产品线,特别是在供电和DC/DC方面积累了丰富的经验。这种技术积累不仅为ELMOS赢得了市场的认可,也为公司的持续发展奠定了坚实的基础。

EQCOLOGIC公司的发展小趣事

EQCOLOGIC的创始人在一次偶然的机会中,发现了一种新型电子材料的独特性能。这种材料不仅具有优异的导电性,还具有出色的热稳定性和耐腐蚀性。他敏锐地意识到这种材料在电子行业中的巨大潜力,于是决定成立EQCOLOGIC公司,专注于这种新型电子材料的研发和应用。经过几年的努力,EQCOLOGIC成功将这种材料商业化,并凭借其独特的性能,在电子行业中崭露头角。

问答坊 | AI 解惑

ARM7 开发全部源代码 经典

ARM7 开发全部源代码 经典…

查看全部问答>

电话程序

老师再帮看看程序~                                       ;本程序中使用的信号音,方便起见,2 ...…

查看全部问答>

华为软件工程师手册

华为软件工程师手册…

查看全部问答>

交通灯

麻烦大家看看为什么我程序烧进去却没有反应啊??想给予的功能是:P00~5:控制灯,P10~7:控制LED,P2.2、P2.3:左右位选,P3.2  P3.3中断 首先是:东的红亮难得绿亮,延时30,然后是东南黄灯亮,延时5S,再然后是东绿南红亮,延时30,最后 ...…

查看全部问答>

怎么用KITL技术来调试WINCE内核啊,不是很懂这个,望高人指点一二啊!

怎么用KITL技术来调试WINCE内核啊,不是很懂这个,望高人指点一二啊!     能像VC++6.0里面调试应用程序那样吗?可以单步,断点,运行什么的吗?但关键是NK不能在本地(PC)上运行,必须在远端(设备)上运行,这个要进行单步,断点,运行调试是怎么一 ...…

查看全部问答>

wince6.0下不能运行C#程序?

采用WINCE6.0,编译内核时添加了组建“.net compact framework 2.0”。PC上开发环境为VS.NET2005,并且安装了定制的SDK,可是在运行C#写的代码时出错,提示如下: An unhandled exception of type \'System.MissingMethodException\' occurred i ...…

查看全部问答>

ARM编程结构体包含double类型如何设置单字节对齐

ARM默认不是单字节对齐,必须要在结构体前加__packed修饰符才能将结构体设置为单字节对齐。但是结构体中包含了double就不能用__packed修饰符了,编译报错。请问各位高手如何解决?这个结构体是用来读库文件中的记录的,因为库文件中记录是单字节对 ...…

查看全部问答>

LED基础知识之集肤效应

大家在做LED测试时应该会发现当以高频电流驱动器,经常会出现烧黑现象,最终导致死灯。具体表现在金线周围胶体因持续高温下硅胶碳化烧黑,这是由于高频下阻抗远高于直流阻抗,阻抗的升高使金线发热更加严重使胶体烧黑,产生这一现象的原因就是集肤 ...…

查看全部问答>

请问版主,STM32F2系列是否已正式供货了?

                                 今天刚看到F2系列,不知现在是否正常供货,请告知。…

查看全部问答>

430的SPI和UART使用同一个寄存器发送数据?能同时应用么/

要同时应用SPI和UART,看了一下,好象是同一个寄存器发送数据啊,怎么SPI发送数据还要设置UART的拨特率啊?请高手\\解释~!谢谢!…

查看全部问答>