AirWatcher

A C++ project from my third year at INSA Lyon. It reads a year of data from 100 air-quality sensors, finds the ones that look broken, and checks if two air cleaners really cleaned the air around them. Code on GitHub

or click a dot. Arrow keys move between dots once the map has focus.

  • Sensor
  • Flagged as faulty
  • Used for the selection
  • Air cleaner

Change the scan

The C++ version always uses 5 neighbours, the variance as tolerance and the readings of 31 December 2019. Move a slider to see which sensors get flagged instead.

5
1
31 Dec 2019

How it works

Each dot is a sensor. There are 100 of them on a 10 by 10 grid, and each one gives a reading per day in 2019 for ozone (O₃), sulphur dioxide (SO₂), nitrogen dioxide (NO₂) and fine particles (PM10), in µg/m³. The two squares are the air cleaners. There's no background map, the dots are just placed from their coordinates.

A sensor is flagged when it disagrees with the sensors around it. The scan takes its 5 closest sensors, and for each pollutant computes the mean of their readings and their variance. If the sensor's own reading is further from the mean than the variance, for any pollutant, it's flagged. With these settings 6 sensors out of 100 are flagged.

For an air cleaner, each sensor's reading just before it was switched on is compared with its reading just before it was switched off. A drop of 25% or more in one pollutant counts as an effect. The check goes outwards from the cleaner, sensor by sensor, and the distance to the last one that still shows an effect is the cleaner's radius. Flagged sensors are skipped.