Vayu was my undergraduate project: a network of low-cost IoT air quality sensors, paired with satellite remote sensing, to show people what they were breathing. It won a national undergraduate award and represented the country at APICTA, the Asia Pacific ICT Alliance Awards.
That is the résumé line. This post is the useful part: what actually worked, what broke, and what I'd do differently if I built it again today.
Why low-cost sensors at all
Reference-grade air quality monitors are accurate and expensive. Many cities have only a handful of them, which means a whole district's air quality is estimated from one rooftop.
Low-cost sensors flip the trade-off. Each one is less accurate, but you can deploy many. For a lot of questions, density beats precision:
- Where are the hotspots?
- When during the day does it get worst?
- Did that road closure change anything?
The hardware stack
A station in a project like Vayu looks roughly like this:
| Part | Job |
|---|---|
| Particulate sensor (laser scattering, e.g. the Plantower PMS-series) | Measures PM1, PM2.5, PM10 |
| Temperature and humidity sensor | Needed to correct particulate readings |
| Microcontroller (ESP32-class) | Reads sensors, buffers data, sends it |
| Connectivity | Wi-Fi where available, GSM or LoRa elsewhere |
| Power | Mains with backup, or solar and battery |
| Enclosure | Airflow in, rain and direct sun out |
Lesson 1: Humidity lies to you
Laser particulate sensors count particles by how they scatter light. When humidity is high, particles absorb water and grow, so the sensor reports more PM2.5 than is really there. In monsoon conditions this can be dramatic.
The fix is calibration: co-locate sensors with a reference monitor, then fit a correction that uses humidity as an input. I wrote the full method in Calibrating Low-Cost PM2.5 Sensors Against Reference Data.
Lesson 2: The network is harder than the sensor
The sensor is the easy part. Keeping 20 devices online for months is the real work:
- Power cuts reset devices. Buffer readings locally and backfill when the connection returns.
- Wi-Fi changes. Someone changes the router password and a station goes dark.
- Clock drift. Timestamp on the server, or sync time via NTP on every boot.
- Physical stuff. Dust, insects, bird droppings, and curious people.
A heartbeat dashboard that shows when each device last reported saved us more time than any feature.
Lesson 3: Satellites fill gaps, not replace sensors
Vayu combined ground data with satellite remote sensing. Satellites like Sentinel-5P measure gases such as NO₂ across the whole atmospheric column, and aerosol products estimate particulate load from above. They cover everywhere, but they don't directly measure what you breathe at street level.
The useful pattern is fusion: satellites give spatial coverage, ground sensors anchor the numbers locally. Forecasting on top of that is the next step, which I explored in Forecasting Air Quality with Machine Learning.
Lesson 4: The dashboard is the product
Nobody outside the team cared about our sensor choice. They cared about a map that answered "is it safe to go running right now?" Things that mattered:
- Plain categories (Good, Moderate, Unhealthy) next to the number.
- A last-updated time on every reading, so stale data is obvious.
- History, so people could see patterns, not just the current value.
What I'd change today
- Calibrate from day one, not after deployment.
- Use LoRaWAN for stations far from reliable Wi-Fi.
- Store raw and corrected values separately, so you can recalibrate later.
- Open the data with a clear licence and accuracy notes. Researchers and journalists can do more with it than we could.
Why this matters beyond one city
Air quality is one of the clearest cases where cheap hardware, good data practice, and machine learning can inform policy. It is also the thread that led me toward climate risk and early warning work, which I write about in How AI Flood Early Warning Systems Work.