As part of a project for Sensing City I had been helping with the evaluation of PM2.5/PM10 sensors for monitoring atmospheric pollution levels. For my DIY IoT projects I use the SeeedStudio Grove system which has a couple of dust sensors. The Grove Dust Sensor which is based on a Shinyei Model PPD42 Particle Sensor looked like a cost effective option.
Bill of Materials for my engineering proof of concept (Prices as at June 2015)
I initially got the sensor running with one of my Arduino Uno R3 devices using the software from the seeedstudio wiki and the ratio values returned by my Netduino Plus 2 code (see below) look comparable. I have purchased a couple of extra dust sensors so I can run the Arduino & Netduino devices side by side. I am also trying to source a professional air quality monitor so I can see how reliable my results are
The thread ” (0x2) has exited with code 0 (0x0).
Ratio 0.012
Ratio 0.012
Ratio 0.020
Ratio 0.008
Ratio 0.031
Ratio 0.014
Ratio 0.028
Ratio 0.012
Ratio 0.013
Ratio 0.018
public class Program { private static long pulseStartTicks = 0; private static long durationPulseTicksTotal = 0; readonly static TimeSpan durationSample = new TimeSpan(0, 0, 0, 30); readonly static TimeSpan durationWaitForBeforeFirstSample = new TimeSpan(0, 0, 0, 30); public static void Main() { InterruptPort sensor = new InterruptPort(Pins.GPIO_PIN_D8, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth); sensor.OnInterrupt += sensor_OnInterrupt; Timer sampleTimer = new Timer(SampleTimerProc, null, durationWaitForBeforeFirstSample, durationSample); Thread.Sleep(Timeout.Infinite); } static void sensor_OnInterrupt(uint data1, uint data2, DateTime time) { if (data2 == 1) { long pulseDuration = time.Ticks - pulseStartTicks; durationPulseTicksTotal += pulseDuration; } else { pulseStartTicks = time.Ticks; } } static void SampleTimerProc(object status) { double ratio = durationPulseTicksTotal / (double)durationSample.Ticks ; durationPulseTicksTotal = 0; Debug.Print("Ratio " + ratio.ToString("F3")); } }
Next steps will be, adding handling for edges cases, converting the ratio into a particle concentration per litre or 0.1 cubic feet, selecting a weather proof enclosure, smoothing/filtering the raw measurements, and uploading the values to Xively for presentation and storage.