用户名 立即注册 找回密码

微雪课堂

搜索
微雪课堂 Arduino 查看内容

Arduino系列教程八:PM2.5灰尘传感器

2015-4-25 15:31| 发布者: yanwl| 查看: 26029| 评论: 8

摘要: 本教程实现功能:通过传感器获取当前空气PM2.5的值,并通过串口发送给上位机显示。PM2.5传感器概述: 可以检测直径大于0.8um的灰尘颗粒浓度,作为一名创客,想了解空气质量?想DIY一个PM2.5检测仪?想设计一个空气净 ...

本教程实现功能:通过传感器获取当前空气PM2.5的值,并通过串口发送给上位机显示。

PM2.5传感器概述:

可以检测直径大于0.8um的灰尘颗粒浓度,作为一名创客,想了解空气质量?想DIY一个PM2.5检测仪?想设计一个空气净化器?,那么这款传感器就是你的必备神器

硬件准备:

硬件连接:
1. 将IO Expansion 扩展板接入UNO PLUS,用跳线帽将两个板子的电压都配置为 5V
2. Dust Sensor 与IO Expansion的连接
VCC   --   VCC
GND  --   GND
AOUT --  A5
ILED  --  D2
3. 连接效果如下图


程序:
01#define        COV_RATIO                       0.2            //ug/mmm / mv
02#define        NO_DUST_VOLTAGE                 400            //mv
03#define        SYS_VOLTAGE                     5000           //ADC参考电压   
04 
05/*
06I/O define
07*/
08const int iled = 2;                                           //drive the led of sensor
09const int vout = 5;                                           //analog input
10 
11/*
12variable
13*/
14float density, voltage;
15int   adcvalue;
16 
17/*
18private function
19*/
20int Filter(int m)
21{
22  static int flag_first = 0, _buff[10], sum;
23  const int _buff_max = 10;
24  int i;
25   
26  if(flag_first == 0)
27  {
28    flag_first = 1;
29 
30    for(i = 0, sum = 0; i < _buff_max; i++)
31    {
32      _buff[i] = m;
33      sum += _buff[i];
34    }
35    return m;
36  }
37  else
38  {
39    sum -= _buff[0];
40    for(i = 0; i < (_buff_max - 1); i++)
41    {
42      _buff[i] = _buff[i + 1];
43    }
44    _buff[9] = m;
45    sum += _buff[9];
46     
47    i = sum / 10.0;
48    return i;
49  }
50}
51 
52 
53void setup(void)
54{
55  pinMode(iled, OUTPUT);
56  digitalWrite(iled, LOW);                                     //iled default closed
57   
58  Serial.begin(9600);                                          //send and receive at 9600 baud
59  Serial.print("*********************************** WaveShare ***********************************\n");
60}
61 
62void loop(void)
63{
64  /*
65  get adcvalue
66  */
67  digitalWrite(iled, HIGH);
68  delayMicroseconds(280);
69  adcvalue = analogRead(vout);
70  digitalWrite(iled, LOW);
71   
72  adcvalue = Filter(adcvalue);
73   
74  /*
75  covert voltage (mv)
76  */
77  voltage = (SYS_VOLTAGE / 1024.0) * adcvalue * 11;
78   
79  /*
80  voltage to density
81  */
82  if(voltage >= NO_DUST_VOLTAGE)
83  {
84    voltage -= NO_DUST_VOLTAGE;
85     
86    density = voltage * COV_RATIO;
87  }
88  else
89    density = 0;
90     
91  /*
92  display the result
93  */
94  Serial.print("The current dust concentration is: ");
95  Serial.print(density);
96  Serial.print(" ug/m3\n"); 
97   
98  delay(1000);
99}


实现输出:

程序代码下载:

DustSensor.zip


501

顶一下

刚表态过的朋友 (501 人)

相关阅读

发表评论

最新评论

引用 游客 2020-6-3 15:21
: 呵呵,你这源代码有问题啊。你定义flag_first=0了,肯定执行if里的语句,而if里没对m操作啊
这条语句只会执行一次,就是初始化的时候为0
引用 游客 2019-3-19 09:39
上面评论的哥呀,这个程序是串口输出的和屏幕无关 arduino 不是c51
引用 游客 2018-6-2 02:22
老的U8glib 有问题,有新的吗?
引用 游客 2018-5-5 16:47
呵呵,你这源代码有问题啊。你定义flag_first=0了,肯定执行if里的语句,而if里没对m操作啊
引用 游客 2018-4-6 10:51
到底能用不?
引用 游客 2018-3-23 01:47
以前有温室,PM2.5 和LED display 一起的,还有这个吗?
引用 yjx189 2016-6-19 15:44
你这源代码有问题,写进去后,液晶屏的读数是死数,不会随着天气而变化!请问,有正确的,能用的源代码吗?
引用 啃兔子的棒棒糖 2015-11-28 16:39
新人求问STC89C52可以连接这个传感器么?

查看全部评论(8)

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2025-4-18 18:11 , Processed in 0.026867 second(s), 27 queries .

返回顶部