INTRO:
In this project I show how to build a particle detector with data display, data backup on SD card and IoT. Visually a NeoPixel ring display indicates the air quality.
Air quality is an increasingly important concern today. there are systems to measure the dust rate but they are very expensive.
There are low-cost, high-quality particle detectors on the market, as shown by some studies.
https://www.atmos-meas-tech.net/11/4823/2018/amt-11-4823-2018.pdf
I therefore decided to build a device capable of measuring the number of particles by size classes (0.5µm to 10 µm), visually with a simple display of the result (NeoPixel ring), a more detailed display on a TFT screen, and a time-stamped backup on an SD card..
In addition I have added a bluetooth communication module to be able to communicate with an android application and thus publish the results on an IoT server.
The overall cost of the whole does not exceed 60€.
Environmental Health: PM2.5 Detector
The Air Quality Particle Detector isn't just a fun project; it's a vital health tool. Standard gas sensors (like MQ-135) detect fumes or CO2, but they cannot "see" solid Particulate Matter (PM2.5 and PM10) from wildfires, factory smog, or heavy dust in your workshop.
Optical Laser Sensing
This project relies on a specialized laser dust sensor (like the PMS5003 from Plantower or a Sharp GP2Y1014AU0F).
- The Airflow: The PMS5003 has a built-in microscopic fan that constantly sucks ambient air into a tiny, sealed dark chamber.
- The Laser: Inside the chamber, an intensely focused laser beam fires through the air sample.
- The Sensor: A photoreceptor on the other side looks for light scattering. If a microscopic dust particle (2.5 micrometers wide) flies through the laser, it scatters the light, causing a flash.
- The Serial Data: The sensor analyzes the size of the flashes to differentiate between PM1.0, PM2.5, and PM10 particles, sending a continuous stream of data packets back to the Arduino via Serial
RX/TX.
Serial Parsing and Display
The Arduino must listen to Serial.read() for a very specific "Start Byte" denoting the beginning of a data packet (e.g., 0x42 and 0x4D). Once found, it grabs the array of data, extracts the PM2.5 integer, and prints: "PM2.5: 145 ug/m³ (UNHEALTHY!)" onto a display.
Hardware Needed
- Arduino Uno or NodeMCU: The receiver. Data logging via NodeMCU is preferred here to track air quality over days.
- PMS5003 PM2.5 Sensor: Or a cheaper equivalent.
- OLED or LCD Screen: For immediate room readout.
- RGB LED: To act as a quick visual warning (Green = Clean, Red = Smog!).
Result:
You can see how the system works in the video below.
I hope that you like this project!
I developed a new software with display of the curves in real time for each class of particles whose here is the result.