Microduino UNO结合APM灰尘传感器测PM2.5
本帖最后由 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购买地址。
本帖最后由 topdog 于 2016-1-3 22:50 编辑
一楼代码
/*
作者:topdog
时间:2014年9月21日
使用器材:Microduino UNO;CORE+;FT232RL;APM灰尘传感器.
接线: UNO APM
1, GND D1
2, 5V D3
3, PIN8 D4
*/
int pin = 8;
int sampling=1;
unsigned long duration;//持续时间
unsigned long starttime;
unsigned long sampletime_ms = 30000;//抽样时间 30*1000 30秒就是30000毫秒(ms)
unsigned long lowpulseoccupancy = 0; //low pulse occupancy 占有率
float ratio = 0;//比率
float concentration = 0;//浓度
const float pm25coef=0.00207916725464941;//浓度换算成ug/m^3
unsigned long pm25val;
void setup() {
Serial.begin(9600);
pinMode(8,INPUT);
starttime = millis();
}
void loop() {
if(sampling==1)
{
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0);// Integer percentage 0=>100 整数百分比
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve使用说明书曲线
pm25val=pm25coef*concentration;
Serial.print("lowpulseoccupancy=");
Serial.print(lowpulseoccupancy);
Serial.print(",");
Serial.print("ratio=");
Serial.print(ratio);
Serial.print(",");
Serial.print("concentration=");
Serial.println(concentration);
Serial.print("PM2.5=");
Serial.print(pm25val);
Serial.println("ug/m^3");
lowpulseoccupancy = 0;//复位
starttime = millis();
}
}
}
本帖最后由 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微秒)
本帖最后由 topdog 于 2014-9-21 15:22 编辑
三楼串口数据显示的实验结果。笔者特意吸了支烟来看传感器的反映,第一行pm2.5为0,随着香烟烟雾的迷茫数据逐步升高,等烟灭了,pm2.5数值逐步回落。大家可以参照上海pm2.5官方发布的网址的数据对比一下实验结果。当然我们还可以结合OLED,sd卡模块做成手持设备,或者增加无线模块把数据上传网站。实现更多的功能。
那么今天就交流到这里,有不恰当的地方请大家指正。
我喜欢这篇文章,写作简洁明快,整个应用的传感器和所用到的mcu,软件完整的提供出来,想模仿制作就方便得多,我一直想做一个空气监测的应用,因为对传感器的选择,和使用感到无从下手,看了这篇文章后决定也模仿楼主的方法制作一个,还请楼主多加帮助。谢谢 赞赞赞 赞赞赞!{:soso_e113:} Good {:soso_e179:} 本帖最后由 Super169 于 2014-9-21 21:02 编辑
我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentration 的變化由 52.40 至 16779.27, 相信也是在同一地方吧, 但短時間內就有 三百多倍的變化了.
用來量度的話, 應該相信 52.40 還是 16779.27, 還是取平均數?
細心看數字的變化, 非一般濾波可以找出結果.
測量的目的應該是要找出指標的數值吧, 否則測量儀器就顯得沒價值了, 跟隨機數沒分別.
由於樓主加入了吐煙的變化, 跟我的可能不同.
但樓主有試過不吐煙, 在密閉的室內測試, 結果會是如何?
赞赞赞赞,内容很丰富啊 Super169 发表于 2014-9-21 20:58 static/image/common/back.gif
我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentrati ...
我的测量环境是在桌面,空气浓度的变化剧烈是可能的。如果那个盒子扣住传感器,有剧烈波动是不正常的。 Super169 发表于 2014-9-21 20:58 static/image/common/back.gif
我也買了一個 PPD42NS, 測量的結果就跟你的差不多, 同一地方, 變化非常大.
就以你的結果為例, concentrati ...
实验数据表明的是吸烟的环境,我吸了口烟碰到传感器上,反应是剧烈的,而且出现了波峰。我和@问天鼓讨论过是否要添加滤波程序的问题,结论是没有必要。lowpulseoccupancy = lowpulseoccupancy+duration;也已经起到了一定的反馈作用。 赞赞赞赞赞!5赞!!!! topdog 发表于 2014-9-21 21:16 static/image/common/back.gif
实验数据表明的是吸烟的环境,我吸了口烟碰到传感器上,反应是剧烈的,而且出现了波峰。我和@问天鼓讨论过 ...
沒有正常的數據變化資料, 很難確定吐煙後的影響.
正如我的情況, 在沒其他因素下, 在幾近密閉的室內, 也會有數十倍的變化.
請問 如果你不向它吐煙, 放在沒其他因素影響的室內, 讓它量度室內的空氣情況, 會有多大的變化?
;P 很详细 赞一个:)
页:
[1]
2