Glee hardware research: what should the sensor be?
Live at research.gleepark.me. This folder is updated continuously by a research loop: hypotheses, experiments (code + data + results) and the current recommendation. Nothing here has been tested on a street yet unless it says so.
The question
What hardware tells a city, in near real time, whether each on-street parking space is free? It must be cheap enough to cover whole streets, easy enough that a city will let us install it, and right often enough that drivers trust the map. The form factor is open. It doesn't have to be "cheese" (the thin sheet stuck under the car).
Breaking it down
| Sub-problem | What decides it | Status |
|---|---|---|
| 1. Sensing: how do we know a car is there? | accuracy, cost of the sensor, power per reading | Experiment 1 done (simulation); method survey in progress |
| 2. Placement / form factor: in the road, on the curb, on a pole, overhead? | permits, install time, winter, theft, what the sensor can "see" from there | deployment survey in progress |
| 3. Power: battery, solar, mains? | where it's mounted (light), what it draws | model done for cheese (hardware/swiss/SCENARIOS.md) |
| 4. Radio / network: LoRaWAN under a car, gateway density | link budget, gateway cost per space | Exp 11 done (model); real under-car and on-post numbers come from American cheese |
| 5. Cost and scaling: $ per space per year, all-in | unit cost, install labour, maintenance, gateways, network | next experiment |
| 6. The city: what Cambridge will approve and maintain | permits, liability, snow operations, privacy | deployment survey in progress |
Hypotheses
| # | Hypothesis | How we test it | Verdict so far |
|---|---|---|---|
| H1 | Two magnetometers in the road (cheese) can tell a parked car from neighbours and traffic without a radar | Exp 1 (calibrated to measurements), then American cheese on real cars | Weakened: with the car model calibrated to published measurements, cheese scores ~94 % (single magnetometer ~91 %, matching field studies' 81-93 %). The cause is dead zones: between a car's axles the field barely changes (magnetics report). 4 magnetometers reach ~99 %; a radar ~99.5 % |
| H2 | A magnetometer on the curb (no road work) is good enough | Exp 1 | Rejected: ~72 % in the calibrated simulation |
| H3 | A small radar makes detection robust | survey + Exp 4 (XM125 radar on real cars) | Strongly supported by the industry: Bosch, Libelium, Option, Fleximodo and KKM all moved to magnetometer + radar. A 60 GHz A121 radar is ~$10, 5 × 5 mm, and adds < 1 µA if it only confirms magnetometer events |
| H4 | Mounting on existing meter poles beats anything in the road for permits, winter and maintenance | deployment report, Exp 3 | Supported for deployment (single-space meter poles at the curb; no digging, no lane closure, above plows). Accuracy depends on the aim (Exp 3): looking straight across, a pole radar can't tell its own car from the neighbour's (65 %); angled 50-65° into its own space with a 3-4 m range limit, ~100 % in the model. A plausible explanation for Boston's "many problems with the data's accuracy" |
| H5 | One sensor can cover several spaces and win on cost per space | Exp 2, Exp 8 | Cameras do, but Cambridge's Surveillance Ordinance makes them a poor fit. A pole unit with two radars (one per space) cuts cost per space ~35 % at 1,000 spaces ($2.17 vs $3.32/month, Exp 8) |
| H6 | The radio signal itself (RSSI) is a free second opinion | American cheese logs | Supported in literature: LoRa RSSI alone reached 96-97 % in one study. Free: log it from day one |
| H7 | Not every space needs a sensor | literature, Exp 9 | Depends on the product. For a block-level heat map (planning, demand pricing), 25-50 % coverage works (DDOT; Exp 9: estimate within ~1-2 spaces) at a quarter to half the cost. For telling a driver where a free space is, no: on a nearly full block the app knows the free space only about as often as the share of spaces with sensors (50 % coverage -> 66 %) |
| H9 | Weather won't blind a 60 GHz radar | weather report (layered-model calculation, sources) | Split. Rain, fog and falling snow in the air: negligible (< 0.2 dB). Anything on the window is not: a 0.1 mm water film costs ~10 dB two-way, 1 mm ~47 dB, 2 mm of slush ~44 dB; ice, dry snow and dust are minor. So the in-road radar is blind whenever water stands on the sheet (the magnetometer must decide then), and a pole radar needs a vertical window under a hood, mounted at ~1.2 m above plowed snowbanks, and a "blocked" state |
| H8 | Cheese (stuck to the road) survives a Cambridge winter | winter report, Exp 10, winter field test | No as designed; only as road work. No snowy city uses glued-on street sensors (all in-ground); Exp 10: butyl-on sheets are torn off by any plow that reaches them. Only a strong bond plus a flush or very gently ramped sheet survives, which needs milling and a permit. Original reasoning: The case against: ~7 mm proud of a plowed, salted surface (snowbelt states recess raised pavement markers because plows tear them off); Bow Street's odd side is a snow-emergency route plowed curb to curb; adhesive weakens in freeze-thaw; and slush on top blinds the radar anyway (H9). The case for: on non-emergency streets the parking lane often isn't plowed to the pavement while cars are parked. Test this winter: 2-3 dummy sheets (no electronics) on Bow Street's even side, checked after each storm; ask Cambridge DPW how plows treat parking lanes on non-emergency streets |
Experiments
| # | Experiment | Result |
|---|---|---|
| 0 | Pilot data: what the two LAS7 pucks reported Nov 2-8 (data, refreshed from the live backend) | Bench testing, not street parking (median episode 2.4 min, signal up to -25 dBm). No street data exists yet. H6 check: signal strength while "occupied" vs "free" goes opposite ways on the two pucks (Puck-01 24 dB stronger, Puck-02 7.5 dB weaker): the pucks were being moved, so this data can't test H6; the street log will |
| 1 | Which architecture detects best?: Monte Carlo, 2,500 situations, car model calibrated to measurements | Radar (under the car or on a pole) ~99.5 %; 4-magnetometer array 98.6 %; cheese (2 magnetometers) 93.7 %; single magnetometer 90.6 % (matches field studies); curb magnetometer 71.5 % |
| 2 | Cost per space per year, all-in over 5 years | Meter-pole radar $13-21; in-road sheet or cored puck $41-46; commercial reference $105 |
| 3 | What a pole radar sees: ray-traced, 288 mountings searched | Aim decides it: straight across 65 %; angled 50-65° into its own space with a 3-4 m range gate ~100 % (idealised). Mount at ~1.2 m: a 0.9 m snowbank blinds a 0.9 m sensor, not a 1.2 m one; the sensor can recognise "blocked" and say so |
| 4 | Real radar on real cars: SparkFun XM125 (A121) on American cheese's mux, under a car and on a pole | needs a $50 part: SparkFun SEN-24540 |
| 5 | Can firmware beat the dead zones?: time-series of real parking manoeuvres | No. At 3 s sampling, today's thresholds catch 29 % of arrivals (cars parked over a dead zone are never seen); lower thresholds catch 91 % but never clear (6 % of departures); latching on transients misses most of them. Magnetometer wakes a radar: 97 % arrivals, 100 % departures, ~18 µA |
| 12 | Can the pole radar tell a person from a parked car?: Monte Carlo of reflection size and stillness, people standing anywhere in the beam vs cars anywhere in the space, radar cross-sections swept over the published ranges | Yes, with two rules and a slightly slower arrival. Raw strength fails (a near person returns as much as a far car). Strength corrected for distance (an estimate of reflector size) plus "the reflection holds still over 4 readings (15 s)" passes 0.07 % of standing people in the middle case, ≤ 1.6 % in the worst, while keeping 99.5 % of cars: Exp 7's ~4 false episodes a day drop to ~0-0.06. Cost: arrivals confirmed in 15-20 s instead of ~10 s; many scooters/motorbikes dropped by the size rule (a setting). Thresholds come from Exp 4 data |
| 11 | How many spaces can one gateway serve?: LoRaWAN link budget, 3GPP urban street-canyon model at 915 MHz, shadowing Monte Carlo; post vs in-road vs under a car; SF7-SF10 | Range isn't the limit. From a meter post, 90 % of uplinks reach a rooftop gateway ~1.4 km away at SF7 (~15,000 spaces in reach); under a parked car the range shrinks ~4x (~600 m, and only at SF10). Gateway count is set by sites and redundancy, so Exp 8's gateway share was pessimistic ($0.05-0.14 -> ~$0.01-0.03/space/month). The radio's real cost is battery: SF10 averages ~43 µA at our message rate vs ~7 µA at SF7, which a pole sensor near a gateway can avoid and an under-car sensor can't |
| 10 | Does a stuck-on sheet survive a winter of snowplows?: physics of a blade meeting the sheet + a Monte Carlo over a winter of plow passes; 5 shapes x 3 glues x 2 streets; checked against real road-marker losses | Today's design doesn't: butyl, 8.5 mm, 1:4 ramps survives 0 % of winters on the snow-emergency side, ~38 % on the regular side. A plow at speed can't lift its blade over the step in time, so the sheet gets whatever force makes the plow's spring-loaded edge give (1.5-50 kN); a butyl pad holds ~2 kN at one edge. With butyl nothing helps; with epoxy, gentle 1:20 ramps (93 %) or flush in a milled pocket (98 %) survive, matching recessed road reflectors (< 1 % lost a winter), but that's road work and a permit, i.e. the cored puck |
| 9 | Does every space need a sensor?: a 12-space block, 60 simulated days, quiet / busy / packed demand, 25-100 % of spaces sensored | Only if we guide drivers to a space. When a block is ≥ 80 % full and a space is free, the app can point to it 37 % of the time at 25 % coverage, 66 % at 50 %, 87 % at 75 %. Block-level estimates stay within ~1-2 spaces at 25-50 % coverage. Product choice sets hardware count: per-space guidance on busy blocks = every space; heat map / pricing = sample |
| 8 | What happens as we scale?: Exp 2 plus volume pricing and fixed costs (FCC test, insurance, hosting, network, gateways, a possible city fee), 100 / 1,000 / 10,000 spaces | Pole sensor: ~$8.82 per space per month at 100 spaces, $3.32 at 1,000, $2.18 at 10,000 (2 spaces per unit: $2.17 at 1,000), re-run with the priced bill of materials ($78/unit at 1,000, not the $50 first assumed) and Exp 11's gateway numbers. In-road options ~$5.20-5.30 at 1,000 and barely improve with scale (their cost is recurring labour). Commercial reference ~$8.42. At pilot scale fixed costs dominate whatever the hardware. The input that moves the pole sensor's cost most is a city fee for using meter posts ($0-20/space/yr swings it $2.43-4.09), more than the hardware price |
| 7 | How should a pole radar poll?: 30 simulated days of cars and pedestrians per setting | Every 5 s, 2 agreeing readings: cars reported in ~8 s (95 %: 10 s), ~4 false "occupied" a day from people standing in the beam, >15 years on one D-size lithium cell. A single reading is unusable (~98 false changes a day, mostly the radar's own per-reading errors). So a pole sensor needs no magnetometer at all. Built into the firmware's pole mode; firmware/test/sim_pole.cpp passes |
| 6 | Exp 5's winner, built: radar fusion in the real firmware, run on simulated hardware (firmware/test/sim_radar.cpp) | Works in simulation. The kit firmware now drives an XM125 on mux port 2 (Acconeer's register protocol, every wait with a timeout). Dead-zone car (only ~1 µT left after parking): magnetometers alone say free, radar says occupied on the first reading. Silent departure: caught by the 45 s re-check (30 s in the run). Car next door: wakes the radar, which sees nothing in its 6-80 cm gate, so nothing is sent. Empty hour: 6 radar checks. Radar unplugged: falls back to the magnetometers after 5 misses, picks the radar up again within 10 min. Messages carry a "radar decided" flag end to end (firmware, backend, TTN formatter). Not yet run on the real XM125 |
Provolone v0 (designed, not yet built)
A printed box strapped to a meter post with two hose clamps: American cheese's boards, the XM125 behind a 1.5 mm window (about half a wavelength at 60 GHz in PETG), a power bank. The whole box is aimed: turn it on the post until the line on the lid runs parallel to the curb, and it faces 55° into its space. Build, aim and test steps: hardware/provolone/README.md.


Reports
- Every way to detect a parked car: methods, accuracy, power, prices, what vendors use
- Deploying on Bow Street: permits, winter, poles, pilots elsewhere, questions for the city
- What a magnetometer really sees under a car: measured fields, dead zones, drift, datasets
- Parts for a meter-pole radar: XM125 beam/power/I2C, FCC, Cambridge poles, D-cell battery, clamps
- Provolone v1 bill of materials: every part priced at 100 / 1,000 / 10,000 units, XM125 vs bare A121, cells and pulse capacitors, FCC path (A121 carries a limited modular grant), cheapest credible build
- Can a stuck-on sheet stay in over winter?: surface sensors in snowy cities, what survives plows (markers, tape, speed cushions), Cambridge plowing, glues in the cold, field-test protocol
- Rain, snow, slush and a 60 GHz radar: losses through each layer on the window, window thickness, coatings, how vendors handle it, firmware rules
Current direction
Updated after Experiments 1-10 and four research reports. Nothing below has been tested on a street yet.
The recommended system: a radar on the meter post ("Provolone"), LoRaWAN to our backend, sold as occupancy data.
| Question | Answer so far | Evidence |
|---|---|---|
| What senses the car? | A 60 GHz radar (Acconeer A121). Magnetometers alone top out ~91-94 % (dead zones under cars); radar ~99.5 % | Exp 1, Exp 5, magnetics |
| Where does it go? | On the meter post, ~1.2 m up, aimed 55° into its own space. No digging, no lane closure, above the plows and most snowbanks | Exp 3, deployment, weather |
| Why not in the road? | A stuck-on sheet doesn't survive plowing (0 % of winters on a snow-emergency street, Exp 10); surviving needs epoxy or a milled pocket = road work. Slush on top also blinds an in-road radar (H9) | Exp 10, winter |
| Does it need a magnetometer? | No. On a pole the radar reads every 5 s, 2 agreeing readings: cars reported in ~8 s, >15 years on one D-cell | Exp 7 |
| What does it cost? | ~$3.32 per space per month at 1,000 spaces ($2.17 with two radars per unit) vs ~$8.42 for the commercial reference; ~$9 at 100 spaces (fixed costs dominate a pilot). Unit: ~$78 at 1,000 (XM125 module), ~$44 at 10,000 (bare A121 chip, moulded box) | Exp 8, BOM |
| Biggest unknowns | A city fee for using meter posts, the city's permission at all, and the radar's real accuracy next to parked neighbours and pedestrians | Exp 8, Exp 4 (pending) |
| Every space? | Only if we guide drivers to a specific space. A block-level map for the city works at 25-50 % coverage | Exp 9 |
| Firmware | Built and simulated: radar fusion (in-road), pole mode, blocked/unknown handling, data logging, repeat of every state change | firmware/test/sim_* |
Cheese's role: the learning device. American cheese (arriving now) gives the first real under-car and on-pole data: magnetometers + radar + radio signal, logged at 1 Hz. Swiss cheese is on hold until that data says the in-road option is worth building; if it is, it's a seasonal device on non-emergency streets, or a flush-mounted puck.
The two tests that decide the most, cheapest first: (1) Experiment 4: the XM125 radar on a real meter post next to real parked cars (Provolone v0, printable now; needs the ~$50 radar). (2) Asking the city who approves a device on a meter post and whether there's a fee.
Next
- Weather → firmware and box (done this tick): pole mode treats a strong return closer than 45 cm (snowbank, slush, someone leaning on the post) as "blocked": it holds the last state, reports unknown after 10 min, never "free" (
sim_polepasses). Box: rain hood over the window, 1.2 m mounting height, vent/desiccant for v1. Still to do: the "canary" check (learned empty-street returns all dropping >10 dB at once = window blind), and for in-road, flag "radar blind" so the magnetometer decides. - Provolone v0: designed (above). Printable now; needs the XM125. Range gate raised to 4 m (Exp 3 re-run at 55°: 100 % vs 99.5 % at 3 m). Still open: "blocked" detection for snowbanks, and a radar strength threshold to separate people from cars (Exp 7). v1: D-cell (LS33600 + pulse capacitor, 10+ years), IP67 box on a stainless band, tamper alarm, FCC label + Part 15B.
- Bow Street site survey (30 min with a tape measure and a phone): meter model, single or twin heads, post position vs the space lines, post diameter, height under the head.
- Data-logging mode: built.
scripts/cheese_log.sh flashthenrecord <note>: both magnetometers' 3 axes + radar peaks/distance/strength + states at 1 Hz intoresearch/data/*.csv(runbook:hardware/CHEESE_BRINGUP.md). Still to add: RSSI per uplink from the backend side (H6). - Firmware v2 for any magnetometer design: event-based detection (latch on the arrival transient, low hold threshold, release on a departure transient), gradient as a veto rather than a requirement, baseline frozen while occupied (magnetics report).
- Swiss cheese v2: add an A121 radar footprint to the board (~$10), so the in-road learning device also tests radar.
- XM125 supply: DigiKey shows 0 in stock with a 16-week lead time, but SparkFun lists SEN-24540 in stock at $49.95 (checked Nov 8). Order from SparkFun. Board is 50.8 × 25.4 mm per SparkFun; the Provolone box is updated for it.
- Order one XM125 radar ($50) and plan Exp 4 with American cheese: radar under the car and on a pole, alongside the magnetometers, with RSSI logged.
- Hardware critique (docs/HARDWARE_CRITIQUE.md, merged Nov 7). Fixed: the P0 detector bug (an occupied space declared free after ~6 min whenever both magnetometers agreed; big uniform changes learned into the baseline); magnetometer B read fresh with A (every sample on the kit); sensor retries no longer stop after 255 failures; every state change is re-sent once 60 s later (TTN's ~10 downlinks/day rule out confirmed uplinks for ~30 changes/day). All as host tests. Still open: a measured time base across sleep, and an explicit "uncertain" state for the magnetometer-only build.
- Winter field test for in-road sheets (H8, protocol in the winter report): 3 dummy sheets on Bow Street's even side with different edges (square, 1:10, dome), paint marks beside each; after every plowable storm and monthly, log present/moved, edge lift (feeler gauge), scrapes, ice under edges. Install on a dry afternoon in November (glues need ≥ 4-10 °C). Three sheets can't measure a loss rate (0 of 3 lost only bounds it below ~63 %); they show whether the blade reaches the lane at all. Any loss keeps winter removal as policy.
- Butyl peel test on cold asphalt (Exp 10's deciding unknown): a pad on an asphalt offcut in the freezer at -5 °C, pull sideways at one edge with a luggage scale. If it holds well over 2 kN (200 kg), the in-road picture changes.
- Decide the first product (Exp 9): per-space guidance on the busiest blocks (every space sensored) or a block-level heat map for the city (sample 25-50 %). It sets how many units we build.
- Questions for the city, now the top priority (Exp 8: a pole fee is the biggest unknown in the cost): who approves a device on a meter post, and is there an attachment fee; does a non-imaging radar count under the Surveillance Ordinance; Bow Street paving moratorium.
Experiment 10: does a stuck-on sheet survive a winter of snowplows?
A physics model of a plow blade meeting the sheet, run over a simulated winter of plow passes (4,000 winters per case, research/sim/snowplow.py). The sheet is Swiss cheese's A4 footprint (297 × 210 mm), 8.5 mm tall on its glue with 1:4 beveled edges today.
One pass: why the bevel doesn't save it
At road speed a plow can't lift its blade over a 9 mm bump in the few milliseconds a 1:4 ramp gives it, so the push on the sheet is whatever makes something give first: the plow's spring-loaded edge folds back, a rubber edge bends, or the glue lets go. Typical values for today's design:
| Plow | Speed | Push needed to get over (8.5 mm, 1:4) | Plow edge gives way at | Push the sheet actually gets |
|---|---|---|---|---|
| pickup / one-ton with trip edge | 20 km/h | 32 kN | 5 kN | 5.0 kN |
| city dump truck, trip moldboard | 25 km/h | 34 kN | 15 kN | 15.0 kN |
| loader / backhoe bucket (no give) | 8 km/h | 38 kN | 50 kN | 37.9 kN |
| rubber or urethane edge | 20 km/h | 32 kN | 1.5 kN | 1.5 kN |
What the glue can hold against a push at one edge (likely values): butyl pad 1.9 kN, hot-melt bitumen 18.7 kN, epoxy 28.1 kN. Butyl is weaker than the push from every kind of plow; bitumen and epoxy beat pickup and truck plows but not a loader bucket.
A whole winter
Share of sheets still attached in spring ("survives") and with an undamaged bond ("unharmed").
snow-emergency route (Bow St odd side)
| Shape | butyl pad | hot-melt bitumen | epoxy |
|---|---|---|---|
| today: 8.5 mm tall, 1:4 ramps | 0 % (0 % unharmed) | 9 % (2 % unharmed) | 31 % (9 % unharmed) |
| 8.5 mm, 1:8 ramps | 0 % (0 % unharmed) | 14 % (3 % unharmed) | 54 % (18 % unharmed) |
| 8.5 mm, 1:20 ramps (17 cm wide border) | 1 % (0 % unharmed) | 63 % (26 % unharmed) | 93 % (68 % unharmed) |
| 6 mm tall, 1:10 ramps (winter report's limit) | 0 % (0 % unharmed) | 20 % (4 % unharmed) | 66 % (25 % unharmed) |
| flush: set in a milled pocket, <= 0.5 mm proud | 0 % (0 % unharmed) | 78 % (41 % unharmed) | 98 % (82 % unharmed) |
regular street (Bow St even side)
| Shape | butyl pad | hot-melt bitumen | epoxy |
|---|---|---|---|
| today: 8.5 mm tall, 1:4 ramps | 38 % (36 % unharmed) | 72 % (56 % unharmed) | 87 % (68 % unharmed) |
| 8.5 mm, 1:8 ramps | 38 % (35 % unharmed) | 77 % (58 % unharmed) | 94 % (73 % unharmed) |
| 8.5 mm, 1:20 ramps (17 cm wide border) | 45 % (37 % unharmed) | 95 % (75 % unharmed) | 99 % (93 % unharmed) |
| 6 mm tall, 1:10 ramps (winter report's limit) | 45 % (42 % unharmed) | 83 % (64 % unharmed) | 96 % (79 % unharmed) |
| flush: set in a milled pocket, <= 0.5 mm proud | 53 % (47 % unharmed) | 98 % (87 % unharmed) | 100 % (97 % unharmed) |
Sheets lost, by the plow that took them: city dump truck, trip moldboard 54 %, loader / backhoe bucket (no give) 23 %, pickup / one-ton with trip edge 20 %, rubber or urethane edge 2 %.
Reading
- Today's design (butyl, 8.5 mm, 1:4) does not survive a plowed winter. On the snow-emergency side it's torn off almost every time; on the regular side ~38 % make it to spring, and only because the blade never reached them or rode over hardpack.
- With butyl, nothing helps: every plow pushes harder (1.5-50 kN) than a butyl pad holds at one edge (~2 kN), so shape, height and ramps change little. Butyl's cold strength is the one number that could overturn this, and nobody publishes it: the peel test on cold asphalt (CHEESE_DESIGN.md) is now the most valuable bench test for the in-road option.
- With a strong glue, shape decides: epoxy with 1:20 ramps survives ~93 % of emergency-route winters, flush in a milled pocket ~98 %. A plow at speed can't lift its blade over a step in time, so the lower and gentler the step, the smaller the push; a flush sheet is squashed past without lifting the blade.
- Check against the real world: recessed road reflectors lose < 1 % a winter and surface markers ~10 %/yr (winter report); the model's flush/epoxy and ramped/epoxy cases land in the same range.
- But a strong glue or a pocket gives up the sheet's selling point. Epoxy and milling mean road work, a permit and no easy removal: that's the cored puck again (Exp 8: ~1.6x the pole sensor's cost). Installation is also limited to dry days above ~4-10 C, so not December-March.
- Loaders are the worst case (no give, 50 kN pushes): they work where snow is piled, which is the parking lane after big storms.
- So: stuck-on sheets come out for winter (or skip the snow-emergency side entirely); the pole sensor covers winter. The dummy-sheet field test on Bow Street's even side tells us how often the blade really reaches the parking lane there.
Assumptions that decide the answer (all estimated; replace with measurements): cold bond strength of butyl pads (0.03-0.3 MPa assumed; nobody publishes it, CHEESE_DESIGN.md calls for a peel test), the force at which plow edges trip (2-30 kN assumed; manufacturers give no numbers), the plow mix on Cambridge streets, and how often the blade reaches bare pavement in the parking lane. Not modelled: the sheet cracking before the glue lets go, ice bonding the sheet in place, abrasion (small: steel sliding over the top wears microns per pass).
Sources for the numbers used: snowplowable markers sit in epoxy-set castings in milled grooves; Vermont found 93 % of an earlier snowplowable marker type damaged (VTrans); hot-melt bitumen marker adhesive bond >= 1.4 MPa (Wyndham spec 853); epoxy marker bond >= 500 psi at 77 F (TxDOT/CTR); butyl pads need primer below 50 F (Pexco); trip edges are spring-loaded to fold back on manhole covers (Loegering, US 6073371).
Experiment 11: how many spaces can one gateway serve?
LoRaWAN US915 link budget with the 3GPP TR 38.901 urban street-canyon path-loss model (valid at 915 MHz), log-normal shadowing, 4,000 draws per distance (research/sim/link_budget.py). Device transmits at 20 dBm; gateway on a rooftop with a 3 dBi antenna. "Range" = the distance at which 90 % of uplinks reach a single gateway (each state change is also sent twice, tick 12). Spaces per gateway use 1,500-4,000 on-street spaces per km² (estimate for dense Cambridge blocks).
Radio cost per spreading factor
| Spreading factor | Time on air (11-byte payload) | Radio's average current at 84 messages/day | Gateway capacity (devices, 8 channels) |
|---|---|---|---|
| SF7 | 62 ms | 7.2 µA | ~24,007 |
| SF8 | 113 ms | 13.2 µA | ~13,090 |
| SF9 | 206 ms | 24.0 µA | ~7,196 |
| SF10 | 371 ms | 43.2 µA | ~3,996 |
Range and spaces per gateway
| Sensor | Gateway | SF7 | SF8 | SF9 | SF10 |
|---|---|---|---|---|---|
| meter post, 1.2 m (Provolone) | rooftop 10 m | 1,404 m (~15,478) | 1,730 m (~23,504) | 2,102 m (~34,706) | 2,527 m (~50,166) |
| in-road, space empty | rooftop 10 m | 699 m (~3,842) | 850 m (~5,673) | 1,010 m (~8,009) | 1,243 m (~12,132) |
| in-road, car parked on top | rooftop 10 m | 344 m (~928) | 415 m (~1,355) | 495 m (~1,926) | 609 m (~2,911) |
Cells: 90 % range, then spaces within it at 2,500 spaces/km² (in brackets).
Reading
- On a post the radio is easy. From 1.2 m a pole sensor reaches a 10 m rooftop gateway ~2,102 m away at SF9; that circle holds ~20,823-55,529 spaces. Range stops being the limit; gateway placement (a rooftop with power and a view) and redundancy (each sensor should hear two gateways) set the count.
- Under a parked car it's ~4x shorter. The car and the ground cost ~20 dB: at SF10 the range is ~609 m (~2,911 spaces), and the sensor needs SF10 to get there. Still far more than Exp 8's 100-300 spaces per gateway.
- Range costs battery. At SF10 the radio alone averages ~43 µA, as much as a third of the pole sensor's radar budget; at SF7 ~7 µA. A pole sensor near a gateway can use fast data rates (ADR) and save most of that. Under a car, SF10 is the norm.
- Capacity isn't the limit at our traffic: even at SF10 one gateway carries ~3,996 sensors.
- For the cost model (Exp 8): range isn't what sets the gateway count for either design; sites (a rooftop with power and a view), redundancy (every sensor in reach of 2 gateways) and street geography are. Exp 8's 100-300 spaces per gateway was pessimistic: with ~1 gateway per 500-1,000 spaces its gateway share drops from ~$0.05-0.14 to ~$0.01-0.03 per space per month. Small next to the city-fee question, but the radio's battery cost (SF) is not small.
- Where our pilot gateway sits matters more than any of this: indoors, walls cost another 10-20 dB, which these numbers don't include. For the street pilot, put the ThinkNode on a rooftop or in a top-floor window facing Bow Street.
Assumptions to replace with measurements: the under-car and on-asphalt losses (American cheese's link test: RSSI/SNR under real cars vs on a post, logged by our backend), the street-canyon model on Cambridge's mix of 2-4 storey buildings (it ignores gateway height, which matters in practice), the spaces-per-km² density, and the gateway site. Our pilot data can't calibrate this (the pucks moved; no locations).
Experiment 12: can the pole radar tell a person from a parked car?
Exp 7's remaining error on a pole: people standing in the beam (~4 false "occupied" episodes a day). The radar gives each reflection's distance and strength. Monte Carlo (research/sim/people_vs_cars.py, 200,000 cases per setting): cars parked anywhere in the space (nearest reflection 0.7-2.5 m), people anywhere in the beam (0.4-4 m), two readings 5 s apart. Every rule is tuned to keep 99.5 % of cars; the table shows how many standing people still pass as a car.
Radar cross-sections at mm-wave are published as ranges, not one number (people are small dielectric reflectors, much weaker than vehicles: IET RSN 2019, JRC 24/77 GHz library, arXiv 1910.13706), so they're swept: car side at a slant 5 / 10 / 15 dBsm, person -12 / -8 / -4 dBsm.
Middle case (car 10 dBsm, person -8 dBsm)
| Rule | Standing people passed as a car | Exp 7's false episodes/day become | Motorbikes/scooters still detected |
|---|---|---|---|
| raw strength | 24.44 % | ~0.95 | 77 % |
| distance-corrected strength | 1.26 % | ~0.05 | 55 % |
| stillness (peak moves < 12 mm) | 29.83 % | ~1.16 | 100 % |
| corrected strength + stillness | 0.73 % | ~0.03 | 64 % |
| corrected strength + stillness over 4 readings (15 s) | 0.07 % | ~0.00 | 64 % |
All cases: standing people passed as a car
| Car RCS | Person RCS | Raw strength | Distance-corrected | Stillness (2 readings) | Corrected + stillness (2) | Corrected + stillness (4 readings) |
|---|---|---|---|---|---|---|
| +5 dBsm | -12 dBsm | 26.5 % | 2.4 % | 29.7 % | 1.4 % | 0.1 % |
| +5 dBsm | -8 dBsm | 36.5 % | 17.7 % | 29.8 % | 7.9 % | 0.6 % |
| +5 dBsm | -4 dBsm | 48.7 % | 54.2 % | 30.2 % | 20.7 % | 1.6 % |
| +10 dBsm | -12 dBsm | 17.2 % | 0.1 % | 29.7 % | 0.0 % | 0.0 % |
| +10 dBsm | -8 dBsm | 24.4 % | 1.3 % | 29.8 % | 0.7 % | 0.1 % |
| +10 dBsm | -4 dBsm | 33.5 % | 11.8 % | 29.9 % | 5.6 % | 0.4 % |
| +15 dBsm | -12 dBsm | 10.1 % | 0.0 % | 29.7 % | 0.0 % | 0.0 % |
| +15 dBsm | -8 dBsm | 15.6 % | 0.0 % | 30.0 % | 0.0 % | 0.0 % |
| +15 dBsm | -4 dBsm | 22.3 % | 0.6 % | 29.8 % | 0.4 % | 0.0 % |
Reading
- Raw strength is the wrong number. A person at 0.5 m returns as much as a car at 2 m (1/d⁴): a plain strength threshold that keeps 99.5 % of cars passes ~10-50 % of standing people.
- Correcting for distance helps a lot when the gap is wide: strength + 40·log10(distance) estimates the reflector's size; with cars ~18 dB above people only ~1 % pass. When the gap is narrow (5 vs -4 dBsm) it fails (~54 %).
- Stillness over one pair of readings is weak: ~30 % of standing people move less than ~12 mm in 5 s.
- Stillness over 4 readings (15 s) is what closes it: combined with the distance-corrected strength, 0.07 % of standing people pass in the middle case and 1.6 % in the worst case swept (vs 21 % with 2 readings). Exp 7's ~4 false episodes a day become ~0.00-0.1. The price: an arrival is confirmed after 15-20 s instead of ~10 s. Departures can stay fast (a car leaving needs no stillness check).
- The cost: small vehicles. A size rule tuned on cars drops many motorbikes and scooters; stillness alone keeps them. For metered car spaces that's acceptable; it should be a setting.
- Firmware needs no new hardware: the data log already records peak distance and strength at every reading (
scripts/cheese_log.sh). Exp 4 sets the two thresholds from real cars and real people, then they go into pole mode.
Assumptions to check in Exp 4: the RCS ranges (literature is at 77 GHz, the A121 is 60 GHz; near-range returns from a car side at a slant aren't far-field RCS), sway of a standing person (~3 cm in 5 s assumed), the A121's distance noise (~1-2 mm assumed), and that the strongest peak is the one we read (the firmware reads peak 0; the detector can sort by strength).
Test to add to the pole test plan: stand in the beam at 0.5, 1, 2 and 3 m for 60 s each (still, then fidgeting), and walk through it; log alongside a parked car at the same distances.
Experiment 1: which architecture detects parked cars best?
Monte Carlo, 2500 situations (half occupied). Thresholds are chosen on one half of the trials and scored on the other. Generated by research/sim/architectures.py.
| Architecture | Accuracy | Missed cars | False alarms | Best threshold |
|---|---|---|---|---|
| In-road upward radar (A121-class) | 99.6 % | 0.5 % | 0.3 % | — |
| Pole/meter-post side radar or ToF | 99.5 % | 0.4 % | 0.6 % | — |
| In-road 4-magnetometer array (24 x 20 cm) | 98.6 % | 2.6 % | 0.2 % | 2.5 uT |
| In-road 2-magnetometer gradiometer (cheese, 21 cm) | 93.7 % | 8.2 % | 4.5 % | 0.8 uT |
| In-road single magnetometer | 90.6 % | 14.7 % | 4.2 % | 1.9 uT |
| Curb-face magnetometer | 71.5 % | 43.2 % | 13.8 % | 1.5 uT |
What each trial randomises: car size (small car to van) and where it stops in its 6 m space; gap to the curb (10-50 cm); cars in the spaces in front and behind (70 % each, anywhere in their space); a car or bus in the travel lane (30 %); street direction vs magnetic north; sensor noise (0.2 uT RMS); temperature drift since calibration (0.5 uT shared, plus 0.3 uT per sensor); each sensor's ~1 % gain error on Earth's field; and how magnetic cars really are (log-normal multiplier, x0.4 to x2.5, because our dipole model is uncalibrated).
Calibration: the car model is fitted to published measurements (magnetics report): 30-50 uT at the engine and axles, ~0-3 uT between the axles. With it, a single in-road magnetometer scores about 90 %, matching independent field studies (81-93 %), which is a good sign the model is realistic.
Assumptions to check against American cheese's data: the dipole car model; radar/ToF modelled as geometry with 99.5 % per-reading reliability (no snow on in-road radar, no snowbank in front of a pole sensor); a single reading per decision (real firmware confirms over 3 readings, which cuts false alarms further for all magnetometer designs).
Experiment 2: what does each form factor cost per space per year?
Monte Carlo (20,000 draws per form factor) over a 5-year horizon, 1,000 spaces. Everything: hardware, install labour, winter handling, damage/theft replacement, battery-death service, a share of the gateways and their SIMs. Generated by research/sim/cost_model.py; the input ranges are in that file.
| Form factor | $ per space per year (median) | 80 % range | Per month | Notes |
|---|---|---|---|---|
| Meter-pole radar 'Provolone' (2 spaces per unit) | $13 | $11-15 | $1.10 | two radars, one aimed into each space (twin-head poles or space boundaries) |
| Meter-pole radar 'Provolone' (1 space per unit) | $21 | $17-25 | $1.74 | TPT agreement for meter poles; no digging, no lane closure; accuracy unproven |
| Core-drilled puck, mag + radar (in-ground) | $41 | $35-48 | $3.44 | Street Opening Permit + bond; no install in winter or on recently paved streets |
| Swiss cheese sheet (in-road, seasonal) | $43 | $36-52 | $3.58 | removed every winter (Cambridge snow emergencies); 4-6 months a year without data |
| Swiss cheese + radar (in-road, seasonal) | $46 | $39-55 | $3.86 | same as cheese; radar confirms events (industry practice) |
| Commercial sensor + service (IPS contract) | $105 | $103-110 | $8.79 | reference point: Santa Ana pays $250 + $45 install + $3.50/space/month |
Reading: our own hardware lands at a few dollars per space per month, all-in, versus ~$10/month for the commercial reference. The cheapest options are the ones that never need a crew in the road: pole sensors avoid lane closures, permits for digging and the twice-a-year winter removal that the in-road sheet needs. The in-road sheet's real cost is not money but 4-6 months a year without data.
Not included: our engineering time, city fees we don't know yet, insurance, and sales. Install labour assumes a trained technician; the first installs will be slower.
Experiment 3: what does a radar on a meter pole see?
Ray-traced geometry (research/sim/pole_radar.py): radar on the meter pole at the boundary between two spaces, aimed into its own space. Cars are boxes parked anywhere in their 6 m spaces (up to 40 cm over the line), neighbours present 70 % of the time, a vehicle in the lane 30 %. The radar reports "occupied" when enough of its beam hits a vehicle inside its range gate.
Searched 288 mountings: height 0.6 / 0.85 / 1.1 m (a strap on the bare post below the meter head reaches 0.6-0.85 m), aim 0-75 deg into the own space, down-tilt 0-30 deg, range gate 1.6-4.0 m. Pole 0.6 m behind the curb face; 30 deg beam half-angle (A121 datasheet).
Best mountings
| Height | Aim into own space | Down-tilt | Range gate | Accuracy | Missed cars | False alarms (neighbour/lane) |
|---|---|---|---|---|---|---|
| 0.6 m | 50 deg | 0 deg | 4.0 m | 100.0 % | 0.0 % | 0.0 % |
| 0.6 m | 50 deg | 10 deg | 4.0 m | 100.0 % | 0.0 % | 0.0 % |
| 0.6 m | 50 deg | 20 deg | 4.0 m | 100.0 % | 0.0 % | 0.0 % |
| 0.6 m | 65 deg | 0 deg | 4.0 m | 100.0 % | 0.0 % | 0.0 % |
| 0.6 m | 65 deg | 10 deg | 4.0 m | 100.0 % | 0.0 % | 0.0 % |
For comparison: aiming straight across the street at 0.85 m height scores 66 % at best, and the worst mounting searched scores 50 %. Where you point it matters more than the sensor.
Snowbanks (with the best aim)
| Snowbank height | Sensor height | Blinded (reports "blocked") | Missed | False alarms |
|---|---|---|---|---|
| 0.3 m | 0.6 m | 0 % | 0.0 % | 2.0 % |
| 0.3 m | 0.85 m | 0 % | 0.0 % | 6.0 % |
| 0.3 m | 1.1 m | 0 % | 0.0 % | 1.5 % |
| 0.6 m | 0.6 m | 100 % | 0.0 % | 0.0 % |
| 0.6 m | 0.85 m | 0 % | 0.0 % | 0.0 % |
| 0.6 m | 1.1 m | 0 % | 0.0 % | 3.5 % |
| 0.9 m | 0.6 m | 100 % | 0.0 % | 0.0 % |
| 0.9 m | 0.85 m | 100 % | 0.0 % | 0.0 % |
| 0.9 m | 1.1 m | 0 % | 1.5 % | 0.0 % |
Reading: aim the radar diagonally into its own space (so the neighbour's car, which parks right next to the same pole, falls outside the beam) and cap the range so the travel lane is ignored. Mount it high on the pole so snowbanks along the curb don't blind it; when a bank does, the sensor can tell (everything is very close) and report "unknown" instead of guessing.
Assumptions: cars as boxes (body 0.3-1.45 m, or 1.8 m for tall vehicles), a 30 deg effective beam half-angle (A121 HPBW 65 x 53 deg), the pole at a space boundary 60 cm behind the curb, flat street, no pedestrians or cyclists in the beam (a real risk on the sidewalk side: the beam points away from the sidewalk).
Experiment 5: can firmware beat the dead zones?
Time-series simulation (research/sim/firmware_events.py): cars back into the space along a parallel-parking path, park anywhere in it (often with the sheet in a dead zone between the axles), stay 10 min-2 h, and drive out. The car model is Exp 1's, calibrated to measured fields. The cheese samples every dt seconds at a random phase.
| Sampling | Strategy | Arrivals caught (≤ 30 s) | Departures caught (≤ 60 s) | False alarm: car parks next door | Avg current |
|---|---|---|---|---|---|
| every 3 s | Today's firmware (5 / 2 uT, steady) | 29 % | 96 % | 0 % | ~10 µA |
| every 3 s | Lower thresholds (2 / 0.8 uT) | 91 % | 6 % | 0 % | ~10 µA |
| every 3 s | Event latch (arrival transient > 8 uT) | 22 % | 100 % | 0 % | ~10 µA |
| every 3 s | Magnetometer wakes a radar | 97 % | 100 % | 0 % | ~18 µA |
| every 1 s | Today's firmware (5 / 2 uT, steady) | 32 % | 100 % | 0 % | ~24 µA |
| every 1 s | Lower thresholds (2 / 0.8 uT) | 90 % | 5 % | 0 % | ~24 µA |
| every 1 s | Event latch (arrival transient > 8 uT) | 20 % | 100 % | 0 % | ~24 µA |
| every 1 s | Magnetometer wakes a radar | 98 % | 100 % | 0 % | ~32 µA |
| every 0.5 s | Today's firmware (5 / 2 uT, steady) | 31 % | 100 % | 0 % | ~45 µA |
| every 0.5 s | Lower thresholds (2 / 0.8 uT) | 91 % | 6 % | 0 % | ~45 µA |
| every 0.5 s | Event latch (arrival transient > 8 uT) | 21 % | 100 % | 0 % | ~45 µA |
| every 0.5 s | Magnetometer wakes a radar | 99 % | 100 % | 0 % | ~53 µA |
Reading: a magnetometer alone can't both catch cars parked over a dead zone and ignore the car next door: lowering thresholds or latching on transients trades one error for the other, and catching brief transients needs faster sampling (more battery). A radar woken by the magnetometer settles it: the magnetometer only has to notice that something changed, and the radar, which sees the car body directly, decides.
Assumptions: radar per-check reliability 99.5 % and ~0.5 mC per check (A121 datasheet: ~74 mA during a few-ms sweep, plus start-up; to be measured); 40 parking events/day; noise 0.25 µT. The radar's own failure modes (slush on the window) are not modelled here.
Experiment 7: how should a pole radar poll?
On a meter pole there is no magnetometer to wake the radar, so it has to look on a timer. Event simulation (research/sim/pole_firmware.py), 30 days per setting: ~12 parked cars a day (5 min-3 h), people crossing the beam (~8/h by day, ~2 s each) and a few standing in it (4/day, 20-120 s), 0.5 % per-reading radar error. The firmware reads every P seconds and changes state after N readings in a row agree.
| Read every | Readings that must agree | Arrival reported (median / 95 %) | Departure (median / 95 %) | False "occupied" per day (people) | Avg current | D-cell life |
|---|---|---|---|---|---|---|
| 2 s | 1 | 1 s / 2 s | 1 s / 2 s | 234.5 | 267 µA | 7 yr |
| 2 s | 2 | 3 s / 4 s | 3 s / 4 s | 16.0 | 267 µA | 7 yr |
| 2 s | 3 | 5 s / 6 s | 5 s / 6 s | 3.1 | 267 µA | 7 yr |
| 5 s | 1 | 2 s / 5 s | 2 s / 5 s | 98.1 | 117 µA | 15 yr |
| 5 s | 2 | 8 s / 10 s | 8 s / 10 s | 3.9 | 117 µA | 15 yr |
| 5 s | 3 | 13 s / 15 s | 13 s / 15 s | 2.8 | 117 µA | 15 yr |
| 10 s | 1 | 5 s / 9 s | 5 s / 10 s | 53.7 | 67 µA | 15 yr |
| 10 s | 2 | 16 s / 20 s | 16 s / 20 s | 3.1 | 67 µA | 15 yr |
| 10 s | 3 | 25 s / 29 s | 25 s / 30 s | 2.5 | 67 µA | 15 yr |
| 30 s | 1 | 14 s / 28 s | 15 s / 28 s | 19.7 | 34 µA | 15 yr |
| 30 s | 2 | 46 s / 59 s | 45 s / 59 s | 1.9 | 34 µA | 15 yr |
| 30 s | 3 | 76 s / 89 s | 75 s / 89 s | 1.2 | 34 µA | 15 yr |
Reading: a pole sensor doesn't need a magnetometer. Reading every 5 s and requiring 2 agreeing readings reports cars within ~10 s, filters people walking through the beam, and still runs over 10 years on one D-size lithium cell. People who stand in the beam for a minute (loading a trunk) still cause brief false "occupied" episodes; requiring 3 readings cuts them but not to zero. The proper fix is the radar itself: a person is a weak, narrow reflector next to a car, so a strength threshold (measured in Exp 4) should separate them.
Assumptions: 0.5 mC per radar check including start-up (Acconeer's low-power figures suggest less; to be measured on the XM125), ~30 LoRa messages + 24 heartbeats a day at ~40 mC, 3 µA sleep, 17 Ah usable, 15-year shelf-life cap. Pedestrian rates are guesses for Bow Street, to be replaced with counts from the kit's data log.
Experiment 8: what happens as we scale?
Exp 2 priced 1,000 spaces without fixed costs. This adds volume pricing (small runs pay retail module prices, 10,000 units get ~30 % off), the fixed costs a real deployment carries (FCC Part 15B test, liability insurance, hosting, LoRaWAN network fees, a minimum number of gateways), and a possible city fee for using meter poles. Monte Carlo, 20,000 draws, 5-year horizon (research/sim/scaling.py; every input range is in that file). Pole sensor battery from Exp 7 (outlasts the horizon). Updated (tick 14): pole sensor unit costs from the priced bill of materials ($78 at 1,000 units vs $50 assumed before), spaces per gateway from Exp 11.
Cost per space per month, all-in
| Form factor | 100 spaces | 1,000 spaces | 10,000 spaces |
|---|---|---|---|
| Pole radar 'Provolone' (1 space/unit) | $8.82 ($7.58-10.22) | $3.32 ($2.79-4.01) | $2.18 ($1.70-2.86) |
| Pole radar 'Provolone' (2 spaces/unit) | $7.27 ($6.16-8.58) | $2.17 ($1.87-2.53) | $1.28 ($1.03-1.61) |
| In-road sheet + radar (seasonal) | $10.74 ($9.29-12.31) | $5.18 ($4.38-6.11) | $4.37 ($3.60-5.28) |
| Core-drilled puck, mag + radar | $10.82 ($9.39-12.40) | $5.27 ($4.46-6.25) | $4.44 ($3.66-5.42) |
| Commercial reference (Santa Ana: $250 sensor + $45 install over 5 yr + $3.50/month) | $8.42 | $8.42 | $8.42 |
Median, with the 80 % range in brackets.
What moves the pole sensor's cost (1,000 spaces)
Every input at its likely value: $2.43 per space per month. Each bar swings one input from its low to its high value.
| Input | Range | $/space/month at low | at high | Swing |
|---|---|---|---|---|
| city fee $/space/yr | 0-20 | $2.43 | $4.09 | 1.67 |
| yearly visit min | 0-10 | $2.24 | $2.86 | 0.62 |
| unit $ @1k | 67-95 | $2.20 | $2.78 | 0.58 |
| loss %/yr | 2-10 | $2.22 | $2.78 | 0.56 |
| liability insurance $/yr | 1500-6000 | $2.30 | $2.68 | 0.38 |
| LoRaWAN network $/device/month | 0-0.2 | $2.38 | $2.58 | 0.20 |
| labour $/h | 35-60 | $2.36 | $2.53 | 0.17 |
| install min | 4-15 | $2.36 | $2.54 | 0.17 |
| Part 15B test + labels, one-off $ | 3000-12000 | $2.38 | $2.53 | 0.15 |
| hosting $/month (per 1k spaces, min 1) | 25-150 | $2.39 | $2.52 | 0.12 |
Reading
- Scale is the first lever. The pole sensor costs ~$8.82/space/month at 100 spaces and ~$2.18 at 10,000: at pilot scale the fixed costs (insurance, certification, minimum gateways, hosting) are most of the bill. A 100-space pilot is a cost centre, whatever the hardware; the hardware choice only shows at 1,000+.
- The pole sensor stays cheapest at every scale, and the gap to the in-road options widens with scale because their cost is recurring labour (winter removal, re-coring), which doesn't get cheaper with volume.
- Unknown #1 is the city fee. If Cambridge treats a sensor on a meter post like a small-cell attachment and charges even $20/space/year, that is one of the biggest single items. It's the first question for the city (deployment report), ahead of any hardware decision.
- Two spaces per unit roughly halves per-space hardware and install; worth it where the post sits on a space boundary (Exp 3's geometry), pending the site survey.
- Against the commercial reference (~$8.42/space/month) every option of ours leaves a wide margin at 1,000+ spaces; the price we charge can be set by the value of the data, not by the hardware.
Not included: our salaries, sales, R&D, financing. Assumptions to replace with real numbers: city fee, insurance quote, Part 15B lab quote, gateway coverage on Cambridge streets (American cheese's link test).
Experiment 9: does every space need a sensor?
A 12-space block over 60 simulated days, minute by minute (research/sim/coverage.py): demand follows a daily curve, cars stay 45 min on average and take a random free space. Only some spaces carry a sensor; sensors are taken as right. The question a driver cares about: when the block is nearly full (≥ 80 %) and a space is free, does the app know where?
| Block | Time it's ≥ 80 % full | Spaces with a sensor | App can point to a free space (when it matters) | Error in "free spaces on this block" | Cost per space on the block per month |
|---|---|---|---|---|---|
| quiet (peaks ~70 % full) | 13 % | 25 % | 37 % | 2.25 spaces | $0.83 |
| quiet (peaks ~70 % full) | 13 % | 50 % | 67 % | 1.26 spaces | $1.66 |
| quiet (peaks ~70 % full) | 13 % | 75 % | 87 % | 0.75 spaces | $2.49 |
| quiet (peaks ~70 % full) | 13 % | 100 % | 100 % | 0.00 spaces | $3.32 |
| busy (peaks ~88 %) | 18 % | 25 % | 37 % | 2.19 spaces | $0.83 |
| busy (peaks ~88 %) | 18 % | 50 % | 66 % | 1.22 spaces | $1.66 |
| busy (peaks ~88 %) | 18 % | 75 % | 87 % | 0.73 spaces | $2.49 |
| busy (peaks ~88 %) | 18 % | 100 % | 100 % | 0.00 spaces | $3.32 |
| packed (peaks ~97 %) | 23 % | 25 % | 36 % | 2.12 spaces | $0.83 |
| packed (peaks ~97 %) | 23 % | 50 % | 65 % | 1.19 spaces | $1.66 |
| packed (peaks ~97 %) | 23 % | 75 % | 86 % | 0.71 spaces | $2.49 |
| packed (peaks ~97 %) | 23 % | 100 % | 100 % | 0.00 spaces | $3.32 |
Reading
- Partial coverage fails exactly when it matters. On a nearly full block only one or two spaces are free, so the share of spaces with a sensor is roughly the chance the app knows about one: 50 % coverage -> ~66 %, 75 % -> ~87 %, whatever the block. The rest of the time the app says "full" while a space is free. Block-level estimates are off by ~1.2 spaces at 50 % coverage: fine for a heat map, useless for sending a driver to a space.
- Busier blocks need it more often, not differently: the packed block is nearly full ~23 % of the time, the quiet one ~13 %. On a quiet block a driver mostly finds a space without help, so sensors there earn their keep through city data (turnover, enforcement, planning) rather than guidance.
- So the product decides coverage: per-space guidance ("space 4 is free") on busy blocks needs every space sensored; a block-level heat map for planning or pricing (SFpark-style demand pricing, DDOT's finding) can run on 25-50 % coverage, plus meter-payment data, at a quarter to half the cost.
- A cheaper middle: sensor every space on the busiest blocks, sample the rest. Exp 8's cost per sensor applies only where sensors go.
Assumptions: drivers take a random free space (in reality ends of the block and spaces near entrances fill first, which would let a few well-placed sensors do better or worse; the street log will tell); perfect sensors; no double-parking or loading. Demand curves are generic, not Bow Street's.
Report: deploying on Bow Street, Cambridge
Research agent, 2026-11-07. Primary sources linked; [unverified] marks estimates.
Site facts that drive the choice
- Bow Street has single-space meters (about 40 spaces, BOW-0001 to BOW-0057, $2/hr, 8 AM-8 PM, 30 min or 2 h,
SmartMeter = No) in the City's metered-spaces GIS layer (layer, dictionary). Coin + app meters, no replacement planned (Cambridge Day). So there are meter poles at the curb; one pole per space vs twin heads per two spaces is [unverified]. - The odd-numbered side of Bow Street is a primary Snow Emergency tow route (~235 ft); cars are towed during bans and plows run to the curb (Snow Center). Brine pre-treatment since 2018; monthly mechanical sweeping April-December (Street Cleaning).
Form factors
| Form factor | Permit path | Install | Winter | Theft / liability | Maintenance | Power |
|---|---|---|---|---|---|---|
| A. Under-car adhesive sheet (cheese) | no published category; written TPT/DPW consent + space coned while it cures | < 10 min, 1-2 people | highest: proud on a plowed, swept, salted surface; vendors steer snow regions to in-ground (Urbiotica) | low theft; raised edge is a minor trip/bike hazard | must come out before each snow emergency | battery only |
| B. Core-drilled flush puck | DPW Street Opening Permit + bond; no work on streets resurfaced in the last 5 years; winter construction moratorium (DPW regs) | 15-30 min, 2 people, cones, maybe police detail [unverified] | low (Nwave: "designed for heavy snowplough regions") | low; flush | battery death = re-coring; SFpark batteries ~3 yr, some sensors paved over (SFpark eval) | battery only |
| C. Curb face | no precedent; DPW sign-off likely [unverified] | 10-15 min | medium-high: banks bury it, plow/sweeper contact | moderate theft | easy unless buried | battery |
| D. Sidewalk / curb top | DPW sidewalk obstruction / annual use permit | ~10 min | medium | ADA clear width + cane detectability (PROWAG); least likely to be approved | easy | some solar |
| E. Clamp-on meter / sign pole | TPT agreement for meter poles; City light poles need a Pole & Conduit Commission grant of location, "even ... temporary installations" (minutes) | 5-10 min, 1 person, no closure [unverified] | low: above snow, away from blades; banks can block a low-aimed view | moderate theft (tamper-proof clamp; ≤ 4 in protrusion at 27-80 in height) | easy battery swaps. Boston found meter-mounted sensors "had many problems with the data's accuracy" and needed "significant staff time to calibrate" (Boston report) | small solar on top possible but canyon-shaded |
| F. Overhead camera / radar | grant of location + Surveillance Ordinance (Ch. 2.128) for anything camera-like: Council approval after a public hearing; Flock ALPRs were switched off at the Council's request | bucket truck, 1-2 h per pole [unverified]; many spaces per unit | low | low theft; high political risk if a camera | few units, but one failure = many spaces | streetlight AC possible |
Evidence from other pilots
- SFpark (~8,000 sensors): interference varied space to space and nearly half the spaces needed two sensors; batteries failed early and at random; occupancy reliable, turnover/stay length not; SFMTA bought data rather than hardware and later replaced sensors with a model built on payment data.
- Boston (330 Streetline in-ground sensors, 2013): sensors "do not give plug-and-play reliably high-quality occupancy data"; scaling needs methods "other than a sensor at every meter" (New Urban Mechanics).
- No published Boston-area winter damage rates found.
Power
No solar under a car. At curb/pole height in a street canyon, winter sun is weak and often blocked; solar-only curb devices have struggled in northern winters. Primary lithium battery for 5+ years; solar trickle on a pole as a bonus.
Takeaways
- Cheese is a seasonal pilot device, not a city-scale product. If kept: even (non-tow-route) side of Bow Street only, recover before the first snow emergency.
- Clamp-on to the existing meter poles is the most deployable option: no dig, ~5 min, no lane closure, above plows, easy battery swaps, probably one TPT agreement. Its risk is accuracy (Boston's experience): it must be proven, including when snowbanks block the view.
- Core-drilled pucks are the proven winter answer but slow to permit and costly to service: a vendor play, not a student one.
- Avoid cameras (Surveillance Ordinance; Flock episode). Ask whether non-imaging radar counts.
- Design for a primary battery (5+ years) and over-the-air recalibration; report health data.
- Sell the data, not the hardware: SF and Boston both found per-space hardware maintenance was the long-term pain.
Questions for Jeffrey Parenti / TPT
- Who approves a device on a meter pole (TPT or the Pole & Conduit Commission)? Insurance/indemnity?
- Is there a permit category for a surface-adhered device in a space? Any DPW objection on a tow route?
- Is Bow Street a 5-year moratorium street?
- Does a non-imaging radar or magnetometer count as surveillance technology under Ch. 2.128?
- Any planned meter replacement (integrate rather than clamp)?
- Who removes/reinstalls devices before snow emergencies and sweeping?
- Can we get ground-truth (meter / PayByPhone / Passport sessions) to validate accuracy?
Report: what a magnetometer really sees under a parked car
Research agent, 2026-11-07. "(read from plot)" = read off published figures; "(derived)" = our calculation.
Summary: no public table gives "µT under engine / cabin / trunk", but every primary measurement points the same way: 30-50 µT at the engine and axles, ~0 µT in "dead zones" between the axles, and one car parked over a slot-centre sensor changed the field by only ~3 µT steady-state. A large vehicle ~40 cm outside the space can disturb a sensor more than a small car parked over it.
Measured values
| Quantity | Value | Conditions | Source | ||
|---|---|---|---|---|---|
| Change vs distance, "typical automobile" | 1 ft 27 µT · 3 ft 7.5 µT · 5 ft 1.0 µT · 10 ft 0.2 µT | Honeywell Table 1 | AN218 | ||
| Under a car, 24 models, 2-D scan | peaks +33 to +50 µT at engine/axles; dead zones ≈ 0 under the car (read from plot) | two AMR sensors 30-40 cm apart | Markevicius et al. 2016 | ||
| Car parked, sensor near slot centre | transient ~+6.5 µT (axle passing); **steady \ | ΔB\ | ≈ 3 µT** (read from plot) | MAG3110, garage | Zhuang, UW thesis 2019 |
| Lateral falloff (raw units) | MPV: in-space 33 → 40 cm outside 15 → 80 cm outside 5; mini car: 10 → 4 → 2 | the MPV 40 cm outside exceeds the mini car in its own space | Sensors 19:2348 (2019) | ||
| Weakest point | between front and rear wheels; worst for SUVs, MPVs, pickups | same | |||
| Two-sensor gradient under a car | not reported anywhere | ||||
| EVs / aluminium bodies | no measured data found |
Accuracy in the field
| System | Accuracy |
|---|---|
| Magnetometer only, roadside (Sensors 2019) | 90.8 %; 99.6 % with radio-signal-strength fusion |
| Magnetometer only, garage, 3 months (UW) | 85.6 % (81.7-93.0 %); > 99.9 % with an added ultrasonic sensor |
| Omron "engine passage" algorithm | 100 % of 615 vehicles: latches on the engine passing over a sensor placed one-third from the front |
| Bosch PLS | 96 % over > 2,000 sensors; self-learns over the first 5-10 parkings |
Failure modes: dead zones between axles (worse with high clearance), big vehicles next door or in the lane, slow traffic, sun/shade temperature swings, building steel, cars entering at an angle.
Drift
MMC5603NJ: offset drift 0.2 mG/°C typical (1.0 max), removed by SET/RESET; sensitivity changes 5 % over -40…85 °C (derived: ~0.14 µT/°C on Cambridge's vertical field, ~3.5 µT for a 25 °C pavement swing; common-mode, so it largely cancels between two sensors). Berkeley's fix: an adaptive baseline updated only while the slot is empty and quiet.
Datasets
None is a labelled parked-car raw-field dataset (IEEE DataPort road vehicles, moving traffic; Colorado School of Mines logger, tiny; Geelong occupancy events, no field values). We have to collect our own.
What it means for Glee
- Thresholds: our model's 5-10 µT mid-sedan estimate is optimistic. A fixed 5 µT steady-state threshold will miss some cars (SUVs, pickups with mid-wheelbase over the sensor), and lowering it lets big neighbours in.
- Switch to event-based logic: trigger on the arrival transient (axle/engine passage is 2-10× the steady value) and/or the gradient; latch "occupied" with a low hold threshold (~1.5-2 µT); release on a departure transient or a return to within ~1 µT of baseline; freeze the baseline while occupied.
- The gradient is a good veto (adjacent cars, traffic, drift), not a required AND-condition: in dead zones both sensors see ~0.
- Under-car features vary over 30-100 cm: a 30-40 cm baseline or 3 sensors separate "under" from "beside" better than 21 cm. Or place the sensor one-third of the space from the front, where engines land.
- Log raw 3-axis data at ≥ 10 Hz with camera ground truth for 2-4 weeks, including SUVs, pickups and EVs.
Report: Provolone v1 bill of materials
Research agent, 2026-11-07. Distributor prices looked up today (some are cached listings); est = our estimate where no public price exists, to be replaced by quotes. US dollars, per unit, before sales tax.
Bottom line
- One radar: ~$112 / $78 / $44 per unit at 100 / 1,000 / 10,000 units before certification. With certification spread over the run: $212 / $88 / $45. Two radars: $133 / $97 / $52 before certification, $233 / $107 / $53 with it.
- Above Exp 8's assumption ($38-70 at 1k). Re-run Exp 8 with ~$65-90 at 1k.
- Biggest items at 1k: XM125 ($16.50), box ($11), cell + pulse capacitor ($9.40), stainless bands ($8), RAK3172 ($6.50), labour ($6). 10k is lower mainly through the bare A121, a moulded box and a contract manufacturer.
- Bare A121 vs XM125 makes no FCC difference. The XM125 has no grant of its own; both rely on the A121's limited single-modular approval (FCC ID 2AQ6KA1201). Either way we do host testing only (Part 15B plus a radiated-spurious check), not a new radar certification.
- Keep the RAK3172 even at 10k. Our own STM32WL radio saves ≤ ~$1/unit and costs ~$8-15k in radio certification.
Line items: one-radar unit
100 and 1k: XM125 + Hammond box. 10k: bare A121 on a 4-layer board + moulded box.
| Item | Part | 100 | 1k | 10k | Source / note |
|---|---|---|---|---|---|
| Radar | XM125 → bare A121 (10k) | 17.57 | 16.49 | 6.49 | DigiKey @100 / @500 / reel |
| Radar support | 24 MHz crystal, 6 caps | – | – | 0.10 | A121 DS Table 13 |
| 2nd radar's carrier + flex (2-radar only) | 1.50 | 1.00 | 0.60 | est | |
| LoRa | RAK3172-9-SM-NI | 6.97 | 6.50 | 5.50 | Rokland / RAK + duty / est |
| Antenna | Johanson 0915AT43A0026 | 0.85 | 0.41 | 0.35 | DigiKey |
| 1.8 V buck, load switch | TPS62840 | 0.90 | 0.60 | 0.45 | LCSC |
| Tamper | LIS2DH12 | 0.45 | 0.36 | 0.25 | LCSC |
| Passives, connector | 1.00 | 0.70 | 0.50 | est | |
| PCB ~70×50 mm | 2-layer → 4-layer (10k) | 0.60 | 0.25 | 0.25 | JLCPCB |
| SMT assembly | incl. setup, fixtures, X-ray | 2.50 | 0.70 | 0.50 | JLCPCB fees |
| Cell | EVE ER34615, 19 Ah | 9.00 | 6.00 | 4.50 | nkon; Alibaba; est |
| Pulse support | Eaton PHV-5R4V255-R 2.5 F | 4.50 | 3.40 | 2.80 | DigiKey |
| Cell holder, leads | 1.50 | 1.00 | 0.60 | est | |
| Enclosure | Hammond 1555F2GY → moulded PC ($30k tooling) | 14.22 | 11.00 | 7.00 | Mouser; est |
| Window + rain hood | 1.49 mm PC, bonded | 5.00 | 2.50 | 0.70 | est |
| Vent + desiccant | Gore VE80205 → generic | 4.05 | 2.65 | 0.60 | RS |
| Pole saddle | printed → moulded | 6.00 | 3.00 | 0.80 | est |
| Bands | 2× BAND-IT 3/4" | 13.12 | 8.00 | 5.00 | Zoro; est |
| Security screws, labels | 1.70 | 1.05 | 0.50 | est | |
| Contingency | 10 % of parts | 9.00 | 6.46 | 3.69 | |
| Hazmat freight | UN3090 | 1.50 | 0.80 | 0.40 | est |
| Labour + test | 15 / 8 / 4 min | 11.25 | 6.00 | 2.80 | $45/h; jig |
| Unit cost before certification | 111.67 | 77.87 | 43.78 | ||
| Certification | ~$10k ($6-18k) | 100.00 | 10.00 | 1.00 | |
| Unit cost, all-in | 211.67 | 87.87 | 44.78 |
Totals
| Configuration | 100 | 1k | 10k |
|---|---|---|---|
| 1 radar, before certification | $112 | $78 | $44 |
| 1 radar, all-in | $212 | $88 | $45 |
| 2 radars, before certification | $133 | $97 | $52 |
| 2 radars, all-in | $233 | $107 | $53 |
| Cheapest credible, 1 radar, before certification (bare A121, generic vent) | – | $67 (+$5 layout work) | ~$38-44 |
| Exp 8 assumption, 1 radar | $57-105 | $38-70 | $27-49 |
Choices
Radar. The bare A121 ($8.22 at 1k vs $16.49 for the XM125) saves ~$8 per radar. It needs:
- a 1.8 V rail that holds through ~75 mA steps (the XM125 needs 1.8 V too, so the buck is in both);
- a 24 MHz crystal (CL 9 pF, 8 pF load caps in Acconeer's example) and SPI up to 50 MHz;
- every GND pad on top-layer ground, no ground openings near λ (5 mm), no lens raising EIRP; the 0.5 mm-pitch fcCSP probably needs 4 layers;
- Acconeer's radar library (RSS) ported to the RAK3172's STM32WL (Cortex-M4, 64 KB RAM), replacing the XM125's ready-made I2C firmware.
Recommendation: XM125 for the first 100, bare A121 from 1k.
FCC. Both paths carry "Contains FCC ID: 2AQ6KA1201". Because the grant is limited, the host maker must follow Acconeer's integration instructions, run "a limited set of transmitter module verification testing, including radiated spurious emissions", test the host under Part 15B / SDoC, and evaluate co-location with LoRa (firmware can avoid simultaneous transmission).
LoRa.
| Option | Unit cost | Certification |
|---|---|---|
| RAK3172 | $5.99 at RAK (plus US import), $6.97 at Rokland | modular: host only |
| Bare STM32WLE5JC + 32 MHz TCXO + RF match | chip $15.55 at LCSC today (out of stock); ~$5-6 at 10k (est) + ~$1 of other parts | own Part 15.247 / RSS-247, ~$8-15k |
Cell and pulse support (Exp 7 draws ~1 Ah/yr, so any 17-19 Ah D cell is enough):
| Option | Price found | Note |
|---|---|---|
| EVE ER34615 (19 Ah) | €6.95 @120; ~$6 @1k MOQ (Alibaba) | cheapest credible; major maker |
| Fanso ER34615 | no public price | quote only; expect about EVE's price |
| Tadiran TL-5930/S (19 Ah) | $15.15 @500 (Master Electronics) | the reference cell; +$9 |
| Tadiran SL-2780 (19 Ah) | ~€17 (10-pack) | Tadiran's industrial line |
| Saft LS33600 (17 Ah) | $37.95 @100 (DigiKey marketplace); €16.6-19 (TME, a variant) | +$11-30 |
| Tadiran PulsesPlus TLP-93111 (cell + HLC) | $33.85 @400 | some variants discontinued (RS); HLC-1550A £25.72, sold only with Tadiran cells |
| EVE ER34615 + SPC1520 (ES341520) | quote only | EVE's cell + hybrid-capacitor pack |
| Low-ESR EDLC, 2.5 F / 5.4 V | €2.99 @1k | in the BOM: a 120 mA × 0.4 s burst drops it ~20 mV |
Avoid coin-type 0.47 F supercaps: their ESR is tens of ohms, useless for 120 mA pulses.
Mechanical. Hammond 1555 (IP68 PC, gasketed) fits a D cell and the board; fallbacks Takachi WP11-15 (~A$33) and Polycase WP-23 ($12.77 @250, IP65 only). Polycase pole kits ($28-37) cost more than our saddle + bands. Hose clamps (~$2) save ~$6 at 1k but come off with a screwdriver.
Uncertain: check before buying
- Certification cost. Published Part 15B figures: $800-5,500 (vendor guides). Our $6-18k adds 60 GHz radiated-spurious verification (few labs; up to 200 GHz), LoRa host checks, ISED. Get two lab quotes. At 100 units it is $60-180 per unit.
- Does the limited grant cover our own A121 layout? Ask Acconeer and a TCB. The XM125 carries the same "limited" condition.
- Box wall. If the Hammond wall is 3.0 ± 0.1 mm PC (second half-wave), the radar can look through it with no separate window. 2.25 mm is the worst case.
- XM125 supply. DigiKey: 0 in stock, 16-week lead time. A121: 10,698 in stock.
- Tariffs. RAK's store price excludes ~25 % US import duty; the boards and cells are also Chinese. Only the 10 % contingency covers this.
- Voltage. A fresh Li-SOCl2 cell (3.67 V) is just above the RAK3172's 3.6 V rating (STM32WL absolute max 3.9 V): common practice, but confirm. The XM125 (VIN max 3.45 V) must run from the 1.8 V rail, never straight from the cell.
- "est" prices at 10k (tooling, bands, saddle, cell) are judgement, not quotes.
Sources
- A121 at DigiKey: https://www.digikey.com/en/products/detail/acconeer-ab/A121-001-T-R/17883300
- XM125 at DigiKey: https://www.digikey.com/en/products/detail/acconeer-ab/XM125/17883267
- A121 datasheet v1.3 (§6.2 crystal, Table 13, §8.2 FCC): https://docs.sparkfun.com/SparkFun_Qwiic_Pulsed_Radar_Sensor_XM125/assets/component_documentation/A121%20datasheet.pdf
- XM125 datasheet v1.2 (§7.2 FCC): https://docs.sparkfun.com/SparkFun_Qwiic_Pulsed_Radar_Sensor_XM125/assets/component_documentation/XM125_datasheet-3133248.pdf
- Acconeer A121 electrical integration: https://docs.acconeer.com/en/latest/hw_integration/a121/electrical_integration.html
- RAK3172, RAK store: https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172
- RAK3172, Rokland: https://store.rokland.com/products/rak-wireless-rak3172-evaluation-board-us915-sku-316045
- STM32WLE5JC at LCSC: https://www.lcsc.com/product-image/C2971285.html
- LIS2DH12 at LCSC: https://lcsc.com/product-detail/accelerometers_stmicroelectronics-lis2dh12tr_C110926.html
- TPS62840 at LCSC: https://lcsc.com/product-detail/DC-DC-Converters_Texas-Instruments-TPS62840DLCR_C2071859.html
- Johanson 0915AT43A0026: https://www.digikey.com.mx/en/products/detail/johanson-technology-inc/0915AT43A0026001E/2392134
- JLCPCB assembly fees: https://jlcpcb.com/help/article/pcb-assembly-price
- JLCPCB 4-layer price per m²: https://jlcpcb.com/blog/special-discount-on-quality-4-layers-pcbs
- EVE ER34615 at nkon: https://www.nkon.nl/en/eve-er34615-d-formaat-lithium-batterij-3-6v.html
- ER34615 on Alibaba: https://www.alibaba.com/product-detail/3-6V-Lithium-D-Cell-Prices_1600669359651.html
- Tadiran TL-5930/S at Master Electronics: https://masterelectronics.com/en/tadiran-batteries/tl5930s-45573065.html
- Tadiran SL-2780 at 123accu: https://www.123accu.nl/Tadiran-Aanbieding-10-x-Tadiran-SL-2780-SL-780-D-batterij-3-6V-19000-mAh-Li-SOCl2-i49287.html
- Saft LS33600, prices: https://www.findchips.com/search/LS336 and https://ie.rs-online.com/web/p/d-batteries/2019466
- Tadiran PulsesPlus TLP-93111: https://www.onlinecomponents.com/en/tadiran-batteries/tlp93111asm-56151968.html and RS status: https://uk.rs-online.com/web/p/speciality-size-batteries/1946717
- Tadiran HLC-1550A at RS: https://uk.rs-online.com/web/p/speciality-size-batteries/0559961
- EVE SPC packs (Endrich): https://www.endrich.com/en/product-categories/accus-batteries/lithium-ion-cells/super-pulse-cap
- Eaton PHV-5R4V255-R: https://www.digikey.ie/en/products/detail/eaton-electronics-division/PHV-5R4V255-R/3878055
- Hammond 1555F2GY, prices: https://findchips.com/search/1555F2GY
- Takachi WP11-15-4C: https://au.element14.com/takachi/wp11-15-4c/outdoor-waterproof-enclosure-abs/dp/2472097
- Polycase WP-23: https://www.polycase.com/wp-23
- Gore VE80205 vent at RS: https://uk.rs-online.com/web/p/enclosure-ventilation/2879532
- BAND-IT 3/4" clamps at Zoro: https://www.zoro.com/band-it-band-clamp-34w-slotted-lock-pk25-ul2139/i/G808229693/
- FCC certification costs (vendor guides): https://markready.pages.dev/guides/fcc-certification-cost and https://markready.pages.dev/learn/fcc-certification-cost
Report: parts for a meter-pole radar ("Provolone")
Research agent, 2026-11-07, from datasheets and vendor/municipal documents. (unverified) marks secondary sources or inferences.
Radar: Acconeer A121 / XM125
| Parameter | Value | Source |
|---|---|---|
| Frequency / EIRP | 57-64 GHz, 11 dBm | A121 datasheet |
| Beam (HPBW, simulated) | 65° H-plane, 53° E-plane | A121 DS Table 8 |
| Range resolution | 43 mm (profile 1) to 346 mm (profile 5) | A121 DS Table 10 |
| Current while sweeping | ~74 mA at 1.8 V (only during the sweep); hibernate 11 µA; off ~0.4 µA | A121 DS Table 7 |
| XM125 average power (distance detector, 2.75 m) | 0.04 mW at 0.1 Hz (~22 µA), 0.33 mW at 1 Hz (~183 µA); module idle 17.7 µA hibernate / 6.9 µA off | XM125 DS Table 4 |
| Acconeer parking app | "Ground" preset 0.075 mA; "Pole" preset 1.075 mA; recommends ~20° down-tilt on poles; signature-based, rejects passers-by | Parking app docs |
| Supply / temperature | 1.8 V core; -40…+85 °C | XM125 DS |
| Module | 18.6 × 15 mm LGA with an STM32L431; ~$22 (DigiKey); SparkFun Qwiic board $49.95 | |
| I2C (distance-detector firmware) | address 0x52; 16-bit registers, 32-bit values; 0x10 result, 0x11-0x1A peak distances (mm), 0x1B-0x24 strengths, 0x40-0x4C config (start 250 mm, end 3000 mm, profile, threshold), 0x100 command (1 = apply config + calibrate, 2 = measure) | SparkFun library |
| Radome | thickness m·λ/2 in the material: polycarbonate ~1.5 mm or 3.0 mm (avoid 2.25 mm); ~2.5-3.5 mm from the PCB | Acconeer radome guide |
| FCC | A121 has a limited single-modular approval (FCC ID 2AQ6KA1201, §15.255 field-disturbance sensor); host needs the label, its own Part 15B test and co-location checks with LoRa | A121 DS §8.2 |
Existing meter / pole sensors
| Vendor | Sensing | Accuracy / issues |
|---|---|---|
| IPS "dome" (on the meter) | stereoscopic + magnetometer | "up to 99 %"†; Burlington VT pole pilot: $250 + $65/month for 18 units, delayed by technical problems |
| CivicSmart (Milwaukee) | radar under the meter | $245; "> 99 %"†, results not published |
| Duncan patent US10043337 | RF sensor in the meter cap, aimable | the patent says the metal collar "might result in vehicle detection errors"; aim must be set per space; adjacent spaces must be excluded |
| Boston Seaport 2017 (591 meters) | meter-mounted (vendor not named) | "many problems with the data's accuracy", "significant staff time to calibrate"; no technical cause given: calibration and ground-truth labour |
Cambridge meters and poles
- Coin + PayByPhone/Passport meters, no card readers, no modems (City): Provolone can't piggyback on meter connectivity.
- Model, single vs twin heads, post position: not found; needs a Bow Street site survey.
- Regional standard (Boston detail A102): 2" Schedule 40 pipe (60.3 mm OD), 0.61 m from the curb face. A band at 0.6-0.85 m fits on the bare post below the head; the car's side is then ~0.7-1.2 m away.
Battery
| Cell | Capacity | Pulse | Temperature |
|---|---|---|---|
| Saft LS33600 (D, bobbin Li-SOCl2) | 17 Ah (61 Wh) | ~400 mA × 0.1 s at 20 °C; "a capacitor may be recommended" | -60…+85 °C |
| Saft LSP 33600-20F | same + 20 F Li-ion capacitor | 1 A for 3 s | -20…+70 °C |
RAK3172: 87 mA at 20 dBm (datasheet), users measure 115-148 mA at 20-22 dBm; 22 dBm needs ≥ 3.3 V. Use a pulse capacitor and 20 dBm max. Budget: radar at 1 Hz ≈ 3.4 Wh/yr + ~60 uplinks/day ≈ 1 Wh/yr → well over 5 years on one D-cell (~40 usable Wh).
Mounting
Stainless band clamps (BAND-IT, removable only by cutting: the street-furniture norm), Polycase pole-mount kits ($28-37), pin-in Torx screws (~$0.20-0.40 each), IP67 polycarbonate enclosure, tilt/accelerometer tamper alarm.
Recommendations
- v0: XM125 with Acconeer's I2C distance-detector firmware; range gate ~0.4-2.0 m; profile 3-4; poll at 0.2-1 Hz with the parking app's stationarity logic on the host; aim into the stall (~20° down, 20-40° yaw per the agent; our Exp 3 says 50-65°); 1.5 or 3.0 mm PC window; LS33600 + pulse capacitor; log raw distance and strength.
- v1: site survey first (meter model, heads, post position, OD); IP67 enclosure on a stainless band; tamper alarm; FCC label + Part 15B test; city license.
- Avoid Boston's failure mode: automatic per-pole calibration (learn the empty space), a stored pole-to-space map, and a 2-4 week video ground-truth check with published accuracy.
Report: the radar in rain, snow, salt and dirt
Research agent, 2026-11-07. Window losses are our own normal-incidence multilayer calculation at 60 GHz (1.5 mm polycarbonate window + one layer; water from the Liebe 1991 model at 0 °C; snow, slush, mud and leaves by a mixing rule, ±30 %). Check: it gives ~20 dB per mm of water, vs 18 dB/mm measured at 24 GHz (Suzuki 1979). † vendor claim.
Rule of thumb: range scales with loss^-1/4, so every 12 dB of two-way loss halves the range. Our real margin needs Exp 4; working guess: <6 dB harmless, 10-20 dB marginal on the pole, >25 dB blind.
1. What blinds the sensor
On the window (two-way loss, plus how much power the layer reflects straight back):
| Layer on a 1.5 mm PC window | Two-way loss | Reflected | Verdict |
|---|---|---|---|
| Clean window | 0.4 dB | ~0 % | — |
| Water film 0.05 mm (mist, condensation) | 6 dB | 10 % | noticeable |
| Water 0.1 / 0.2 mm | 10 / 16 dB | 22 / 39 % | marginal |
| Water 0.5 / 1 / 2 mm | 27 / 47 / 87 dB | ~40 % | blind |
| Salt brine | same as water ±1 dB | same | blind at ≥0.5 mm (salt barely matters at 60 GHz) |
| Ice 1-10 mm | 1-3 dB | ≤25 % | minor (low-loss; detunes the window). Melting ice = water |
| Dry snow 1-10 cm | 0.5-2 dB + scattering | ~0 | minor; Acconeer: "snow and ice are transparent". Scattering grows with grain size (Hallikainen 1987) |
| Wet snow, 2-5 % liquid water, 1 cm / 3 cm | 7-16 dB / 18-45 dB | 3 % | blind at a few cm |
| Slush (~55 % water), 2 mm | 44 dB | 22 % | blind |
| Wet mud 0.5 / 1 / 2 mm | 14 / 21 / 38 dB | 20-37 % | blind at ≥1 mm |
| Dry dust 0.5-2 mm | 3-6 dB | ~15 % | minor |
| Fresh or wet leaf (0.25 mm); wet leaf plus a 0.2 mm film | 12 dB; 22 dB | 30 % | marginal → blind |
| Dry leaf | ~2 dB | 3 % | minor |
In the air, over the full 6 m round trip of a 3 m gate:
| Condition | Specific attenuation | Over 6 m |
|---|---|---|
| Rain 25 / 100 mm/h | 9.5 / 27 dB/km (ITU-R P.838-3) | 0.06 / 0.16 dB |
| Oxygen (the 60 GHz absorption line) | 15 dB/km (ITU-R P.676) | 0.09 dB |
| Heavy fog, 0.5 g/m³ | 1.2 dB/km (ITU-R P.840) | <0.01 dB |
| Snowfall, 5-10 mm/h water equivalent | 0.8-2.3 dB/km (Gunn-East model) | <0.02 dB |
| Rain backscatter, 25 mm/h, 10 cm range cell at 2 m | about -25 dBsm (calc, Rayleigh upper bound) | far below a pedestrian (about -5 to 0 dBsm) and a car |
Bottom line: the air is negligible; the window is everything. Liquid water blinds (a 0.3-0.5 mm film, wet snow, slush, brine, wet mud); ice, dry snow, dust and dry leaves don't. A blinding layer also reflects 20-40 % of the power straight back: an easy signature to spot.
2. Window (radome) design
| Item | Number | Source |
|---|---|---|
| Thickness | m·λ/2 in the material. Two-way loss at its worst point across 57-64 GHz: PC 1.49 mm: 0.5 dB (±0.1 mm: ≤0.9 dB); PC 3.0 mm: 1.2 dB; PC 2.25 mm (3λ/4): 2.6 dB and 21 % reflected. Avoid | Acconeer; calc |
| Other materials | PMMA 1.55 mm; ABS ~1.52 mm (εr varies 2.0-3.5 by grade, so measure it); PP 1.69 mm (lowest loss) | Acconeer εr table; TI loss tangents (PC 0.012, PMMA 0.009, PE 0.0003) |
| Distance from the board | 2.5 mm (Acconeer summary) to 3.0-3.5 mm (≈λ0/2, least ripple) from the PCB ground plane. TI: n·λ0/2 | Acconeer; TI SWRA705 |
| Shape | flat is fine. A curved radome (R 20-50 mm) lowers sidelobes and sheds water | Acconeer |
| Don'ts | metallic paint, potting over the antenna, bubbles or uneven walls. A ~1 µm protective coating is fine | TI |
| Water | "design the product so water runs off and doesn't pool" | Acconeer developer |
| Hydrophobic coating | A superhydrophobic spray (contact angle 165°) cut wet-radome loss from 3.7-5.2 dB to 0.05-0.28 dB at 24-40 GHz (5G bands n257-n261). But outdoors it stayed superhydrophobic only ~40 days; after 670 days drops needed a 30° slope to slide | Wei 2023 |
A coating helps a tilted pole window (drops roll off), not a horizontal in-road one (drops sit; tyres and plows abrade it). Treat it as a consumable.
3. How commercial radar + magnetometer sensors cope
- Acconeer: its parking app has optional obstruction detection (watches 3-5 cm out, inside the direct leakage, for change from a clean calibration; recalibrate after 20 °C). Its developer guide says switch to the magnetometer when rainwater covers the device and flag it for cleaning.
- Bosch (patent US10656299): the magnetometer decides; radar only when its data aren't "clear enough" (SNR). IR and ultrasound fail under snow or dirt. No covered-radar logic disclosed.
- Option SPS200 (60 GHz pulsed radar, 30-600 mm): "radar and magnetic detection enable operation under … sensor obstruction e.g. leaves, snow"†; no detail.
- Libelium: radar "not affected by dirt, dust, rain"†. Section 1 says otherwise above ~0.2 mm.
- Fleximodo: 99.96 %†; nothing published on covered sensors.
- Winter accuracy: no independent figure found. Q-Free's 5-month Nova Scotia winter pilot ">98 %"† (method not stated); NYC's 2012 Bronx winter pilot never published results.
Pattern: magnetometer always on, radar confirms; when the radar can't see, the magnetometer decides. Nobody publishes an "unknown" state.
4. Risks specific to the pole (Provolone)
| Risk | What the A121 sees | Handling |
|---|---|---|
| Pedestrian or cyclist | weak (~-5 to 0 dBsm), moving, seconds | parking app: 60 % of 5 queued signatures must agree; pole preset polls faster to ride through passers-by |
| Person leaning on post or box | a strong return at 0-0.3 m; the body hides everything behind | NEAR START EDGE or peaks <0.3 m → "occluded, hold" |
| Plow windrow between curb and car | fresh snow see-through; plowed snow is dense and wet → wide static near return, car hidden | mount at 1.2 m (Exp 3); a return nearer than the learned car distance lasting hours = "blocked by snow" |
| Snow piled in an empty space | a static return at car distance that grows slowly | count only fast transitions (<~30 s) as arrivals |
| Rain, road spray, slush thrown by plows | air: nil. Window: a 2 mm slush splash costs 44 dB | rain hood, tilt, height, blocked detection |
| Curb and ground multipath | static returns from the curb face and pavement; ghost peaks just beyond the car | learn the empty-space background. Only presence matters, not exact range. Tilt ~20° down (Acconeer) |
Detector settings (Acconeer docs; I2C register map): CFAR threshold (default, 0x46) adapts per sweep but is one-sided near the start; RECORDED learns static clutter but must be re-recorded when the scene changes (e.g. a snowbank). Close-range leakage cancellation (0x43) is on by default in the I2C firmware, yet only applies when the range starts below ~20 cm and holds for ±15 °C; without it CFAR reaches ~6-7 cm. Reflector shape 0x4B: GENERIC (PLANAR is for liquids). All 10 peaks are returned regardless of sorting; register 0x10 carries NEAR START EDGE, CALIBRATION NEEDED and a relative temperature.
5. Recommendations
Hardware
- 1.5 mm UV-stabilised PC window (±0.1 mm), 2.5-3.5 mm from the PCB; never ~2.25 mm. (Acconeer; calc)
- Pole: tilt ~20° down under a short rain hood, plus a superhydrophobic coating renewed yearly. (Acconeer; Wei 2023)
- Pole height 1.2 m, not 0.85 m: above snowbanks and most spray. (Exp 3; slush row)
- Vent membrane + desiccant: 0.05 mm of condensation inside costs ~6 dB. (calc)
- In-road: expect the radar blind whenever water stands on the sheet (≥0.3 mm); the magnetometer must decide then. (calc; Acconeer; Bosch)
Firmware
- Detect "blocked": (a) custom XM125 firmware: Acconeer's obstruction detection; (b) stock I2C firmware: a second config starting ~60-70 mm (CFAR, leakage cancellation off) where
NEAR START EDGEor a strong peak <0.2 m = covered; (c) background canary: if the empty scene's learned static peaks (curb, pavement) all drop >10 dB at once with no new peak, the window is blind. (Acconeer parking app; I2C guide; TI "RF visibility obscured" diagnostics) - Fallback: in-road, blocked → the magnetometer decides and the uplink says "radar blind" (reuse the "radar decided" flag). Pole, blocked → report unknown and hold the last state, never "free". Blocked >6 h → maintenance alert. (Acconeer developer; TI)
- Car config:
0x43 = 0(gate starts ≥0.25 m anyway), CFAR, sensitivity 500, GENERIC, max profile 3-4; read all 10 peaks; keep the empty-scene background on our MCU. (Acconeer; I2C guide) - Recalibrate on
CALIBRATION NEEDEDor a >15 °C change, only when the scene looks clean and empty (magnetometer quiet, canary normal), or snow gets baked into the baseline. (Distance-detector docs) - Change occupancy only on fast, stable changes (a car-distance peak appearing within ~30 s, held ≥3 readings). Slow growth = snow → unknown; near moving peaks = people → hold. (Parking-app logic, adapted)
- Exp 4 add-on: weighed spray-bottle films to measure our real dB margin against this table; log background-peak strength daily against weather.
Sources
- Acconeer, Radome and mechanical design (A121): https://docs.acconeer.com/en/latest/hw_integration/a121/radome_and_mechanical_design.html
- Acconeer, Distance detector: https://docs.acconeer.com/en/latest/detectors/a121/distance_detector.html
- Acconeer, Parking reference app (obstruction detection, presets): https://docs.acconeer.com/en/latest/applications/a121/parking.html
- Acconeer Developer, Parking space occupancy (water, snow, obstruction, magnetometer fallback): https://developer.acconeer.com/?p=21587
- Acconeer, I2C Distance Detector User Guide (register map): https://docs.sparkfun.com/SparkFun_Qwiic_Pulsed_Radar_Sensor_XM125/assets/component_documentation/I2C%20Distance%20Detector%20User%20Guide.pdf
- Acconeer, Distance detector FAQ (CFAR ~6-7 cm without leakage cancellation): https://support.acconeer.com/support/solutions/articles/25000034271-a121-distance-detector-faq
- Texas Instruments SWRA705, mmWave Radar Radome Design Guide: https://www.ti.com/lit/swra705
- Wei et al. 2023, Durable superhydrophobic coatings for prevention of rain attenuation of 5G/weather radomes (Nature Communications): https://pmc.ncbi.nlm.nih.gov/articles/PMC10198997/
- Suzuki et al. 1979, Countermeasures against snow accretion and icing on radomes (24 GHz, 18 dB/mm): https://trid.trb.org/View/86433
- Sato et al. 2024, Wet snow accretion on a 79 GHz radar (JSAE): https://tech.jsae.or.jp/paperinfo/en/content/jt202405.27/
- Hallikainen et al. 1987, Extinction behavior of dry snow in the 18-90 GHz range: https://doi.org/10.1109/TGRS.1987.289743
- Liebe, Hufford, Manabe 1991, Permittivity of water below 1 THz: https://doi.org/10.1007/BF01008897
- ITU-R P.838-3 (rain): https://www.itu.int/rec/R-REC-P.838-3-200503-I/en ; P.676 (gases): https://www.itu.int/rec/R-REC-P.676/en ; P.840 (fog): https://www.itu.int/rec/R-REC-P.840/en ; computed with the
iturpackage: https://itu-rpy.readthedocs.io/ - Gunn-East snowfall model (MathWorks
snowpl): https://www.mathworks.com/help/radar/ref/snowpl.html - Bosch patent US10656299B2: https://patents.google.com/patent/US10656299B2/en
- Option SPS200 datasheet: https://www.option.com/wp-content/uploads/2024/11/Option-ParkingSensor-SPS200.pdf
- Libelium radar parking (eeNews, 2019): https://www.eenewseurope.com/en/smart-radar-parking/
- Fleximodo, How do parking sensors work: https://www.parking.net/parking-news/fleximodo/how-do-parking-sensors-work
- Q-Free ParQSense winter pilot: https://www.parking.net/parking-news/q-free-asa/announces-successful-parqsense-pilot
- NYC Bronx sensor pilot (2012): https://www.govtech.com/transportation/new-york-city-testing-parking-sensors.html
- Pedestrian RCS at 77 GHz (Polarimetric RCS of pedestrians): https://arxiv.org/pdf/1910.13706
Report: every way to detect a parked car
Research agent, 2026-11-07, from datasheets, papers and city reports. † vendor claim, not independently tested. ‡ estimate or not confirmed in the primary document. "SFpark 2014" figures via Table V of arXiv 1902.07401.
| Method | Accuracy in parking use | Avg power at ~3 s | Unit cost @1k | Mounting | Weather risk | Notes |
|---|---|---|---|---|---|---|
| Magnetometer, single | 81 % (StreetSmart, SFpark 2014); 86 % SFpark (Roman et al.); F1 0.93 over 13 months outdoors (Huang, PerCom'17); 99 % in a campus lot (Dartmouth); 98 % Urbiotica† | ~2-10 µA‡ | sensor ~$1; finished pucks $245-299 | in-road / surface | very low; works under snow | a parked car changed the field ~27-37 µT in one AMR study (KSC); failure modes: cars next door, rail/power-line interference, high-clearance vans, aluminium EVs, drift |
| Magnetometer gradiometer (Glee) | no published parking figure | same | ~2× sensor | same | very low | Huang used two magnetometers 95.5 mm apart to tell arrivals from departures |
| 60 GHz pulsed coherent radar (Acconeer A121) | radar-only Sensys MicroRadar 98 % (SFpark 2014) | 0.2 mW at 0.1 Hz, 0.23 mW at 1 Hz → ~30-60 µA at 3 s‡; < 1 µA if it only wakes on a magnetometer change‡ | A121 ~$9-13 (DigiKey) | in-road (up), curb, pole | water film / snow on the window: 2-4 dB per 0.5 mm water, 5-20 dB snow/ice (77 GHz figures) | measures distance to stationary objects (30-600 mm in Option SPS200); chip ~5×5 mm: fits a thin sheet |
| 60 GHz Doppler (Infineon BGT60LTR11) | not suitable alone | 2.3 mW min | ~$5-10‡ | any | as above | motion only: can't see a car that's already parked |
| 24 / 77 GHz radar | mag+radar Fybr 78 % (SFpark 2014) | mA-level‡ | $10-30‡ | pole / overhead | as above | overkill for one space |
| Optical ToF (VL53L1X) | IR (CPT) 92 % (SFpark 2014) | ~25 µA at 3 s‡ | $2.5-2.9 | in-road / curb | high: dirt, snow, leaves, sunlight | Urbiotica: a dirty IR sensor reports "occupied" |
| Passive light (shadow) | low alone; light + mag + RSSI fusion F1 0.98 (Huang) | ~1 µA | < $1 | in-road | clouds/trees | good wake-up trigger |
| Ultrasonic | up to 99.9 %†, mostly indoor | mA per ping‡ | $20-100 | overhead / curb | wind, rain, snow, temperature | garages |
| Camera (pole / overhead) | Parquery 99 %†; Cysen 77 % (SFpark); Bellevue best vendor ~83 % | watts | ~$32 per space (MIT est.) | light pole / building | night, glare, snow, occlusion by trucks | Cambridge Surveillance Ordinance; Flock cameras shut off in 2025 |
| Inductive loop / piezo | high for moving traffic | mains | ~$350 per loop (1980s $) | saw-cut | pavement damage | not practical per space |
| RF RSSI (LoRa/BLE) | LoRa RSSI 96 % (HMM) / 97 % (NN) (Dujić Rodić); Libelium mag + RSSI 99 %† | ~0 extra | $0 | any | rain, people, multipath | separates own car from neighbours only when baseline RSSI > -90 dBm (Huang) |
| Wi-Fi sensing / acoustic | research stage, not per space | not pursued |
Commercial products
| Product | Uses | Accuracy / price |
|---|---|---|
| Bosch Parking Lot Sensor | magnetometer + radar | 96 %†; 5 yr† (integrator expects 2-3) |
| Libelium | mag → mag + cloud RSSI (2018) → mag + radar (2019) | 99 %†; radar added against interference, neighbours, double-parked cars |
| Option Spot-On | SPS100 → SPS200 adds 60 GHz pulsed coherent radar | 10 yr on 8100 mAh at ≤ 50 events/day† |
| Fleximodo | mag + radar | ~95 % mag-only vs 99.96 % mag + radar† |
| Nedap SENSIT | IR + mag | "close to 100 %"† |
| Urbiotica | dropped mag + IR for mag-only | 98 %†; IR fails when dirty |
| PNI PlacePod | RM3100 magnetometer | $290-299 retail |
| Sensys | magnetometer, MicroRadar variant | MicroRadar 98 % (SFpark) |
| Fybr | mag + radar | 78 % (SFpark) |
| Cleverciti | overhead optical | up to 100 spaces per unit; Redwood City $904k + ~$18k/month |
| IPS (meter / pole mount) | stereoscopic + magnetometer | Santa Ana: $250/sensor + $45 install + $3.50/space/month |
| KKM LAS7 | geomagnetic + microwave radar | no datasheet found |
City prices: NYC $250 per sensor (2 per space); Milwaukee $245; Burlington VT $250.
Takeaways
- The industry moved from magnetometer-only to magnetometer + radar (Bosch, Libelium, Option, Fleximodo, KKM): the magnetometer watches at µA, the radar fires only on a change to confirm. Urbiotica is the exception (mag-only, 98 %†).
- Independent long-term data puts magnetometer-only at ~81-93 %, not 98-99 %. Glee's target should be a ground-truthed, multi-month measurement on Bow Street.
- Best upgrade for cheese: a 60 GHz pulsed coherent radar (A121, ~$10, ~5×5 mm) that only confirms magnetometer events (< 1 µA extra). Avoid Doppler-only parts. Risk: slush/water on the window (hydrophobic window; ignore returns closer than ~5 cm).
- RF attenuation is free: every TTN uplink carries RSSI/SNR; LoRa RSSI alone reached 96-97 %. Log it now (works best when baseline RSSI > -90 dBm).
- ToF/IR get dirty in the road; better on a curb or pole. Cameras: cheapest per space but a poor fit for Cambridge (ordinance, power, 77-83 % in curb pilots).
- Not every space may need a sensor: DDOT found ~50 % sensor coverage fused with meter-payment data still predicted block-level occupancy (DDOT).
Report: can a stuck-on sheet stay in over winter?
Research agent, 2026-11-07. Tests H8's "remove every winter" assumption. [estimate] marks our own judgment, not a published figure.
Short answer
Not "always remove", but "remove unless the sheet is built like a snowplowable marker and sits on the even side". No one publishes winter loss rates for glued-on street parking sensors, and every snowy-city deployment we found is in-ground. The analogues (road markers, rubber speed humps, marking tape) show that height, edge angle, hardness and anchoring decide survival, plus whether a steel blade ever reaches that pavement. Today's 7 mm polymer sheet on butyl has a casting's height with tape's strength: the worst mix. A lower, ramped sheet in a space the plow rarely scrapes could plausibly stay in, losing perhaps 5-25 % per winter [estimate].
1. Surface-mounted parking sensors in snow
| Vendor / source | What it says |
|---|---|
| Urbiotica | Surface "not ideal … where snow plows are used regularly"; Burlington (Ontario) went buried: "a surface one would be damaged" |
| Nedap SENSIT | Surface mount is for indoor/rooftop parks; only the flush mount is snowplough resistant |
| Bosch PLS | Glued (2K epoxy/PU), 30.5 mm tall, "resistant to … snowplough", but footnote: plow ≤ 5.5 t, flexible rubber flap, ≤ 20 km/h: a parking-lot plow, not a city steel blade |
| Fleximodo | Photo of a sensor "seriously damaged by careless snow-plough drivers"; brief the drivers |
| Libelium | Bury it "to allow for snowplow operation in winter" |
| Hansab ParkSol | Claims plowing is fine (no data) |
| Moscow (1,000 Nedap), Montreal, Glens Falls, Trondheim | All in-ground |
| NYC Bronx, Burlington VT pilots | Promised winter tests; no results published |
Bottom line: no published plow-loss rate for surface parking sensors; the one plow-rated surface product is rated only against light rubber-edged plows.
2. What survives plows: markers, markings, humps
| Object | Height | Result |
|---|---|---|
| Snowplowable marker casting (Stimsonite 96 / 96LP / 101) | 10.4 mm / 6.4 mm | Hardened nodular iron (51-55 RC), ramps 6° / 4° (a later patent uses 3.5°), keels epoxied into saw cuts. Texas caps height at 25 mm |
| Same, in service | – | NJ: ≤ 9.5 % of reflectors replaced in year 1, no castings lost. Illinois: > 40 % of lenses gone in 2 yr. Kentucky: 11 % missing on old pavement, 30 % on poor asphalt. NCDOT banned metal castings (2021): loose ones become projectiles |
| Ordinary raised markers | 10-20 mm | Not used where plows run; some states dropped raised markers entirely |
| Recessed marker in a groove | groove 9.4 mm deep (25 mm at lens) | Kentucky: < 1 % of 1,850 lenses lost after one light winter |
| Surface thermoplastic | ~3.2 mm | Survives but chips; plow damage is "the single most deleterious factor" (Vermont) |
| Markings, surface vs grooved | 2-4 mm | Indiana: grooved tape > 10 winters, grooved thermoplastic ~5, paint 1-2. Virginia moved waffle tape to inlay after plow damage |
| Bolted rubber speed cushions | ~50-75 mm | Philadelphia: ~140 (≈10 %) damaged in one winter (blade "pulls from the lip … shears the bolt"). Edmonton: "most" damaged; Hamilton quit; Mansfield, Worcester remove them each winter |
Lessons: a blade catches a lip, so survivors ramp ≤ 6° all round; even 6-10 mm needs hardened metal keyed into the pavement; 2-4 mm fused material survives but wears; a shallow groove protects what can't be made strong.
3. How Cambridge (and Boston) actually plow
- DPW plows arteries during storms and "clears all streets … once a storm has ended"; it may "widen streets" but can't haul from every street.
- Without a ban, cars stay put; DPW warns plows will "push snow back … onto your parked car". The blade runs at the lane edge and reaches bare parking-lane pavement only at empty spaces or during later widening.
- Snow Emergency streets (Bow St odd side): cars towed, plows to the curb. Worst case.
- "Objects left in on-street parking spaces may be removed" (space-saver rule).
- Sweeping: monthly mechanical brooms April-December, none January-March. Brine on thoroughfares.
- Boston: main roads first; side streets largely dug out by residents; in big winters legally parked cars were moved to haul snow.
- No Cambridge rule found specifically on devices fixed to the road; DPW/TPT consent still needed.
Implication: on the even side the sheet spends most plow events under a parked car or a windrow. The risk is an empty space at the first pass or during widening, plus shovels and ice chippers.
4. Adhesives in cold, salt and freeze-thaw
| Adhesive | Min. install temp | Notes |
|---|---|---|
| Butyl pad (H.B. Fuller ST-3001) | -7 °C | "often outlasts the marker" |
| Butyl pad (Uline / Pexco) | pavement 21 °C or torch-warm; prime below 10 °C | up to 2 h to adhere |
| Hot-melt bitumen (TxDOT DMS-6130) | 4 °C | polymer-modified "flexible" type exists |
| 2-part epoxy | 10 °C typical (E-Bond 4 °C) | ~13 h set at 10 °C |
| Marking tape (ASTM D4592) | 10 °C | – |
| Bosch PLS 2K PU | per maker | > 12 h cure; pressure-wash and flame-dry first |
Nevada DOT dropped cold-applied adhesives as unreliable. Freeze-thaw failure starts at the edge: water under a lifted edge freezes, wedges it open, and gives the blade a lip. Practical: dry pavement measured ≥ 10 °C, torch-warm, roll hard, seal the perimeter: the next few sunny November afternoons. December-March is outside almost every spec.
5. When could a sheet stay in?
| Condition | Target | Why |
|---|---|---|
| Side | even only | No tow, no curb-to-curb blading |
| Height | ≤ 6 mm, ideally ≤ 5 | Matches the low-profile casting (6.4 mm) |
| Edge | ramp ≤ 6°, ideally ≤ 4°, all round | 6 mm needs an 86 mm ramp at 4° (57 mm at 6°); or dome the whole sheet |
| Skin | hard, slick top (UHMW or thin steel), no lip | Blade rides over, doesn't bite |
| Bond | full-area butyl/bitumen, sealed edge, ≥ 10 °C | Stops ice-jacking |
| Placement | mid-space, away from the lane edge | Under cars and windrow |
| Best (needs permit) | flush in a 5-7 mm milled pocket | Like recessed markers (< 1 %); a DPW street opening |
Loss per winter (gone or lifted) [estimate], anchored on ~10 %/yr casting and speed-cushion losses:
| Design / location | Loss per winter |
|---|---|
| 7 mm, square edge, odd (tow-route) side | 50-90 % |
| 7 mm, square edge, even side | 20-50 % |
| ≤ 6 mm, ≤ 6° ramp, sealed, even side | 5-25 % |
| Flush in a milled pocket | < 5 % |
A dislodged sheet is also debris/liability.
6. A cheap winter field test (2-3 dummies, even side)
Install at pavement ≥ 10 °C with TPT/DPW told (ask them to brief the plow contractor). Dummies match real footprint, weight and adhesive; vary the edge: square, 6° ramp, 4° ramp/dome. Paint reference marks beside each. After each plowable storm (log date, snowfall) and monthly, record:
- Present / moved / gone (fixed-spot photo, offset from paint marks).
- Edge lift: feeler gauge at 8 points, % of perimeter debonded.
- Blade evidence: scrapes, gouges, chipped ramp.
- Ice under the edge on freeze-thaw mornings.
- Space occupied during plowing? One dummy with an accelerometer on the LoRa link logs strikes and heartbeats.
- Install pavement temperature; adhesive tack in January.
Honest reading: 0 of 3 lost only bounds loss below ~63 % (95 %). The test finds failure modes; it can't measure a 10 % rate (that needs ~30 sheet-winters). Rule: any loss or > 25 % edge lift on a ramped sheet by March means removal stays policy; clean survival through ≥ 3 plowable storms justifies a 10-20 sheet trial next winter.
Sources
- https://www.parking-mobility.org/news/urbiotica-launches-u-spot-iot-surface/
- https://www.parking.net/parking-news/urbiotica/magnetic-parking-sensors
- https://urbiotica.com/us/?p=87627
- https://manualmachine.com/nedapnv/sensitsm/11369043-users-guide
- https://lora-alliance.org/wp-content/uploads/2019/07/parking-lot-sensor-datasheet.pdf
- https://www.manualslib.com/manual/3028818/Bosch-Pls.html?page=6
- https://spacewell.atlassian.net/wiki/x/kc0H
- https://gospacetech.atlassian.net/wiki/spaces/Doc4cus/pages/418709515/Fleximodo+Disclaimer
- https://itsinternational.com/products/libeliums-surface-mounted-sensor-provides-long-range-solution
- https://www.hansab.com/en/node/1220
- https://www.parking.net/parking-showcases/nedap-identification-systems/moscow-sensit
- https://www.govtech.com/transportation/new-york-city-testing-parking-sensors.html
- https://news.yahoo.com/why-burlington-added-sensors-street-100041956.html
- https://www.parking.net/parking-news/q-free-asa/new-smart-parking-sensor-pilot
- https://patents.google.com/patent/US5257875A/en
- https://cpcsigns.com/stimsonite-model-101-high-profile-snowplow-marker-castings-box-16/
- https://ftp.dot.state.tx.us/pub/txdot-info/cst/DMS/4000_series/archives/4210-0804.pdf
- https://connect.ncdot.gov/projects/research/RNAProjDocs/RP2020-59_Final%20Report.pdf
- https://www.roadsbridges.com/winter-maintenance-time-recessed
- https://rosap.ntl.bts.gov/view/dot/21736/dot_21736_DS1.pdf
- https://trid.trb.org/View/155568
- https://publications.iowa.gov/19741/
- https://resources.vtrans.vermont.gov/documents/archivedresearch/U1988%20-%2005%20%28OCR%29%20Stimsonite%2096%20Snowplowable%20Raised%20Pavement%20Markers.pdf
- https://resources.vtrans.vermont.gov/documents/archivedresearch/2002%20-%2006%20%28OCR%29%20Recessed%20Thermoplastic%20Pavement%20Markings%20Montpelier%20Vermont.pdf
- https://docs.lib.purdue.edu/jtrp/1700
- https://vtrc.virginia.gov/reports/all-reports/96-r3/
- https://www.audacy.com/kywnewsradio/news/local/winter-storms-damage-speed-cushions
- https://engaged.edmonton.ca/ramsay
- https://www.mass.gov/doc/mansfield-speed-bumps-on-highland-ave-draper-ave-and-howe-st/download
- https://www.cambridgema.gov/Snow
- https://www.cambridgema.gov/-/media/Files/publicworksdepartment/Snow/2011dpwsnowbrochureweb.pdf
- https://cambridgema.gov/news/2015/02/cityofcambridgesnowoperationsupdates
- https://cambridgema.gov/Services/StreetCleaning
- https://www.boston.gov/managing-winter-and-snow
- https://www.cbsnews.com/boston/news/drivers-unaware-as-city-moves-legally-parked-cars-to-haul-snow/
- https://hbfullerproducts.com/products/st-3001-standard-butyl-pad
- https://www.manualslib.fr/manual/664974/Uline-H-9872.html
- https://www.pexco.com/wp-content/uploads/2025/09/Pexco-RPM-Halftrack_installationprocedure_2025.pdf
- https://www.corpuschristitx.gov/media/jk2adkx3/025828-ref-txdot-dms-6130-bituminous-adhesive-for-pavement-marker.pdf
- https://www.columbus.gov/files/sharedassets/city/v/1/design-amp-construction/contractor-information/2002-construction-and-material-specifications/621[1].pdf
- https://abilenetx.gov/DocumentCenter/View/3108/810-1-PDF
- https://translineinc.com/wp-content/uploads/2017/11/e-bond_epoxy_data_sheet.pdf
- https://cdn.standards.iteh.ai/samples/83792/e455ea50563546ca8cfaac4e23aeecea/ASTM-D4592-12.pdf
- https://dot.ca.gov/-/media/dot-media/programs/research-innovation-system-information/documents/preliminary-investigations/use-of-cold-applied-adhesive-for-raised-pavement-marker-applications-pi-a11y.pdf