日別アーカイブ: 2022年9月20日

PM2.5ダストセンサーDSM501Aが届いた

Aliで買ったダストセンサー(ほこりセンサー)が届いた。(こちら

発注から到着は11日。最後ヤマトさんが持ってきた。(購入時800円中500円送料)

商品のページだと可変抵抗器2こついているけど届いたのは一つしかない。公式にはもうデータシートなさそう。ネットに残っているデータシート見ると触るなと書いてあるし基盤の形も色々なのでフェイク品ではなく色々バージョンがあると信じて触ってみよう。

端子は銀色を左上において左から

#1Control Vout 1 control
#2Vout 2Vout 2 output
#3Vcc Positive power supply(5V)
#4Vout 1 Vout 1 output
#5GND Ground

附属品のコネクターケーブルの色はVCCとかと関係ない。

粒子の数が283mlあたりという微妙な単位で出てくるけど1立方フィートの1/1000ぽい。

リンクのドキュメントには置き方書いていない。ただ、ヒーターで上昇気流を発生させているから云々と書いてあってどこか他のサイトに縦置きして出入口をふさぐなというようなことが書いてあった。

レンズは汚れたら綿棒で拭けと。

配線等はこちらほぼそのまま参考に数値はとれた。あっているのか?

// DSM501A Pin3 → Arduino 5V
// DSM501A Pin5 → Arduino GND
// PM1.0以上を計測したい場合:DSM501A Pin2 → Arduino D8
// PM2.5以上を計測したい場合:DSM501A Pin4 → Arduino D8
// Wind Abaft Co., Ltd.

#include<string.h>
byte buff[2];
int pin = 8;//DSM501A input D8
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 30000; // データシートの計測方法が30秒のため
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
 
int i=0;
void setup()
{
  Serial.begin(9600);
  pinMode(8,INPUT);
  starttime = millis(); 
  Serial.println("Start");
}
void loop()
{
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy += duration;
  endtime = millis();
  if ((endtime-starttime) > sampletime_ms)
  {
    ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // データシートのグラフ参照
    Serial.print("lowパルス幅(30秒間):");
    Serial.print(lowpulseoccupancy);
    Serial.print("    Lowパルス幅の占有率[%]:");
    Serial.print(ratio);
    Serial.print("    DSM501A計測粒子数[pcs/283ml]:");
    Serial.println(concentration);
    Serial.print("    DSM501A計測粒子数[pcs/ml]:");// ここだけ追加
    Serial.println(concentration/283);
    lowpulseoccupancy = 0;
    starttime = millis();
  } 
}