GP2Y10驱动含PM2.5和AQI(STM32)

发布者:科技梦行者最新更新时间:2019-05-08 来源: eefocus关键字:GP2Y10驱动  PM2  AQI  STM32 手机看文章 扫描二维码
随时随地手机看文章

一、前期准备

单片机: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);

}

}


关键字:GP2Y10驱动  PM2  AQI  STM32 引用地址:GP2Y10驱动含PM2.5和AQI(STM32)

上一篇:DS1302驱动(STM32)
下一篇:HC-SR505红外感应模块驱动(STM32)

推荐阅读最新更新时间:2024-11-07 03:42

官方宣布 诺基亚X新品手机5月16日正式发布
    据悉诺基亚X6(2018)并不是旗舰机,而是一款中端手机,消息称,诺基亚X6(2018)搭载5.8英寸19:9屏幕,配置骁龙636、6GB内存,还有联发科P60、4GB内存版,后背板或采用玻璃材质,配备竖列双摄镜头,两款机型都将搭载Android 8.0 Oreo系统。售价分别为1800元和1600元左右。4月27日到5月2日,诺基亚手机在三里屯举办了诺基亚X新品开箱见活动,也已经展示了诺基亚X新品(或叫诺基亚X6)手机,该机采用异形全面屏,下巴较窄。现在诺基亚手机官方宣布,诺基亚X将在5月16日正式发布。   诺基亚X新品背面搭载蔡司认证双摄镜头,下面是指纹识别。   IT之家报道,此前国家3C认证网站
[手机便携]
STM32通用定时器(TIM2-5)PWM输出
脉冲宽度调制(PWM),是英文 Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的( 110 为模式1, 111 为模式2)。模式1和模式2的区别如下: 110:PWM模式1-在
[单片机]
如何"抢救"进水手机 学会这5步能省大钱
    最后一步就是在等待水分完全蒸发的24小时之后了,现在可以尝试开机了。如果一切正常,那么恭喜你真的救回了自己的手机。如果还是不行——请送官方维修点维修,很不幸的告诉你这笔钱看来是省不下来了。如果想避免这种惨祸发生,不如换个防水手机?“警告,警告。如果你的手机已经进水,请跳过这一段快速进入正题。”对付手机进水是一项争分夺秒的任务——你早一秒开始处理手机,就多一分可能把手机就下来。因此,提前看一下处理手机进水的攻略以备不时之需还是很重要的。   第一步:断电!断电!断电!   如果现在的你不幸手机进水,正在拿电脑(或者别人的手机)搜索手机进水怎么办。那么毫无疑问首要的任务就是断电。大部分手机在检测到进水之后会开启自动保护
[手机便携]
利用STM32的FLASH模拟 EEPROM(F103)系列
STM32的FLASH是用来存储主程序的,ST公司为了节约成本,没有加入 EEPROM,但是许多场合下我们需要用EEPROM;不过FLASH的容量还是可观的,我们可以利用FLASH模拟EEPROM。 根据《STM32F10X闪存编程》中的介绍,FLASH除了保存用户代码的部分,其余部分我们是可以利用其作为数据存储使用的。stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放置2KB的启动程序(Bootloader)并锁死,用户无法更改。选项字节存储芯片的配置信息及对主存储块的保护信息。STM32的FLASH主存储块按页组织,有的产品每页1KB,有的产
[单片机]
利用<font color='red'>STM32</font>的FLASH模拟 EEPROM(F103)系列
STM32学习之定时器调试总结
通用定时器调试老是失败原因总结: 调试了两天终于找到错误根源: 错误程序: TIM3- DIER=1 0; //中断使能寄存器(TIMx_DIER)位0置位,允许更新中断 TIM3- DIER=1 6; //允许触发中断 正确程序: TIM3- DIER|=1 0; TIM3- DIER|=1 6; 错因:执行TIM3- DIER|=1 6;时TIM3- DIER第0位又会被清零了!!! 修改TIMx_DIER寄存器某一位时,不能用赋值符号(=,会影响其他各位),可用|=就会避免此类错误!!!
[单片机]
IBM说这5项科技5年后将改变世界:人工智能预测精神疾病
IBM公布了一年一度的“5 in 5”最可能改变世界的科技趋势榜单,列出其智库科学家和研究员选出的接下来5年后将对人类工作、生活和交流影响最大的5项创新技术。    在今年的榜单中,IBM特别看重人工智能、电子波谱技术和纳米技术。其中,一些个人健康领域的创新能够有效地识别、预防和治疗疾病,能够极大改善个体生活质量;有些创新则对于人类生存的大环境是一大福音,它们可以提高能源效率、及时治理有害污染,真正让世界变得更好。    IBM研究所从10年前开始列这一预测榜单,以期激发人们对其实验室研究重大突破的兴趣和讨论。在过去10年中,IBM对未来新兴科技的预测有些已经成真。比如,2012年,IBM研究院就预测,计算机将不仅能够看图片,还能
[嵌入式]
STM32 GPIO的8种工作模式及相关配置寄存器
GPIO八种工作模式 四种输入: GPIO_Mode_IPU(上拉输入) GPIO_Mode_IPD(下拉输入) 原理: 经过上拉开关和下拉开关的连接,再经过触发器转化为0,1的数字信号,存储到数据寄存器中,然后我们就可以通过配置寄存器CRL,CRH控制这两个开关。 用法: 若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),取得的GPIO引脚数据为1,既高电平. 而下拉输入模式则是相反的,在默认状态下其引脚数据为0,低电平. GPIO_Mode_IN_FLOATING(浮空输入) 原理: 不接上拉和下拉开关,直接经由触发器输入. 用法: 若配置成这个模式可以用电表测量其引脚电压是1点几伏(不确定的值).由于输
[单片机]
美学生靠破解iPhone年收入可达5万美元
  在 2010年7月美国通过了新的《数字千年版权法》后,破解iPhone已变成合法行为,这似乎又催生了一个新的产业。据《华盛顿邮报》网站报道,美国乔治梅森大学(George Mason University)的学生Kevin Lee靠帮别人破解iPhone,每年可获得5万美元的收入。   Kevin Lee表示,最初他只是为自己和身边不太懂这方面技术的朋友破解iPhone,那时每周大约为5到10个人破解iPhone。后来“声名远播”,许多人都上门请他越狱或解锁iPhone,目前每周接待的客户可达30到40人。他甚至还在广告网站Craigslist上打有自己的广告:“Get Your iPhone Jailbroken To
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved