最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > 工具仪表 > 仪器仪表 >

雾霾远离我:PM2.5检测器自制解析

时间:2015-03-18 19:19来源:未知 作者:admin 点击:
各位心灵手巧的Maker小伙伴们,是时候动手做一个空气污染监测装置了。利用一个空气监测传感器搭配Arduino控制器和扩展板,马上就可以搭建出一个简易空气监测装置。即使没有那些专业的监测设备和砖家的报告,你也能科学客观的了解你时刻呼吸的空气质量! 硬件

 各位心灵手巧的Maker小伙伴们,是时候动手做一个空气污染监测装置了。利用一个空气监测传感器搭配Arduino控制器和扩展板,马上就可以搭建出一个简易空气监测装置。即使没有那些专业的监测设备和砖家的报告,你也能科学客观的了解你时刻呼吸的空气质量!

  硬件列表

  -Sharp GP2Y10 空气质量传感器

  - DFRduino UNO R3

  - IO 传感器扩展板 V7

  -转接板(如果没有转接板 可选150欧、220uF电容、面包板)

  -杜邦线

  步骤一:硬件连接

  雾霾远离我:PM2.5检测器自制解析

  图 1 完整连接图

  1、I/O扩展板插在UNO上

  2、粉尘传感器与转接板通过杜邦线连接

  3、转接板上标有分别标有D和A的两个接口

  D → 数字口 2

  A → 模拟口 0

  只要轻松的插上几根线就完成连接,是不是很方便呀?

  步骤二:烧入代码

  按照教程代码烧入DFRduino UNO R3

  完成之后,得到一串的数字是不是还是很模糊呀?我们先简单了解下粉尘传感器,可以对应代码一起看。

  (当然,如果觉得不需要了解的话,只需直接下载代码即可使用。)

  雾霾远离我:PM2.5检测器自制解析

  上图是个粉尘传感器的内部结构图以及硬件说明。

  可以从图中看出,在发射端,我们需要驱动一个红外发射管,也就是引脚3。对应程序中定义的ledPower。同样,我们也可以看出输出是引脚5,输出的是模拟量,对应到程序中的measurePin。

  那我们如何得到我们想要的值呢?

  下图截自 datasheet,你可以看出粉尘传感器的输出电压是几乎呈线性的。dustDensity = 0.17 * calcVoltage - 0.1; 这个公式曲线近似转换过来的(来自Chris Nafis)。这里dustDensity是粉尘密度值,单位mg/m3。calcVoltage是输出电压值。

  雾霾远离我:PM2.5检测器自制解析

  我们都知道输出0~5V电压对应UNO模拟口读出的是0~1023。calcVoltage = voMeasured * (5.0 / 1024.0); 这个公式就是模拟值转为电压值。voMeasured 模拟口输出量。

  雾霾远离我:PM2.5检测器自制解析

  根据datasheet,也就是上图可看出,我们需要开启内部的LED并等待280μs(微秒),之后再读取输出值。

  雾霾远离我:PM2.5检测器自制解析

  上图可以看出,整个脉冲持续时间为320μs。因此,我们还需再等待40μs,才能将LED关闭。

  以上就是对程序以及,粉尘传感器工作原理的简单说明。

  步骤三:没有转接板的情况

  雾霾远离我:PM2.5检测器自制解析

  还有个问题,有人说如果没有转接板怎么办,那就接着看上面这张图。

  看出来了吗?我们需要在引脚1外接一个150欧的电阻,并且并联一个220uF的电容。这也就是我们使用转接板的原因,把这个部分在转接板上完成了,大大方便了连线,也增加了稳定性。

  下面来看下实物图上的引脚位置,如果是需要自己外接电阻、电容的朋友们请继续往下看。“

  雾霾远离我:PM2.5检测器自制解析

  粉尘传感器对应的Arduino引脚:

  雾霾远离我:PM2.5检测器自制解析

  雾霾远离我:PM2.5检测器自制解析

  雾霾远离我:PM2.5检测器自制解析

  照着连就可以了,连接完成之后,同样下载教程的样例代码。

  PM2.5检测器 代码如下:

  int measurePin = 0; // 连接模拟口0

  int ledPower = 2; // 连接数字口2

  int samplingTime = 280;

  int deltaTime = 40;

  int sleepTime = 9680;

  float voMeasured = 0;

  float calcVoltage = 0;

  float dustDensity = 0;

  void setup(){

  Serial.begin(9600);

  pinMode(ledPower,OUTPUT);

  }

  void loop(){

  digitalWrite(ledPower,LOW); //开启内部LED

  delayMicroseconds(samplingTime); // 开启LED后的280us的等待时间

  voMeasured = analogRead(measurePin); // 读取模拟值

  delayMicroseconds(deltaTime); // 40us等待时间

  digitalWrite(ledPower,HIGH); // 关闭LED

  delayMicroseconds(sleepTime);

  // 0 - 5V mapped to 0 - 1023 integer values

  // recover voltage (责任编辑:admin)

织梦二维码生成器
顶一下
(1)
33.3%
踩一下
(2)
66.7%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容