电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Arduino制作PM2.5测量仪(使用GP2Y1010AU0F灰尘传感器)
分 享
扫描二维码分享
Arduino制作PM2.5测量仪(使用GP2Y1010AU0F灰尘传感器)
arduino
PM2.5
灰尘传感器
科技爱好者博客
关注
发布时间: 2020-04-23
丨
阅读: 1835
本文使用Arduino连接GP2Y1010AU0F灰尘传感器,打造一个低成本的PM2.5测量仪,实时检测空气质量。以下是教程。 ## 一、GP2Y1010AU0F灰尘传感器原理介绍 本文再详细介绍下这个传感器的测量原理。 **这是传感器内部电路图** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_225915.jpg)](https://www.lxx1.com/4536/2020-04-06_225915) 传感器内部有红外发光管和光电晶体管,利用光敏原理来工作。传感器的3号引脚控制LED灯,通过发射红外光来检测特别细微的颗粒,如香烟颗粒、细微灰尘,依靠传感器输出脉冲的高度来判断颗粒浓度。 **再看下脉冲波形:** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_230358.jpg)](https://www.lxx1.com/4536/2020-04-06_230358) 这个表示传感器工作时需要一个驱动电平波,时间周期为10ms,其中低电平占时0.32ms(是低电平,没有写错)。 **再看看电压取样脉冲:** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_230606.jpg)](https://www.lxx1.com/4536/2020-04-06_230606) 根据上图可以得到传感器采样的时机,即要在低电平持续0.28ms后,马上取样(这时脉冲的高度最高,为最准确的输出值)。因为低电平长0.32ms,所以采样后再保持低电平0.04ms,然后将电平拉到高电平,持续9.68ms后完成一个工作周期(因为前文说过,一个工作周期为10ms)。 **再看下传感器输出电压和粉尘浓度的关系。** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_231242.jpg)](https://www.lxx1.com/4536/2020-04-06_231242) 根据关系图,我们要写出浓度和电压之间的关系,看下“斜截式方程:y=kx+b”怎么写: [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_231505.jpg)](https://www.lxx1.com/4536/2020-04-06_231505) 选取电压和浓度关系图上斜线的两点,(0,0.6)、(0.4,3),根据“两点式”得到,浓度转化公式为: ``` 浓度=[传感器输出模拟电压 * 0.1667 - 0.1] * 1000; ``` ## 二、灰尘浓度与PM2.5指数转换 首先要说的是,PM2.5即细颗粒物是指直径在2.5微米以下的颗粒物,能长时间的悬浮在空气中。而夏普的GP2Y1010AU0F灰尘传感器只是用于检测特别细微的颗粒,如香烟颗粒、细微灰尘,并不能准确测量PM2.5数值,仅仅作为一个参考。 但是这里还将其对照中国的PM2.5指数标准进行转换。 首先看下PM2.5标准。 [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_234210.jpg)](https://www.lxx1.com/4536/2020-04-06_234210) 所以,我们通过传感器获得灰尘浓度后,按照PM2.5指数对应的浓度进行相应转换即可。参考来源:[PM2.5指数的中美标准差异](http://www.pm25.com/news/96.html) ## 三、传感器控制原理 传感器原理图: [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_232227.jpg)](https://www.lxx1.com/4536/2020-04-06_232227) 从图中可以看到: 传感器的3号管脚要接单片机的数字输出脚。 当LED=0的时候,传感器内部的PNP三极管导通,红外光二极管发光。 当LED=1的时候,传感器内部的PNP三极管截止,红外光二极管停止发光 Vo需要接到单片机的ADC引脚,测试Vo的电压,就可以根据电压和灰尘浓度的比例图,得到灰尘浓度。 ## 四、GP2Y1010AU0F灰尘传感器与Arduino连接 **传感器和Arduino硬件连接:** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_223519.jpg)](https://www.lxx1.com/4536/2020-04-06_223519) Sharp pin 1 (V-LED) =>连接在 150欧姆电阻 和 220uf电容的中间 Sharp pin 2 (LED-GND) => GND 接地 Sharp pin 3 (LED) => Arduino PIN 2 (开关LED) Sharp pin 4 (S-GND) => GND 接地 Sharp pin 5 (Vo) => Arduino A0 pin (空气质量数据通过电压模拟信号输出) Sharp pin 6 (Vcc) => 5V **实物图:** [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/IMG_20200406_225353-scaled.jpg)](https://www.lxx1.com/4536/img_20200406_225353) ## 五、Arduino程序 代码如下: ``` int dustPin=0; int ledPower=2; int delayTime=280; int delayTime2=40; float offTime=9680; float dustVal=0; float dustVot=0; float dustDensity=0; int Pm2_5 = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); pinMode(dustPin, INPUT); } void loop(){ // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor digitalWrite(ledPower,LOW); delayMicroseconds(delayTime); dustVal=analogRead(dustPin); delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); delayMicroseconds(offTime); delay(1000); // 将ADC输出值转换为模拟电压值 dustVot = dustVal*0.0049; /@@* * 将采集到的电压值转换为粉尘浓度 * 公式:浓度=[传感器输出模拟电压 * 0.1667 - 0.1] * 1000; * 公式根据根据官方规格书中的《Fig. 3 Output Voltage vs. Dust Density》图表计算得出 * 公式未经过校准,仅为理论计算值 * 得出粉尘的浓度,单位为微克每立方米 */ dustDensity = ((dustVot*0.1667)-0.1)*1000; // 将粉尘的浓度转换为PM2.5指数 // 参考标准为PM2.5中国标准 if (dustDensity < 35) { Pm2_5 = dustDensity * 1.4286; } else if (dustDensity < 150) { Pm2_5 = (dustDensity - 35)* 1.25 + 50 ; } else if (dustDensity < 250) { Pm2_5 = (dustDensity - 150)* 1 + 200 ; } else Pm2_5 = (dustDensity - 250)* 0.8 + 300 ; Serial.println(Pm2_5); } ``` 将程序编译后上传,打开串口,即可看到测量到的PM2.5数值。 [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_233437.jpg)](https://www.lxx1.com/4536/2020-04-06_233437) [![img](https://cdn-qiniu.lxx1.com/wp-content/uploads/2020/04/2020-04-06_233402.jpg)](https://www.lxx1.com/4536/2020-04-06_233402) ## 六、参考资料 1.规格书:<https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf> 2.夏普GP2Y1010AU0F灰尘传感器规格书本地免费下载:[夏普原版灰尘传感器GP2yY1010au规格书gp2y1010au_e](https://www.lxx1.com/4536/%e5%a4%8f%e6%99%ae%e5%8e%9f%e7%89%88%e7%81%b0%e5%b0%98%e4%bc%a0%e6%84%9f%e5%99%a8gp2yy1010au%e8%a7%84%e6%a0%bc%e4%b9%a6gp2y1010au_e) 3.Arduino ADC转换(将测量值转换为模拟电压值):<https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/> 4.[STM32平台下使用夏普GP2Y1010AU0F灰尘传感器测量PM2.5空气污染指数](https://www.lxx1.com/1595) 5.PM2.5指数分级:[PM2.5指数的中美标准差异](http://www.pm25.com/news/96.html) 6.传感器说明书:[灰尘传感器GP2Y1010AU0F使用说明.pdf](https://cdn-qiniu.lxx1.com/wp-content/uploads/2018/10/%E7%81%B0%E5%B0%98%E4%BC%A0%E6%84%9F%E5%99%A8GP2Y1010AU0F%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E1.pdf)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
科技爱好者博客
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交