pmme/random-info.org

3.5 KiB

Which is the one I care about? Like which is the one I would use to know if Southeast Asia's burning season is getting bad?

You want pm2_5_atm - the PM2.5 concentration under atmospheric environment.

PM2.5 (particles ≤ 2.5 micrometers) is the key metric for air quality and health because these particles are small enough to penetrate deep into your lungs and bloodstream. During Southeast Asia's burning season, this is what gets dangerously high.

The "atmospheric environment" reading (_atm) is more accurate for real-world conditions compared to the "CF=1 standard particle" (_cf1) reading, which uses a correction factor.

Reference levels:

  • 0-12 μg/m³: Good
  • 13-35 μg/m³: Moderate
  • 36-55 μg/m³: Unhealthy for sensitive groups
  • 56-150 μg/m³: Unhealthy
  • 151-250 μg/m³: Very unhealthy
  • 251+ μg/m³: Hazardous

During bad haze episodes, you'll see pm2_5_atm values well into the hundreds or even 300+ μg/m³.

Ok, so why would I want to know about 1.0 and 10.0? What would those be useful for? This is for a home sensor project I'm building

Great question! Here's why you'd want the other PM readings for a home sensor:

PM1.0 (pm1_0_atm):

  • Ultra-fine particles - these penetrate deepest into lungs and bloodstream
  • Indoor sources: cooking (especially frying/grilling), candles, incense, vaping
  • Early warning: Often spikes before PM2.5 gets bad
  • Health: Most concerning for cardiovascular effects

PM10 (pm10_atm):

  • Coarse particles - dust, pollen, mold spores
  • Indoor sources: vacuuming, pets, dusty activities, open windows on windy days
  • Allergies: Key metric for people with dust/pollen allergies
  • HVAC effectiveness: Shows if your air filters are working

For your home sensor project:

  • PM1.0: "Is my cooking/candle affecting air quality?"
  • PM2.5: "Is the outdoor haze/pollution getting inside?"
  • PM10: "Should I run the air purifier due to dust/allergens?"

You could set different alert thresholds:

if (data.pm1_0_atm > 15) printf("Cooking/indoor pollution detected\n");
if (data.pm2_5_atm > 35) printf("Outdoor pollution - close windows!\n");  
if (data.pm10_atm > 50) printf("High dust/allergens - run air purifier\n");

All three together give you a complete picture of your indoor air quality!

How does AQI work though? Seems like the AQI score is different from the PM 2.5 reading

Yes! AQI (Air Quality Index) is a calculated score that converts raw PM2.5 readings into a standardized 0-500 scale that's easier for people to understand.

The conversion uses breakpoints:

AQI Range PM2.5 (μg/m³) Category
0-50 0.0-12.0 Good
51-100 12.1-35.4 Moderate
101-150 35.5-55.4 Unhealthy for Sensitive
151-200 55.5-150.4 Unhealthy
201-300 150.5-250.4 Very Unhealthy
301-500 250.5-500.4 Hazardous

Example:

  • PM2.5 = 25 μg/m³ → AQI ≈ 79 (Moderate)
  • PM2.5 = 100 μg/m³ → AQI ≈ 170 (Unhealthy)

For your home sensor:

int pm25_to_aqi(float pm25) {
    if (pm25 <= 12.0) return (50.0/12.0) * pm25;
    if (pm25 <= 35.4) return 51 + ((49.0/23.4) * (pm25 - 12.1));
    if (pm25 <= 55.4) return 101 + ((49.0/19.9) * (pm25 - 35.5));
    // ... continue for higher ranges
}

Why AQI is useful:

  • Color-coded (Green=Good, Red=Unhealthy)
  • Same scale regardless of pollutant type
  • Easy for non-technical users: "AQI 150 = stay indoors"

The raw PM2.5 number is more precise for data logging, but AQI is better for user alerts!