Aliで買ったダストセンサー(ほこりセンサー)が届いた。(こちら)
発注から到着は11日。最後ヤマトさんが持ってきた。(購入時800円中500円送料)
商品のページだと可変抵抗器2こついているけど届いたのは一つしかない。公式にはもうデータシートなさそう。ネットに残っているデータシート見ると触るなと書いてあるし基盤の形も色々なのでフェイク品ではなく色々バージョンがあると信じて触ってみよう。
端子は銀色を左上において左から
#1 | Control | Vout 1 control |
#2 | Vout 2 | Vout 2 output |
#3 | Vcc | Positive power supply(5V) |
#4 | Vout | 1 Vout 1 output |
#5 | GND | 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();
}
}