© 2016, David Brooks
Measuring Particulates in the Air Using Inexpensive Sensors
(Supported by the Toyota USA Foundation through IESRE's Facilitating Environmental Science Inquiry and Research for
Students and Educators project)
NOTE: This is a preliminary description of using Arduino microcontrollers and inexpensive
sensors to count particulates in the atmosphere. I have put it online not because it is finished (I haven't included
any data yet), but because there
has been a lot of interest in this project. Please provide feedback!
I should also note that although I have written my own code and designed my own setup for a fan-aspirated particle counter,
a great deal of work is already available online about these sensors – see the References section at the end of the
Particulates are small particles, roughly one to a few tens of micrometers in size, suspended in the air. They are individually
invisible but in large concentrations, they may give a "color" to the atmosphere.
The extent to which particulates are present in the atmosphere
are an important indicator of air quality. They come from multiple sources, natural
|Source||approximate size range|
|cigarette smoke||1 µ|
|windblown dust||10 µ|
The health hazards of particulates depends on their composition and size. The smaller
the particle, the deeper it can penetrate into the lungs when breathed in. In order of increasing health concern:
Many countries, including the U.S., have established standards for concentrations of two particle size
ranges, <=2.5µ (PM2.5)
and >2.5µ to 10µ (PM10), as components of an Air Quality Index (AQI).
- Inhalable dust – particulates of size 100µ or less which can enter the nose
and mouth during normal breathing.
- Thoracic dust – particulates of size 10µ or less which can
reach the lungs.
- Respirable dust – particulates of size 2.5µ or less which can
penetrate into the gas exchange region of the lungs.
Commercial particle detectors operate on two different principles:
(1) Drawing a known volume of air through a filter and weighing the particulates collected on the filter;
(2) Shining a laser through a chamber where air is flowing and examining the effects of light scattering
by particulates flowing through the chamber.
These detectors are expensive, ranging in price from a few hundred dollars to thousands of dollars. Are there
less expensive alternatives that will still provide usable data? There are three possibilities of which I am aware, from Sharp (GP2Y1010AU0F), Shinyei (PPD42NS), and
Amphenol/Telaire (SM- PWM-01A). These all work on the same principle. Light from a near-IR LED shines into a small
chamber through which air is flowing.
When a particle passes through the chamber, it scatters light from the LED and some of that scattered light is focused on a photodetector, which generates a
brief voltage pulse.
Any of these inexpensive sensors (~$20) can be interfaced with an Arduino microcontroller. I have tested the Sharp
and Amphenol/Telaire sensors and have concluded that the Amphenol/Telaire sensor is
the best choice for a particulate sampling project. Unlike the Sharp sensor, which requires an external capacitor and resistor, the Amphenol/Telaire
does not require any external components. It is readily available in small quantities from a reputable
U.S. electronics distributor (www.mouser.com). The Shinyei sensor is similar to the Amphenol/Telaire sensor, but
there are problems with its source. This sensor was designed for use in some appliances by a Japanese
firm which does not serve the retail market. The sensor is available through a Chinese company which has apparently
reverse engineered and manufactured this product without authorization. I would rather not deal with such a product. It is possible
that the Amphenol/Telaire sensor is also modeled after the Shinyei, but at least it is not a blatant copy of
All three of these inexpensive sensors are intended
for indoor use. The Amphenol/Telaire and Shinyei sensors include a resistor near
the bottom air intake port. The resistor is heated by the current flowing through it,
thereby generating a convection current
which moves air upward through the chamber. For indoor use, the sensor can be used as-is, mounted
vertically. For outdoor use, I believe it is necessary to actively draw air through the sensor chamber with
a small fan. If this is done, the heater resistor can simply be broken or cut. (I didn't have any luck trying to
unsolder it from the pc board.) This isn't necessary, but the reduced power requirement may be significant
if this device is used outdoors with a fan and an Arduino powered by a battery supply. For consistency, probably it is a good idea to
use a fan for both indoor and outdoor use.
The Amphenol/Telaire sensor can be powered from the +5V pin on an Arduino Uno. The current draw given in the
specifications is "<100 mA," a current which is at least twice as high as should be drawn from an
Arduino digital pin, possibly even with the heater resistor removed. (I haven't tested the current draw with and without the resistor.)
The Amphenol/Telaire sensor requires code which can detect negative pulses generated when
particulates scatter light toward the photodetector. This might seem to be a difficult coding problem,
but the Arduino language
includes a function, pulseIn(), which detects voltage pulses and measures their length – exactly what is needed.
Over a fixed sampling time, 30 seconds recommended, the ratio of the total length of all pulses
detected to the sampling
time, the "pulse occupancy ratio," is then a measure of the number of particulates passing through the
This measurement technique can in some sense provide the basis for a calibration
in terms of particulates/m3 or, with assumptions about the composition of
µg/m3 (the units specified by the EPA for calculating the particulate contribution to the Air Quality Index. The
Amphenol/Telaire sensor has outputs for measuring "small" and "large" particulates, but the actual size distribution
of particulates being measured is unknown.
The spec sheet claims the ability to measure a minimum particle size down to 1µm,
which it describes as an "average dust size" for cigarette smoke. It describes "house dust" as having
an average size of 20µm.
A graph relating P1 (small particle) output characteristics to cigarette smoke particulate concentration is given in the
application notes for the sensor, but there is no graph for P2 (large particle) output. Indeed, even the $300
Dylos DC1100 particle counter, which is a true laser counter, only separates "small" and "large" particles,
although the "large" particle
output is allegedly calibrated to measure particulates 2.5 µ and above.
Based on the manufacturer-supplied image below, it is clear that the Amphenol/Telaire sensor cannot consistently count individual particles.
This sensor, which depends on measuring the length of voltage pulses,
cannot differentiate between one large particle
and some collection of two or more large and/or small particles overlapping in their passage through the
chamber. Based on the description of how
pulses are generated, it seems like a good idea to write code that captures information about the length of
pulses detected as well as the number of pulses. The "pulse occupancy" percent, as defined in the sensor's data sheet, is a conflation of
the number of pulses and the "size" of individual or "clumped" particles. As a result, it is not possible definitively to separate number and size.
Considering how these devices work, "calibrations" must be considered to be only approximations. It may be worth trying to calibrate these sensors relative
to PM2.5 or PM10 data from an "official" air quality reporting site. But, in the end, it may be that these sensors
are useful only in some relative sense, providing information about how particulate concentrations vary in space and time without
providing absolute particle counts within well-defined size ranges. This limitation in no way detracts from the value of the data they can provide.
|Amphenol/Telaire SM- PWM-01A Dust Sensor
I have replaced the 5-pin connector which came on this sensor
with a 4-pin male header for a cable I happened to have on hand. Pin 5, the leftmost pin, is not used.
From right to left,
pin 1: GND
pin 2: P2 signal out (large particulates, 3-10 µm)
pin 3: +5V
pin 4: P1 signal out (small particulates, 1-2 µm)
pin 5: (not used)
Setting Up the Amphenol/Telaire Sensor for Outdoor Particulate Monitoring
As noted above, I believe this sensor should be fan-aspirated when used outdoors. I mounted the sensor
at one end of a 2" Schedule 40 45° PVC elbow, readily available from home supply
stores. To do this I cut a disk from 1/8" plywood, as shown in the lefthand image. I cut through the disk
to expose the lower air input port and the entire chamber. The disk blocks the original air output ports
at the top of the device. I cut a new output port with a drill and Dremel tool in the top of the sensor
housing. Then I attached the sensor to the disk and the disk to one end of the PVC elbow with
silicone caulk, as shown in the rightmost image.
To force air through the sensor, I used a a 60mm-diameter 5V fan from the surplus electronics
supplier www.allelectronics.com, described as used equipment removed from laptops (CAT# CF-444U, $2.00 each). This fan draws
0.15A at 5V.
It will also run a little more slowly
from the 3.3V Arduino Uno supply pin, which is OK for this application even with the sensor powered from
the +5V pin. (These two pins can safely supply a total of several hundred milliamps.) This fan is an
ideal choice for this project but, as is always the case with used surplus products,
there is no guarantee that it will be available in the future.
The entire assembly is shown here. The fan is mounted at the other end of the elbow with silicone caulk. Air flows from the
fan toward the sensor. I drilled and tapped a 1/4"-20 hole in the elbow for mounting on a standard camera tripod and, on the other
side, two drilled and tapped holes for fastening the Arduino Uno board assembly with 1/2" 4-40 machine screws. The Arduino board
assembly includes a screw shield
(RB-lte-127, robotshop.com) and datalogging shield (adafruit.com, ID 1141).
Finally, I fastened a DHT22 temperature/relative humidity sensor to the plywood disk with silicone caulk.
The 10kΩ pullup resistor required to interface the
DHT22 T/RH sensor with the Arduino Uno is wired between the red and yellow wires on the
cable, covered by the the black tubing.
Here is the wiring layout for this device. The wire colors coming from the Amphenol/Telaire sensor correspond
to the colors on the 4-pin connector/cable I used for this project. |
Code for the Amphenol/Telaire Particulate Counting Project
Here is the Arduino code for this project, TelaireDustSensor.ino,
which can be downloaded as a text file HERE.
The code monitors output from the two Amphenol/Telaire output channels and it saves to an SD card
data collected during 30
seconds for each channel:
• the date and time, plus the day and time expressed as a fraction (day + hours/24 + minutes/1440 + seconds/86400),
which I prefer as an x-axis unit rather than using date/time labels.
• the number of pulses and pulse occupancy, %.
• the minimum, average, and maximum pulse duration, µs.
• the temperature (°C) and relative humidity (%).
Using the Arduino code:
Although it is a good idea to develop some programming skills for using Arduinos, in principle this code can be used "as is" without any
previous programming experience. However, you will need, as a minimum, the free Arduino IDE (integrated development environment) which can be downloaded
HERE. You will also need to download libraries for the
real time clock on the datalogging shield and the
T/RH sensor. (The library
for the SD card should be included in the original download.) If you have no experience with Arduinos at all, you will need to look online for instructions
for installing and using libraries.
Once Arduino code, called a "sketch," is successfully compiled and uploaded it will reside permanently in memory, even when the power is off, until it is changed or
replaced. The first time the sketch is executed, the SD card setup function, starting in line 147, will create a file named LOGGER00.CSV on your SD card,
as defined in line 29. Thereafter, every time you stop and restart the sketch (by removing and providing power),
new files, named LOGGER01.CSV, LOGGER02.CSV, etc., will be created, up to LOGGER99.CSV. File names are restricted to 8 characters plus a 3-character file
extension, and they are always saved with uppercase letters, regardless of how they are spelled. The CSV extension means that the code creates comma-separated data lines
so the files can be opened directly in Excel. These files do not have creation date/time stamps associated
with them. You can, of course, copy or move the files to your computer and rename them, at which point they will have date/time stamps.
Using a Dylos DC1100 Pro Air Quality Monitor with PC Interface
As mentioned above, some more expensive particle counters use light scattered from a laser to count particles passing
through a chamber. One device which is suitable for use with an Arduino is the Dylos DC1100 Pro monitor, which costs
about $300. The
product website provides this description:
A battery-powered model, the DC1700, is also available, but it costs over $400.
Both these models include a serial interface. For this project I have chosen the DC1100 Pro. Dylos provides software for accessing
data through the serial port, but this software is irrelevant for use with an Arduino. But, with just a little effort, the Dylos
can be interfaced with an Arduino Uno. You will need an RS232 serial port to TTL converter to talk to your
Arduino. I used the PRT-0049 RS232 shifter from Sparkfun. You
will also need either a 9-pin null modem cable or a standard 9-pin serial cable with a 9-pin M/M null modem adapter;
these items are widely available from online sources such as monoprice.com or cyberguys.com. Make sure you get the required
pin orientation. The Dylos automatically send output to its serial port at one-minute intervals.
Other display possibilities
It is easy to add an LCD to display particle count outputs using
a $20 ID 772 white-on-blue LCD from www.adafruit.com.
requires only 2 pins to control it, so it is easy to add to existing projects. It has a programmable keypad so you can
write code to change what is being displayed. There is also a version
with a programmable multicolor background so you
could assign different color backgrounds to different particle levels. Both these devices require some assembly.
|An experimental setup for comparing Amphenol/Telaire and Dylos outputs is shown here. The fan-aspirated Amphenol/Telaire sensor with a
humidity sensor is on the left, connected to an Arduino with a datalogging shield.
The Dylos in the middle of the photo is connected
through its serial port to another Arduino, with its output logged and
on an adafruit.com LCD. I epoxied a piece of 1/4" lucite, with a 1/4"-20 tapped hole, on one side of the Dylos
case so I could mount it on a camera tripod.||
Amphenol/Telaire Spec Sheet
Your Own Particle Sensor"
Using the Sharp sensor
Using the Amphenol/Telaire sensor
Interfacing the Dylos DC1100 with Arduino