最近看到小伙伴的文章,正好自己手中有一块 Arduino 在积灰,觉得难度应该不大,就淘宝上买了几个零件自己组装了一下。

需要的材料有

传感器的说明书在这里

传感器中心有个洞可以让空气自由流过,其内部对角安放着红外线发光二极管和光电晶体管,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量,网上资料说可以测量 0.8μm 以上的灰尘,但是我并没有在说明书上找到。

要注意的是这个传感器测量的是每立方空气中颗粒物的重量,基础单位是 $mg/m^3$,不是通常意义上的 PM2.5 或者 AQI。输出电压和灰尘浓度的换算关系见说明书的最后面。

安装电路图是 QQ20151228-0.png

传感器有六根线输入,颜色分别是蓝、绿、白、黄、黑、红,分别编号为 1-6,也对应上图里面的 1-6 的。

里面不太清楚的是3和6,他们需要和 Arduino 相连,连接方式是

不要忘记了里面 150欧的电阻和 220uf 的电容,有的电容是有正负极的,一般画了一条白线的引脚是负极,最好不要接反了。

小伙伴还画了一张实际的走线图,原图在这里

448286552.jpg

我一开始按照这个走线的,但是输出一直不对,后来发现了问题,就是

135215q0y1y300qpd3eqi7.png

图片来源

图上的红色和蓝色中间会断开,两部分是不通的,直接用两根杜邦线连上就好了,不再拆了,不过就是显的线很乱。

电脑端读取的 Arduino 程序是

int measurePin = 0; //Connect dust sensor to Arduino A0 pin
int ledPower = 2;   //Connect 3 led driver pins of dust sensor to Arduino D2
   
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); // power on the LED
  delayMicroseconds(samplingTime);
   
  voMeasured = analogRead(measurePin); // read the dust value
   
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);
   
  // 0 - 5V mapped to 0 - 1023 integer values
  // recover voltage  
  calcVoltage = voMeasured * (5.0 / 1024.0);
   
  // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
  // Chris Nafis (c) 2012
  dustDensity = 0.17 * calcVoltage - 0.1;
   
  Serial.print("Raw Signal Value (0-1023): ");
  Serial.print(voMeasured);
   
  Serial.print(" - Voltage: ");
  Serial.print(calcVoltage);
   
  Serial.print(" - Dust Density: ");
  // 换算成 ug/m^3
  Serial.print(dustDensity * 1000);
  Serial.println(" ug/m3 ");
  delay(1000);
}

我的实拍

psb (1).jpeg

psb (2).jpeg