立即注册 找回密码

微雪课堂

搜索
微雪课堂 Arduino 查看内容

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

2015-4-25 15:31| 发布者: yanwl| 查看: 24003| 评论: 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. 连接效果如下图


程序:
#define        COV_RATIO                       0.2            //ug/mmm / mv
#define        NO_DUST_VOLTAGE                 400            //mv
#define        SYS_VOLTAGE                     5000           //ADC参考电压    

/*
I/O define
*/
const int iled = 2;                                           //drive the led of sensor
const int vout = 5;                                           //analog input

/*
variable
*/
float density, voltage;
int   adcvalue;

/*
private function
*/
int Filter(int m)
{
  static int flag_first = 0, _buff[10], sum;
  const int _buff_max = 10;
  int i;
  
  if(flag_first == 0)
  {
    flag_first = 1;

    for(i = 0, sum = 0; i < _buff_max; i++)
    {
      _buff[i] = m;
      sum += _buff[i];
    }
    return m;
  }
  else
  {
    sum -= _buff[0];
    for(i = 0; i < (_buff_max - 1); i++)
    {
      _buff[i] = _buff[i + 1];
    }
    _buff[9] = m;
    sum += _buff[9];
    
    i = sum / 10.0;
    return i;
  }
}


void setup(void)
{
  pinMode(iled, OUTPUT);
  digitalWrite(iled, LOW);                                     //iled default closed
  
  Serial.begin(9600);                                          //send and receive at 9600 baud
  Serial.print("*********************************** WaveShare ***********************************\n");
}

void loop(void)
{
  /*
  get adcvalue
  */
  digitalWrite(iled, HIGH);
  delayMicroseconds(280);
  adcvalue = analogRead(vout);
  digitalWrite(iled, LOW);
  
  adcvalue = Filter(adcvalue);
  
  /*
  covert voltage (mv)
  */
  voltage = (SYS_VOLTAGE / 1024.0) * adcvalue * 11;
  
  /*
  voltage to density
  */
  if(voltage >= NO_DUST_VOLTAGE)
  {
    voltage -= NO_DUST_VOLTAGE;
    
    density = voltage * COV_RATIO;
  }
  else
    density = 0;
    
  /*
  display the result
  */
  Serial.print("The current dust concentration is: ");
  Serial.print(density);
  Serial.print(" ug/m3\n");  
  
  delay(1000);
}


实现输出:

程序代码下载:

DustSensor.zip


468

顶一下

刚表态过的朋友 (468 人)

相关阅读

发表评论

最新评论

引用 游客 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)

Arduino

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

GMT+8, 2024-3-29 18:12 , Processed in 0.020485 second(s), 21 queries .

返回顶部