Particulate matter measurement with the Raspberry Pi

Charly's Column – Raspberry Pi

Article from Issue 213/2018

Whether you can breathe easily or not depends on what is in the air. Is there too much particulate matter that could be harmful to your health? A particulate matter measurement provides clarity – and the Raspberry Pi can help.

How fresh is the air I breathe? To find out, I put my own particulate matter measuring station into operation. Particulate matter (PM) is a mixture of all kinds of organic and inorganic dusts, bacteria that travel through the air, and many other particles that do not exceed 10 micrometers in size.

The above measurement is why we use the term PM10. For comparison, a hair has a diameter of 50 to 75 micrometers. Today, even smaller particles with a size of only 2.5 micrometers (PM2.5) or smaller are considered separately because they penetrate deep into the airways and reach the alveoli.

There are several sensors on the market that can measure both PM classes. I chose the Nova SDS011 PM Sensor by Chinese manufacturer Nova Fitness Co., Ltd. The sensor draws air into a chamber and shoots a laser at it. It uses the dispersion of the reflected light to determine the particle size and quantity. It delivers the data via a serial interface.

A USB adapter is included with the sensor, making it easy to connect to the Raspberry Pi. After connecting, I can see from the syslog that the /dev/ttyUSB0 interface is now available:

[ 2.611448] usb 1-1.5: ch341-uart converter now attached to ttyUSB0

The manufacturer's data sheet [1] reveals that the interface must be set to 9600bps with 8 data bits, no parity, and one stop bit. The stty command handles this:

stty -F /dev/ttyUSB0 9600 raw

The data sheet also says that the sensor operator can expect the values in hexadecimal notation in a fixed, recurring order once per second. The output looks like this:

0000000 aac0 8c00 9400 bcf9 d5ab

This means that values are now available: 8c for the PM2.5 class and 94 for PM10, 140, and 148 decimals.

The data sheet contains the following computation formula: The decimal value of the high byte is multiplied by 256, and the decimal value of the low byte is added to it. The result has to be divided by 10 – this is finally the PM value in micrograms per cubic meter of air. In the example, this would be 14 micrograms/m3 for the PM2.5 class, a low (i.e., good) value. You can then use RRDtool [2] to show your data in graph format (Figure 1).

Figure 1: The dashboard for PM measurement.

The Author

Charly Kühnast manages Unix systems in the data center in the Lower Rhine region of Germany. His responsibilities include ensuring the security and availability of firewalls and the DMZ.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Charly's Column – SparkFun

    Is your neighbor burning the wrong kind of wood or did a couple of VWs just pass by your house? Charly finds out with a sensor. For an attractive approach to visualizing boring measurement figures, you can either use your own web server or rely on a specialized service like SparkFun.

  • Charly's Column – Reverse SSH Tunnel

    This month, Charly Kühnast draws attention to a widely unknown weather phenomenon: The instability of rarely used tunnels leading to a Raspberry Pi. Read on for greater insights.

  • Charly's Column – Mi Flora

    Columnist Charly Kühnast recently attached Mi Flora humidity sensors to his potted plants. At first, they only transmitted junk on Bluetooth, but armed with the right tools and a Rasp Pi, Charly now reaps a rich harvest of data.

  • ESPHome

    With an ESP32 or Raspberry Pi Pico W microcontroller board, you can easily create your own home automation devices. Thanks to ESPHome, you don't even have to be a programmer.

  • Hue and Rasp Pi

    Since his Trådfri Smarthome article over a year ago, sys admin columnist Charly has been receiving messages from readers with two questions: "Can you do that with the Philips' Hue system?" and "Can this also be done with a normal brightness sensor?" Yes and yes!

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More