Field protocol · two sensors · about four weeks

Porch Sensor Protocol

The York Road model is arithmetic, not evidence. This is the cheapest honest way to find out whether it is right — what to build, where to stand it, how to calibrate it against a reference instrument, and the three specific results that would prove the model wrong.

Start here: what you are actually trying to resolve

Before buying anything, look at the size of the signal. This is what the model says a sensor beside York Road would have to pick out, at 07:00 with a 2 m/s wind, from the road alone:

Distance from kerbPM2.5 exhaustPM2.5 brake / tyre / dust PM2.5 totalNOx
15 m1.153.414.5643.0
30 m0.491.451.9418.3
60 m0.150.450.605.6
120 m0.050.150.211.9
300 m0.020.050.070.7

µg/m³ above background.

Three consequences you cannot design around

A single PM2.5 sensor will not settle this. At 30 m the road adds about 1.9 µg/m³. A good low-cost sensor has roughly 1–2 µg/m³ of hourly precision, and the regional background it sits on swings between 5 and 25 µg/m³ day to day. The signal is smaller than the noise it is buried in. One sensor on a porch produces a number you cannot interpret.

So you need two, and you subtract them. A matched pair — one near the road, one a few hundred metres back — cancels the regional background almost exactly, because both units see the same regional air. The difference is the traffic increment, and that is the quantity the model actually predicts.

Get close, or get nothing. The signal falls by two-thirds between 15 m and 30 m and by two-thirds again by 60 m. Beyond about 60 m a PM sensor has nothing left to measure. Site the road unit within 30 m of the kerb.

Two things that make it much easier

Measure PM10, not just PM2.5. Three-quarters of the near-road particulate here is brake, tyre and resuspended road dust, and that material is coarse — it lands in PM10 far more than PM2.5. The coarse fraction, PM10 minus PM2.5, is a much stronger traffic tracer than PM2.5 alone, and the sensor below reports both from the same measurement.

NOx is a ten-times bigger signal. 18 µg/m³ at 30 m against 1.9 for PM2.5. If the budget stretches, one nitrogen dioxide cell per unit turns a marginal experiment into a decisive one. It is the single highest-value upgrade on this page.

Bill of materials

The pair that works — about $330

Everything doubled, because the whole design rests on differencing two matched units. Prices are indicative for 2026 and exclude shipping.

PartWhy this oneEachQtyTotal
Sensirion SPS30Reports PM1 / PM2.5 / PM4 / PM10 from one optical measurement, so you get the coarse fraction free. Its auto-cleaning fan is why it drifts far less than the cheaper Plantower units over a year outdoors.$552$110
Sensirion SHT45Temperature and humidity. Not optional — humidity correction is the entire calibration, and you cannot apply it without measuring RH at the inlet.$142$28
Raspberry Pi Zero 2 WWi-Fi, NTP-synced clocks so both units share a timebase, real Python, and you can SSH in from the kitchen instead of retrieving an SD card.$182$36
microSD 32 GBEndurance-rated. A year of one-minute records is only a few hundred MB, but cheap cards die from constant small writes.$92$18
Radiation shieldA stacked-plate shield, or a vented junction box with a downward inlet. Rain off the optics, sun off the thermometer, air still moving freely through.$302$60
Outdoor powerOutdoor-rated USB run plus a weatherproof inline connector. The background unit is the awkward one — plan its power before you pick its location.$252$50
RTC module, wiring, mountsA DS3231 keeps timestamps honest through a Wi-Fi outage; a Pi has no battery-backed clock.$152$30
Pair total$332

The upgrade that makes it decisive — about $200 more

PartWhat it buys, and what it costs youEachQtyTotal
SPEC DGS-NO2 968-043Digital nitrogen dioxide cell. Noisier and shorter-lived than the research-grade Alphasense parts, but a tenth of the cost and aimed at a signal ten times larger than the PM one. Expect meaningful drift — re-zero it against the reference every visit.$702$140
SCD41 CO₂A clean tailpipe tracer at close range. Its absolute accuracy is mediocre but its precision is good, and precision is all a difference needs.$352$70
Upgrade total$210

What stays out of reach. Ultrafine particle counts need a condensation particle counter — $5,000–10,000 new, though a used TSI P-Trak turns up on the secondary market for $1,500–3,000 and needs alcohol wicks. Black carbon needs an aethalometer. Research-grade NO₂ means Alphasense B43F cells paired with an OX-B431 for ozone compensation and an individual sensor board each, which is roughly $760 for a pair. None of that is necessary to test this model; all of it would sharpen the answer.

Protocol

  1. Build both units identically

    Same parts, same firmware, same enclosure, same inlet geometry. Any difference between the two becomes a false traffic signal later. Run both indoors side by side, inlets touching, for 48 hours.

    Pass: hourly PM2.5 agrees between units within 1 µg/m³ RMS and the coarse fraction tracks. If not, swap enclosures to find out whether it is the sensor or the housing.

  2. Ask MDE before you co-locate

    The reference instrument is Maryland's, on Maryland's fenced site, and you cannot simply install hardware there. Write to the Ambient Air Monitoring Program at the Department of the Environment, say what you are doing and for how long, and ask to co-locate two low-cost units. State agencies are often receptive to community monitoring and some actively support it. If the answer is no, the fallback is the nearest public ground with comparable exposure — same side, same setback, within about 50 m — which is weaker but workable.

    Confirm which site is actually running first. Essex is the Baltimore County PM2.5 site; check AirNow and MDE's network plan for anything closer that is currently active.

  3. Co-locate both units for four weeks

    Both units at the reference, logging one-minute records, averaged to the hour to match how the regulatory instrument reports. Four weeks is the minimum that reliably spans the humidity range the correction depends on; eight is better. You want damp mornings and dry afternoons, a few genuinely polluted days, and a spread of temperature.

    Target: 300+ valid paired hours spanning 30–90% RH. Log UTC, NTP-synced.

  4. Fit the correction

    Low-cost optical sensors overread in humid air, because water condenses on particles and the laser sees them as larger. The correction is a linear fit against the reference with a humidity term — the same form EPA publishes for PurpleAir, with coefficients you derive for your own units:

    PM2.5_corrected = a · PM2.5_raw + b · RH + c
    
    fit a, b, c by ordinary least squares on hourly pairs
    (EPA's published PurpleAir form, for comparison:
     0.524 · raw − 0.0862 · RH + 5.75)

    Accept if R² ≥ 0.70, RMSE ≤ 3 µg/m³, corrected slope within 0.9–1.1, and the residuals show no remaining trend against humidity or temperature. Below R² 0.6, stop and find the fault — it is usually siting, a blocked inlet, or a clock that has drifted.

  5. Split the pair

    Road unit within 30 m of the York Road kerb. Background unit 300–500 m away, off the arterial, at the same height and with the same sky exposure. Both at 2–4 m above ground, at least 1 m clear of any wall, inlet facing down, and nowhere near a dryer vent, chimney, barbecue or car park.

    Record for each unit: exact coordinates, height, and the perpendicular distance and bearing to the road centreline. Those three numbers are what let you compare against the model.

  6. Log for at least four more weeks, then re-check drift

    Bring both units back to the reference for a week every three months. Optical sensors drift, electrochemical cells drift much faster, and a slow divergence between your two units looks exactly like a change in traffic if you never check.

The three results that would break the model

Analyse the difference between the two units, hour by hour, joined to wind direction and speed from the same BWI feed the model uses. Each test below is a prediction the model has already committed to.

Test one · timing

The worst hour is the morning rush, not the afternoon

Bin the paired difference by hour of day across all weekdays, excluding hours with precipitation.

Model predicts: peak between 05:00 and 08:00, running about 4× the quietest hour, driven by a shallow overnight mixing layer rather than by traffic volume.

Breaks the model if: the profile is flat, or it tracks traffic volume with an afternoon peak — that would mean dispersion is not doing what the model says.

Test two · geometry

Which side of the road you are on matters more than the traffic

Bin the same difference by wind sector: hours when the road unit is downwind of York Road against hours when it is upwind. Keep traffic volume roughly constant by comparing like hours.

Model predicts: downwind hours run at least twice upwind hours, at the same hour of day and the same traffic.

Breaks the model if: the ratio is near 1. That would mean the plume is not behaving as a line source at all, and the whole dispersion layer is wrong.

Test three · attribution

The Beltway reaches the background unit

Look at the background unit on its own, binned by wind sector relative to I-695.

Model predicts: it is still elevated when downwind of the Beltway, because at 300–500 m from York Road the Beltway is the dominant source.

Breaks the model if: the background unit shows no wind-direction dependence — the source attribution on the map would then be worthless, which is the claim most worth checking.

On whether four weeks is enough. The paired difference carries roughly 2 µg/m³ of hourly noise against a predicted signal of about 1.9 µg/m³ at 30 m — a ratio of one, which sounds hopeless for any single hour and is fine for a mean. Four weeks is 672 hours; a single wind sector is perhaps a quarter of those, and hourly air quality is autocorrelated enough that maybe a fifth of them count as independent. That still leaves a standard error near 0.3 µg/m³ on the sector mean, which separates 1.9 from zero comfortably. Eight weeks makes it unarguable. Any single hour will look like noise, and that is expected — do not read individual readings.

Cost and calendar

PhaseWhat happensElapsedSpend
BuildAssemble, flash, bench-compare the pair indoors1 week$332
PermissionWrite to MDE, agree a co-location window2–4 weeks, in parallel
Co-locationBoth units at the reference; fit the correction4 weeks
DeploymentRoad and background units logging4–8 weeks
Drift checkReturn to the reference for a weekquarterly
To an answerThree tests, pass or fail≈ 3 months$332–542

What happens to the model either way

If the three tests pass, the model stops being arithmetic and becomes a calibrated instrument: one validated pair of sensors licenses the model to estimate any address on the corridor, hour by hour, without a sensor there. That is the whole point — you do not need a sensor everywhere, you need one that proves the model, and then the model goes everywhere.

If they fail, that is the more useful outcome and the page gets rewritten. A model that cannot be checked is exactly the thing worth distrusting about the official number, and publishing a wrong one under a nicer typeface would be no improvement at all.

Porch Sensor Protocol · a companion to York Road Air, part of the Gigawatt Ledger.
Prices indicative for 2026. Nothing here has been built yet — this is the plan, written down so it can be argued with before any money is spent.