目前市场上的大多数空气净化器的传感器采用烟尘传感器,例如夏普的GP2Y1010AU, 该传感器能够检测出大于0.8um直径的灰尘,因为我们现在空气中的主要污染物为PM2.5,所以通过一定的算法能够大致让其表示出当前的空气质量指数。下图为CC2540最小系统与GP2Y1010AU组合起来的PM2.5检测仪,房间里计算出来的空气质量指数似乎比官方通报的差一级。

下面是GPY1010AU的采样电路与采样方式,该传感器通过光探测灰尘浓度,需要MCU一个PIN脚产生低脉冲,然后在低脉冲0.32ms的位置进行ADC的转换。

下图为该传感器的外围设计电路,也就是上图中转接板的电路

通过一个三极管控制第3个引脚产生低脉冲,将第5引脚输出的烟尘数据通过R14,R15进行分压以适应MCU ADC的参考电压。

下面是GPY1010AU在CC2540裸机上的核心代码

#include<ioCC2540.h>
#include<stdio.h>#include "gp2y1010au.h"int dustPin=0;int ledPower=2;
int delayTime=10;
int delayTime2=3;
int offTime=15000;void delayMicroseconds(unsigned int microSec)
{unsigned int i,j;for(i=0;i<microSec;i++)for(j=0;j<5;j++);return;
}void InitGp2y1010au(void)
{ADCCON1 = 0x33;//软件启动转换ADCCON3 = 0x30;//AVIN0//TR0 = 0x01; //avin, not internal //ATEST = 0x01;
//  ADCCON1 |= 0x40;//软件启动转换P1DIR |= 0X01;/*output mode*/
}void ledPowerSet(unsigned char val)
{LED_POWER_CTRL = val;
}unsigned short somkeValAdcRead(void)
{unsigned short AdValue=0;unsigned char ADCVal_L,ADCVal_H;//InitGp2y1010au();//ADCCON1 = 0x33;ADCCON3 = 0x30;//AVIN0ADCCON1 = 0x73;while(!(ADCCON1 & 0x80));ADCVal_L = ADCL;ADCVal_H = ADCH;AdValue = ADCVal_L >>2;AdValue |= ADCVal_H <<6;return AdValue;
}unsigned short smokeDetect(void){unsigned short dustVal=0;// ledPower is any digital pin on the arduino connected to Pin 3 on the sensorledPowerSet(1); delayMicroseconds(delayTime);dustVal=somkeValAdcRead(); delayMicroseconds(delayTime2);ledPowerSet(0); delayMicroseconds(offTime);//delayMicroseconds(1000);/*if (dustVal>36.455)Serial.println((float(dustVal/1024)-0.0356)*120000*0.035);*/return dustVal;
}

>

上面的代码读出的是ADC的码字,需要转换为烟尘的浓度,转换方法参看datasheet提供的烟尘与电压关系曲线,如下图所示

转换的浓度信息为mg/m3, 在天气预报中的空气质量是叫一种空气质量指数的指标表示的,也就是AQI.

空气质量指数(Air Quality Index,简称AQI),是一个用来定量描述空气质量水平的数值。AQI的取值范围位于0 – 500 之间。

空气质量指数是根据各种污染物的浓度值换算出来的。要计算AQI,就需要事先确定各污染物在不同空气质量水平下的浓度限值。例如,美国环保局(EPA)针对PM2.5的限值定义如下:

AQI的计算公式如下:

其中:
I = 空气质量指数,即AQI,输出值;
C = 污染物浓度,输入值;
Clow= 小于或等于C的浓度限值,常量;
Chigh= 大于或等于C的浓度限值,常量;
Ilow= 对应于Clow的指数限值,常量;
Ihigh= 对应于Chigh的指数限值,常量。

转换部分的核心代码如下

unsigned short rawVal2_to_ugPerM3(unsigned short rawVal)
{unsigned int ugPerM3Val;unsigned int adc_mVolt;unsigned long temp;temp = (long)2300*(long)rawVal;adc_mVolt = (long)temp/(long)8192;temp = (long)10000*(long)(adc_mVolt - 625);//ug * 10times for float computeugPerM3Val = temp/5750;return (unsigned short)ugPerM3Val;
}unsigned short ugPerM3_to_AQI(unsigned short ugPerM3)
{unsigned short AQI;unsigned short Clow, Chigh, Ilow, Ihigh;if((ugPerM3>C_LOW_1)&&(ugPerM3<C_HIGH_1)){Clow= C_LOW_1;Chigh = C_HIGH_1;Ilow = I_LOW_1;Ihigh = I_HIGH_1;}else if((ugPerM3>C_LOW_2)&&(ugPerM3<C_HIGH_2)){Clow= C_LOW_2;Chigh = C_HIGH_2;Ilow = I_LOW_2;Ihigh = I_HIGH_2;}else if((ugPerM3>C_LOW_3)&&(ugPerM3<C_HIGH_3)){Clow= C_LOW_3;Chigh = C_HIGH_3;Ilow = I_LOW_3;Ihigh = I_HIGH_3;}else if((ugPerM3>C_LOW_4)&&(ugPerM3<C_HIGH_4)){Clow= C_LOW_4;Chigh = C_HIGH_4;Ilow = I_LOW_4;Ihigh = I_HIGH_4;}else if((ugPerM3>C_LOW_5)&&(ugPerM3<C_HIGH_5)){Clow= C_LOW_5;Chigh = C_HIGH_5;Ilow = I_LOW_5;Ihigh = I_HIGH_5;}else if((ugPerM3>C_LOW_6)&&(ugPerM3<C_HIGH_6)){Clow= C_LOW_6;Chigh = C_HIGH_6;Ilow = I_LOW_6;Ihigh = I_HIGH_6;}else if((ugPerM3>C_LOW_7)&&(ugPerM3<C_HIGH_7)){Clow= C_LOW_7;Chigh = C_HIGH_7;Ilow = I_LOW_7;Ihigh = I_HIGH_7;}else//full{return I_HIGH_7;}AQI = (long)(Ihigh-Ilow)*(long)(ugPerM3-Clow)/(long)(Chigh-Clow) + (long)Ilow;return AQI;
}/***************************主函数
***************************/
void main(void)
{unsigned short smokeVal;unsigned short ugPerM3Val;unsigned short AQIval;//LED端口初始化OLED_Init();         //初始化OLED  OLED_Clear();InitGp2y1010au();oledDisplayLabel();while(1){smokeVal = smokeDetect();ugPerM3Val = rawVal2_to_ugPerM3(smokeVal);AQIval = ugPerM3_to_AQI(ugPerM3Val);gp2y1010auDisplay(AQIval);}
}

PM2.5检测仪设计相关推荐

  1. 市面上有没有靠谱的PM2.5检测仪?如何自己动手制作PM2.5检测仪

     市面上能买到的11中常见的pm2.5检测仪 网上大佬实测并不是很准,我这里没测过(全买下来有点贵,贫穷限制了我的想象力) 这些检测仪多数是复合式.多功能的空气质量检测仪.具体就不一一介绍了.这篇文章 ...

  2. 利用支持MicroPython的TPYBoard开发板自制PM2.5检测仪(萝卜教育学科式编程)

    2019独角兽企业重金招聘Python工程师标准>>> 秋冬季节,雾霾天气的持续,让人们对空气质量的关注程度提升.而近期人们对于空气质量的关注总也绕不开一个词--"PM2. ...

  3. 【毕业设计】8-基于STM32的水质_浊度检测仪设计与实现(原理图+源码+实物照片+答辩论文)

    [毕业设计]8-基于STM32的水质/浊度检测仪设计与实现(原理图+源码+实物照片+答辩论文) 文章目录 [毕业设计]8-基于STM32的水质/浊度检测仪设计与实现(原理图+源码+实物照片+答辩论文) ...

  4. 基于51单片机的酒精浓度检测仪设计

    本设计仅供参考 基于51单片机的酒精浓度检测仪设计(proteus仿真+程序+原理图+报告) 原理图:Altium Designer 仿真:proteus 8.9 程序编译器:keil 4/keil ...

  5. 9、★♥★基于STM32单片机的颜色检测仪设计♥☆

    9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 文章目录 9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 引言 1.系统概述 1.1.设计任务 1.2.设计要求 2.方案设计与论证 2.1.芯 ...

  6. 基于51单片机智能有毒气体检测仪设计(煤气、酒精、co)(转发分享)

    本设计由STC89C52单片机电路+LCD1602液晶显示电路+MQ-2甲烷传感器模块电路+MQ-3酒精传感器模块电路+MQ-9 CO传感器电路+A/D采样PCF8591电路+蜂鸣器报警电路+LED指 ...

  7. 基于51单片机的公交车安全智能检测系统、基于51单片机的金属探测仪控制设计、基于单片机的智能电子密码锁系统设计、基于51单片机酒精浓度检测仪设计【资料转发分享】

    630基于51单片机的公交车安全智能检测系统-设计资料 本资料是基于单片机的公交车安全监测系统 具有如下功能: 1.监测环境的温度,超标报警.可以设置上下限 2.监测是否有火灾以及有毒气体,超标报警, ...

  8. 基于单片机的智能电子密码锁系统设计-基于51单片机酒精浓度检测仪设计-基于单片机的水缸加热温控控制系统设计-基于单片机蓝牙技术的温室监测系统设计-基于单片机智能PWM调光灯系统设计【毕设方案】

    600基于单片机的智能电子密码锁系统设计-电路程序资料 本设计采用的是AT89C51单片机作为控制核心,控制外围电路工作的装置.在本次基于单片机的电子密码锁设计中,将采用AT89C51单片机作为控制核 ...

  9. 基于51单片机PM2.5空气质量检测仪设计(毕设)

    监测空气质量, LCD1602显示当前空气PM2.5 [资源下载]下载地址如下(919):https://docs.qq.com/doc/DTlRSd01BZXNpRUxl #include &quo ...

最新文章

  1. python 自带虚拟环境
  2. python360百科_python抓取360百科踩过的坑!
  3. es6 async函数的基本用法
  4. Java基础——注解的初步认识
  5. python_generator生成器
  6. numpy中的数组复制
  7. Deepracer 学了就能云驾驭赛车? Deepracer机器学习入门级干货分享!
  8. caj文件添加endnote_endnote怎么导入caj
  9. 【转载】学习可能用到的英语单词
  10. bt磁力种子与php文件,视频 | BT 种子和磁力链接是如何工作的?
  11. 【一起入门NLP】中科院自然语言处理作业五:BiLSTM+Attention实现SemEval-2010 Task 8上的关系抽取(Pytorch)【代码+报告】
  12. 实现一个脚本引擎(燕良译)- -
  13. 计算机组成原理第二章例题解析(下)
  14. 山西省阳泉市谷歌高清卫星地图下载
  15. 代码生成工具的实现思路
  16. 拒绝java_java拒绝策略 - V丶zxw的个人空间 - OSCHINA - 中文开源技术交流社区
  17. Cisco2960 广播延迟问题解决?求助
  18. [转载]【BlackHat 2017】美国黑客大会首日议题汇总,演讲PPT下载也在这里
  19. 单身的看过来啦~圣诞节的圣诞树源码在这里,快做了发给喜欢的对象
  20. SpringCloud图书管理系统

热门文章

  1. 基于python--MyQR库的动态二维码制作
  2. pandas get_dummies用法及代码示例
  3. pandas中的get_dummies()
  4. 轨道交通-上海地铁营运图
  5. Zxing识别图中二维码实践
  6. 最浅显易懂的约瑟夫环讲解
  7. 链表面试常见考题(C++实现)
  8. 无师自通!AlphaGo Zero是怎么练成超越人类?
  9. ElasticSearch 攻略(一)
  10. 【智能制造】智能工厂规划的“十八般武艺”