极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 50786|回复: 27

Microduino UNO结合APM灰尘传感器测PM2.5

[复制链接]
发表于 2014-9-21 14:24:58 | 显示全部楼层 |阅读模式
本帖最后由 topdog 于 2015-3-23 11:34 编辑

      PM2.5是指大气中直径小于或等于2.5微米的颗粒物,也称为可入肺颗粒物。它的直径还不到人的头发丝粗细的1/20。虽然PM2.5只是地球大气成分中含量很少的组分,但它对空气质量和能见度等有重要的影响。与较粗的大气颗粒物相比,PM2.5粒径小,富含大量的有毒、有害物质且在大气中的停留时间长、输送距离远,因而对人体健康和大气环境质量的影响更大。目前受到人们广泛的关注。国内专利编号3531917的APM灰尘传感器测为大家提供了比较实惠的PM2.5测量工具。购买地址可以作为“高大上”日本神荣PPD42NS或者美国GE的替代品。 原理结构如下:
  
底部heater是个电阻,利用通电后电阻焦耳发热的原理,会在壳体内部产生上升气流。(因此必须垂直的姿势使用。)LED发出红外线脉冲波,遇到空气里的颗粒物反射红外线,通过lens透镜放大传递给PT检测。它的连线很简单一般只接d1连接GND,d3连接5v,d4连接PWM功能的管脚,本实验我们用pin8。lens透镜约6 个月一次清洁一次,在做镜片表面清洁时,请不要 使用有机溶剂或洗洁剂,请不要用硬物擦伤,划伤镜片表面。 有关镜片表面的清洁,可以用棉棒醮上洁净水擦拭后,再用干燥的棉棒擦拭。
         Microduino UNO是一款设计非常新颖的Arduino产品,它可以灵活的更换核心,使原来的管脚赋予新的功能和活力。譬如笔者使用了Microduino core+核心,PIN0、1就是Serial;另外PIN2、3就是Serial1了,支持六路PWM输出端口,分别为7,8,9,10,22和23。UNO购买地址core+购买地址FT232RL购买地址
  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-9-21 14:25:45 | 显示全部楼层
本帖最后由 topdog 于 2016-1-3 22:50 编辑

一楼代码
  1. /*
  2. 作者:topdog
  3. 时间:2014年9月21日
  4. 使用器材:Microduino UNO;CORE+;FT232RL;APM灰尘传感器.
  5. 接线:   UNO                  APM
  6. 1,        GND                  D1
  7. 2,        5V                   D3
  8. 3,        PIN8                 D4
  9. */

  10. int pin = 8;
  11. int sampling=1;
  12. unsigned long duration;//持续时间
  13. unsigned long starttime;
  14. unsigned long sampletime_ms = 30000;//抽样时间 30*1000 30秒就是30000毫秒(ms)
  15. unsigned long lowpulseoccupancy = 0; //low pulse occupancy 占有率
  16. float ratio = 0;//比率
  17. float concentration = 0;//浓度
  18. const float pm25coef=0.00207916725464941;//浓度换算成ug/m^3
  19. unsigned long pm25val;


  20. void setup() {
  21.   Serial.begin(9600);
  22.   pinMode(8,INPUT);
  23.   starttime = millis();
  24. }

  25. void loop() {  
  26.   if(sampling==1)
  27.   {
  28.     duration = pulseIn(pin, LOW);
  29.     lowpulseoccupancy = lowpulseoccupancy+duration;

  30.     if ((millis()-starttime) > sampletime_ms)
  31.    {
  32.     ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100 整数百分比
  33.     concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve使用说明书曲线
  34.     pm25val=pm25coef*concentration;
  35.    
  36.     Serial.print("lowpulseoccupancy=");
  37.     Serial.print(lowpulseoccupancy);
  38.     Serial.print(",");
  39.     Serial.print("ratio=");
  40.     Serial.print(ratio);
  41.     Serial.print(",");
  42.     Serial.print("concentration=");
  43.     Serial.println(concentration);
  44.    
  45.     Serial.print("PM2.5=");
  46.     Serial.print(pm25val);
  47.     Serial.println("ug/m^3");
  48.    
  49.     lowpulseoccupancy = 0;  //复位
  50.     starttime = millis();  
  51.   }
  52. }
  53. }
复制代码



回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 14:26:12 | 显示全部楼层
本帖最后由 topdog 于 2014-9-21 15:26 编辑

二楼说明,原理阐述以后就是代码的实现,本程序主要应用Arduino的PWM的功能。特别是pulseIn()脉冲宽度测量函数。本实验中使用duration = pulseIn(pin, LOW);读取PIN8引脚的脉冲LOW。如果value是LOW,pulseIn()会等待引脚变为LOW,开始计时,再等待引脚变为HIGH并停止计时。返回脉冲的长度,单位微秒,默认为1ms。如果在指定的时间内无脉冲函数返回。 此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。大家要根据实际情况调整。(1秒=1000毫秒=1000000微秒)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 14:26:46 | 显示全部楼层
本帖最后由 topdog 于 2014-9-21 15:22 编辑

三楼串口数据显示的实验结果。笔者特意吸了支烟来看传感器的反映,第一行pm2.5为0,随着香烟烟雾的迷茫数据逐步升高,等烟灭了,pm2.5数值逐步回落。大家可以参照上海pm2.5官方发布的网址的数据对比一下实验结果。当然我们还可以结合OLED,sd卡模块做成手持设备,或者增加无线模块把数据上传网站。实现更多的功能。

那么今天就交流到这里,有不恰当的地方请大家指正。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-9-21 16:01:36 | 显示全部楼层
我喜欢这篇文章,写作简洁明快,整个应用的传感器和所用到的mcu,软件完整的提供出来,想模仿制作就方便得多,我一直想做一个空气监测的应用,因为对传感器的选择,和使用感到无从下手,看了这篇文章后决定也模仿楼主的方法制作一个,还请楼主多加帮助。谢谢
回复 支持 反对

使用道具 举报

发表于 2014-9-21 16:02:23 | 显示全部楼层
赞赞赞            
回复 支持 反对

使用道具 举报

发表于 2014-9-21 16:20:15 | 显示全部楼层
赞赞赞!{:soso_e113:}
回复 支持 反对

使用道具 举报

发表于 2014-9-21 19:29:59 | 显示全部楼层
Good {:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2014-9-21 20:58:17 | 显示全部楼层
本帖最后由 Super169 于 2014-9-21 21:02 编辑

我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentration 的變化由 52.40 至 16779.27, 相信也是在同一地方吧, 但短時間內就有 三百多倍的變化了.




用來量度的話, 應該相信 52.40 還是 16779.27, 還是取平均數?
細心看數字的變化, 非一般濾波可以找出結果.

測量的目的應該是要找出指標的數值吧, 否則測量儀器就顯得沒價值了, 跟隨機數沒分別.
由於樓主加入了吐煙的變化, 跟我的可能不同.

但樓主有試過不吐煙, 在密閉的室內測試, 結果會是如何?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-9-21 21:09:27 | 显示全部楼层
赞赞赞赞,内容很丰富啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 21:09:35 | 显示全部楼层
Super169 发表于 2014-9-21 20:58
我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentrati ...

我的测量环境是在桌面,空气浓度的变化剧烈是可能的。如果那个盒子扣住传感器,有剧烈波动是不正常的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 21:16:43 | 显示全部楼层
Super169 发表于 2014-9-21 20:58
我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentrati ...

实验数据表明的是吸烟的环境,我吸了口烟碰到传感器上,反应是剧烈的,而且出现了波峰。我和@问天鼓讨论过是否要添加滤波程序的问题,结论是没有必要。lowpulseoccupancy = lowpulseoccupancy+duration;也已经起到了一定的反馈作用。
回复 支持 反对

使用道具 举报

发表于 2014-9-21 23:05:48 | 显示全部楼层
赞赞赞赞赞!5赞!!!!
回复 支持 反对

使用道具 举报

发表于 2014-9-22 09:46:12 | 显示全部楼层
topdog 发表于 2014-9-21 21:16
实验数据表明的是吸烟的环境,我吸了口烟碰到传感器上,反应是剧烈的,而且出现了波峰。我和@问天鼓讨论过 ...

沒有正常的數據變化資料, 很難確定吐煙後的影響.  
正如我的情況, 在沒其他因素下, 在幾近密閉的室內, 也會有數十倍的變化.

請問 如果你不向它吐煙, 放在沒其他因素影響的室內, 讓它量度室內的空氣情況, 會有多大的變化?
回复 支持 反对

使用道具 举报

发表于 2014-9-22 13:21:01 | 显示全部楼层
很详细 赞一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 10:32 , Processed in 0.041204 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表