Air Quality Monitoring

Automatically measuring and graphing Air Quality with an inexpensive device (Shinyei Model PPD42NS Dust Sensor)
Copyright 2012, Chris Nafis

Table of Contents


With allergies and asthma I'm interested in both the indoor and outdoor air quality. I heat with a Quadrafire woodstove. It is suppose to be a clean stove. I was interested in the impact on both my inside air (ie. ash/dust) and outside air (smoke). New York State monitors the air quality at several locations around the State. Certified Allergy & Asthma Consultants in Albany NY published daily pollen counts. The American Lung Association has a great article called State of the AIR that talks about Particle Pollution. I have several weatherstations collecting data ( KNYREXFO1 [barn roof], KNYCLIFT1 [garage roof] ),

There are several citizen group projects that are developing open source equipment (e.g. Air Quality Egg). There are several recent discussions about adding a Particulate sensor. The Egg Project aims to give citizens a way to participate in the conversation about air quality. It is composed of a sensing device that measures the air quality in the immediate environment and an on-line community that is sharing this information in real-time. It is a community-developed, open source project that is driven by people who care about the air they breathe.


The $290 DC1100 Pro Air Quality is a true Laser Particle Counter with two different size ranges. The small channel (0.5> Micron) should see bacteria and mold. The Large channel (2.5> micron) should see dust and pollen. The LCD display constantly shows bargraphs and values for the small and large particles. The unit saves 30 days of air quality data. I ordered the unit with the PC Interface Option and connected it to an Arduino Ethernet so I can automatically log the data to Pachube. That way air quality alerts can be triggered and sent to twitter and my cell phone.

The unit is amazingly sensitive. It easily sees the dust kicked up from walking on a rug or the vapors from cooking. Looking at the graphs below you can see some interesting things. First you can see that things settle down at night when people are not walking around. You can see around noon that my daughter cooked lunch. It's surprising how long it takes for the fine particles to settle down.


Set Up

The hardware set-up is very easy. If you order the Grove Shield, you just need to put the stacking headers on the Arduino Ethernet and install the shield. Plug the Grove dust connector into Digital Port 8. Without the shield, you can just cut the 4-pin connector off, and solder header pins to the wires.
JST Pin 1 (Black Wire)  => Arduino GND
JST Pin 3 (Red wire)    => Arduino 5VDC
JST Pin 4 (Yellow wire) => Arduino Digital Pin 8
PPD42NS Spec. Sheet

The interface is fairly simple. You just measure how long the digital signal on Pin 8 is low during the 30 second sample time. This ratio is used in a transfer function to calculate the particles per 0.01 cubic feet.


The Arduino grovedust.ino sketch demonstrates reading the Grove sensor and printing the low pulse duration, the ratio, and estimated particles per 0.01 cubic feet. The grovedustpachube.ino sketch sends the estimated particles per 0.01 cubic feet and the low pulse ratio to a Pachube feed. You need to edit this sketch to use your own feed id and key.
 Interface to Shinyei Model PPD42NS Particle Sensor
 Program by Christopher Nafis 
 Written April 2012
 JST Pin 1 (Black Wire)  => Arduino GND
 JST Pin 3 (Red wire)    => Arduino 5VDC
 JST Pin 4 (Yellow wire) => Arduino Digital Pin 8

int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

void setup() {
  starttime = millis();

void loop() {
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;

  if ((millis()-starttime) > sampletime_ms)
    ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
    lowpulseoccupancy = 0;
    starttime = millis();


I digitized the Spec. Sheet Characteristic Chart and fit a cubic polynomial to it. I got the following equation:
y = 1.1x^3 - 3.8x^2 + 520x + 0.62


My previous experience showed that cooking puts a lot of particulates into the air. So for a quick test, I fried some bacon on the stove and logged the results from the two sensors. I need to get more data from normal days. The Dylos is very sensitive at low particle counts. The Sharp Dust Sensor using the Arduino A/D turned out not to be too sensitive to low levels.

The Fry pan Bacon test :-)



Other types of real-time data have sites that users can share their data with the global Internet Community. For example, Weather Underground is a great place to store my weatherstation data. StrikeStar is wonderful for processing distributed lightning detectors data to produce real-time maps.

Pachube ("patch-bay") connects people to devices, applications, and the Internet of Things. As a web-based service built to manage the world's real-time data, Pachube gives people the power to share, collaborate, and make use of information generated from the world around them.

This is a perfect repository for our Dylos Air Quality, Shinyei Air Quality, and Radon data. It provides a simple HTTP interface to post data and applications which generate charts that can be included on your web pages:



Sharp Sensor


Grove Dust Sensor


This project is for experimental use only. The user assumes all responsibilities for assembly, installation, and use. This circuit is provided without warranty and the author makes no claim that this device will work in any particular application. Do not use in applications where failure or incorrect operation could jeopardize someone's safety. This schematic is provided for noncommercial use only.