Inspiration
Students spend valuable hours hunting across campus for a study spot, but too often find places that are loud, crowded, or too warm to focus. Somewhat unreliably people do find a place to sit; they do not necessarily get a place that feels right. SenseMap exists so you can see these live conditions across campus and find the perfect spot to be productive.
What it does
SenseMap is a privacy-first map of SFU Burnaby study spaces. A Raspberry Pi measures light, relative sound, and temperature. We combine that with a capacity-normalized crowd estimate and show Low / Moderate / High labels plus an explainable 0–100 suitability score. Students filter a 3D campus map for quiet, well-lit, dimly lit, or uncrowded rooms. Every reading is meant to be a direct live reading or an estimate based on one and goes stale after 15 seconds.
How we built it
Python on the Pi posts sensor JSON every 2–5 seconds. Next.js APIs ingest readings into Tiger Data / TimescaleDB (or an in-memory demo store). React + MapLibre render a pitched 3D map. Scoring is deterministic.
Challenges we ran into
Sound is relative amplitude, not calibrated dB. Bluetooth data is often noisy due to a lack of one-to-one relation between the number of people and devices. This makes the estimate slightly more unreliable and so is an estimate based on a proportion determined by the most common observations around us. Hardware, Bluetooth, and the database can all fail—so each sensor and the store degrade instead of taking down the demo.
Accomplishments that we're proud of
A full loop in a weekend: sensors → API → time-series store → 3D map → transparent score. The dashboard still works with clearly marked simulated data. Privacy is a product choice, not a footnote.
What we learned
Time-series belongs in a hypertable. Students trust labels more than a black-box ranking. Occupancy is the hard ethical problem. AI works best as a narrator of numbers you already computed.
What's next for SenseMap
More nodes on real floors, a centralized system to co-ordinate them, privacy-preserving occupancy (aggregate APs or doorway sensors), calibrated sound, and a facilities view of where comfort stays poor—so existing space gets used better before anyone builds more of it.
Built With
- adafruit-blinka-/-circuitpython-drivers-(adafruit-circuitpython-bh1750
- ai
- analog-sound-module-+-mcp3008-(spi-adc)
- backend-&-data-next.js-api-routes
- bh1750-(light)
- dht
- dht22-(temperature)
- maplibre-gl
- mcp3xxx)
- openstreetmap-/-openfreemap-(basemap)
- postgresql-(pg)
- python-3-sensor-agent
- raspberry-pi
- react-19
- tailwind-css-4
- tiger-data-/-timescaledb-(hypertables)
- typescript
- vercel-(dashboard-deploy)
- web-app-next.js-16
- zod
Log in or sign up for Devpost to join the conversation.