SnapSense is a clip-on badge that answers two questions you cannot currently answer about a room you have just walked into: what here is following me, and what is this place doing to me. Both are answered entirely on the device.
One rule governs the whole design: all sensing is receive-only. The badge listens to signals already being broadcast to every device in the room. It never probes, never transmits to anything it is sensing, uploads nothing, and keeps nothing off-device. It cannot watch anyone — it can only notice what is watching you.
Because the thing this is for is carrying it. Unwanted item-tracker alerts already exist — Apple and Google both ship them as standard phone features, under a joint cross-platform specification the two companies published together. That is settled consumer-safety ground, and SnapSense does not claim to invent it. What it changes is where the work happens: the shipped protection is fragmented by phone OS and by tracker vendor, it is invisible and unauditable, and it asks you to trust a cloud service with the one dataset that would most compromise you if it leaked — everywhere you have been.
SnapSense does the correlation locally, on a device that is not your phone, shows its work on the badge face, and keeps the history in your pocket.
In practice, SnapSense — the badge that notices what's following you works best when you follow a step-by-step device validation workflow and keep a simple checklist for wiring, power stability, and expected output behavior. This makes debugging faster and creates a practical badge troubleshooting path for repeatable results.
The Arduino UNO Q is the reason this is buildable as a single device, because it is really two computers that talk to each other.
The STM32U585 (Arduino / Zephyr) handles what must be exact and on time: the PDM microphone clock and data into the ADF audio digital filter, A-weighting, and sound level on a fixed interval — work a Linux userspace process cannot do reliably. It also parses GPS and drives the 8×13 LED matrix that forms the badge face.
The QRB2210 (Debian Linux) handles what needs headroom: BLE scanning through BlueZ, a rolling beacon history, the persistence correlation against GPS, the Wi-Fi scan list, and a small on-device audio classifier that names the dominant sound source.
The two exchange one record: time, latitude, longitude, dB(A), class, confidence.
That split is the honest argument for this board specifically. A single-microcontroller board cannot run the classifier; a Linux-only board cannot hold a hard real-time audio path.
The tracker detection is persistence-based, never presence-based. The signal is "this beacon has stayed with me across several distinct locations over time, " GPS-correlated. Presence alone is meaningless — in a crowded venue you walk past hundreds of beacons.
A reliable implementation also benefits from modular structure: separate input handling, processing logic, and output control so each part can be tested independently. That pattern supports low-noise board tuning, clearer only calibration decisions, and safer iteration when features evolve.
Sound is the environmental exposure people are worst at judging by ear, and the available tools are poor: phone dB apps are uncalibrated and cloud-tied, and lab meters cost over $1, 000, stay on a tripod, and cannot tell traffic from a leaf blower.
One more physical module — Nose. A snap-on module carrying a digital nitrogen-dioxide sensor. NO2 is the traffic pollutant most linked to asthma, and it is measured by so few official stations that most neighborhoods have no reading at all. Nose is electrically simpler than Ear - read, timestamp, log - and it turns the badge into a personal air-quality instrument: worn on a lanyard it measures the streets you actually walk, and fixed by the tripod insert to a vehicle it can map a whole transit corridor.
The enclosure is a two-piece parametric shell, roughly 76 × 60 × 27 mm, designed in Autodesk Fusion and built for PCBWay 3D printing. Base and lid, a window over the LED matrix, a pocket clip and lanyard ear, a USB-C cutout, a mic port in the lid, and a pen-tip pinhole over the power button — deliberately too small to press by accident, because a long press reboots Linux and would discard the rolling scan history.
It is built by a script, not by hand. Every feature is driven by User Parameters, so the whole enclosure regenerates when a dimension changes. Board-dependent positions were not eyeballed: the USB-C centreline, LED matrix centre and power-button location were measured by parsing the solid bounding boxes out of Arduino's official STEP model. That process caught a real error — two connector strips hang 5 mm below the PCB, which the datasheet's "bottom-side parts below 2 mm" does not cover, so the floor clearance had to increase before the board could physically seat.
Ear is a 2-layer shield for PCBWay fabrication. The standard Arduino header layout is asymmetric, so it only fits one way.
This summer I completed an NSF REU at Portland State University, building an agent-based model of Portland traffic that produces per-segment noise and NO₂ estimates checked against published baselines — with no field measurements of its own behind it (github.com/darcy0408/portland-traffic-abm). A wearable that logs real geo-tagged sound levels along a street is exactly the ground truth that model never had. The contest device and the research instrument turn out to be the same object.
The REU program has ended, but I am continuing to work on the project - and the NO2 side is the sharpest gap: the reference data my model was checked against comes from only two regulatory monitors and is years old. That is what Nose is for.
For long-term maintainability, document baseline measurements such as response time, stability under transitions, and recovery after temporary faults. Using this measurement-driven cannot optimization style gives you a scalable sound upgrade path without turning the project into a fragile one-off demo.
The privacy thesis has a plainer origin. I built a webcam squat-form coach and disliked that it put me and my living room on screen. So the next one drew only the body — no room, no furniture — and paused rather than guessed when its confidence dropped. SnapSense is that instinct in hardware.
Tracker detection has a ceiling. Trackers rotate their advertised identifiers specifically to stop third parties from tracking them. Separated tags rotate slowly enough that persistence detection works, but a purpose-built stealth device with continuous key rotation is very hard to distinguish from a tag you merely walked past. The claim is "flags beacons that persist with you, " not "detects all trackers."
Sound measurement is rank-order, not certified. Total level plus a dominant-source label and a confidence value. Per-source decomposition ("61 of the 68 dB is traffic") is a research direction, not a v1 feature — classification establishes which source dominates, not how much each contributes.
Wi-Fi monitor mode is not promised. The scan-list approach needs only ordinary station-mode scanning. Nothing in v1 depends on more than that.
Low-cost NO2 sensing is comparison, not certification. Readings are for comparing streets, times and trends; the sensor will be calibrated by co-locating the badge with a reference monitor, and cross-sensitivities such as ozone are stated rather than hidden.
Runtime is calculated, not measured — roughly 11–16 hours on a 5000 mAh cell with both radios and the microphone live, derived from component datasheets and published board measurements. It will be measured on real hardware.
The product is the platform: what can I snap onto mine? Designed in Fusion, shown as renders, not built for v1 — Eye (a passive optical check for the retroreflection of a lens pointed at you, for hotel and rental rooms), Heat (a low-resolution thermal array, also useful for building-envelope and electrical inspection), and Grade (an IMU node logging ramp running slope, cross slope, thresholds and surface roughness against ADA limits — cross slope is violated constantly, invisible to the eye, and an accelerometer resolves fractions of a degree).