#include <math.h>
|
|
|
|
int DustSensePin = 14;
|
|
unsigned long duration;
|
|
unsigned long starttime;
|
|
unsigned long sampletime_ms = 30000;//sample 30s ;
|
|
unsigned long lowpulseoccupancy = 0;
|
|
float ratio = 0;
|
|
float concentration = 0;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(9600);
|
|
pinMode(DustSensePin,INPUT);
|
|
starttime = millis();//get the current time;
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
duration = pulseIn(DustSensePin, LOW);
|
|
lowpulseoccupancy = lowpulseoccupancy+duration;
|
|
|
|
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s
|
|
{
|
|
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
|
|
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve
|
|
Serial.print(lowpulseoccupancy);
|
|
Serial.print(",");
|
|
Serial.print(ratio);
|
|
Serial.print(",");
|
|
Serial.println(concentration);
|
|
lowpulseoccupancy = 0;
|
|
starttime = millis();
|
|
}
|
|
}
|