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

摘要: 本教程实现功能:通过传感器获取当前空气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

TAG: 莓派5 CSI摄像头 Modbus-RTU-Relay-32CH 8寸USB电脑机箱副屏RGB/桌搭氛围屏LCD 1280x800带拾音功能 树莓派5 PCIe转USB HUB 2路2.5G RJ45 M.2 NVMe固态硬盘SSD扩展板 MP2.5G POE RTL8125 树莓派5 PCIE 转 2.5G以太网 POE HAT Pi5 LVGL 树莓派5 PoE 树莓派GSM天线 RP2350B-MINI-A picotool安装教程 树莓派UPS 10轴IMU传感器DOF ROS DSP蓝牙 加速计/陀螺仪/磁力计/温度气压计 树莓派5 SSD 树莓派10.85寸e-Paper电子墨水屏 1360&times;480适用于Arduino /Jetson /STM32 /ESP32 树莓派UGV Beast PT【越野履带】开源AI机器人云台小车OpenCV ESP32 S3迷你开发板 XIAO RP2040超小树莓派PICO开发板RP2040兼容Arduino 树莓派 5 PCIe转FFC扩展板四通道Pi5 4CH PCIe HAT ESP32-S3 lilygo ESP-IDF的下载和安装 USB转RS485