Inspiration

What if you could detect unintentional falls using Wifi signals?

Unintentional falls are a leading cause of emergency department visits in the United States, accounting for approximately 8.87 million visits in a single year across all ages. For those who are at-risk (elderly, injured, disabled), timely detection and medical attention can be critical in maintaining their health and wellbeing.

The solutions out there often come with tradeoffs. Cameras are too invasive, smartwatches and necklaces are subject to human error and depend on users remembering to wear them, and dedicated sensors require complex installations.

We wanted to explore an approach that uses something already present in most households- Wifi, to detect falls without cameras, wearables, or disrupting everyday routines.

What it does

Pulse is a privacy-first fall detection system that analyzes changes in Wifi signals in order to identify potential falls, and quickly notify caregivers when someone may need help.

After identifying a potential fall, Pulse first attempts to contact the individual. If the individual requests help or fails to respond, Pulse escalates to contacting the individual's caregiver via SMS alert, to ensure that urgent situations don't go undetected.

Pulse also features an interactive dashboard that allows caregivers to monitor movement activity, track fall and event history, and view AI-generated incident summaries in real time. This provides caregivers with greater visibility and peace of mind, all without relying on cameras or wearable devices.

How we built it

Hardware: We used three ESP32-S3 microcontrollers to establish two Wi-Fi links across a room. One board transmits approximately 100 packets per second, while the other two capture Channel State Information (CSI) across 166 frequency subcarriers. Utilizing the fact that human movement changes how Wi-Fi signals propagate, we were able to analyze these disturbances to detect motion without using cameras or wearable devices.

Movement Classification: For movement classification, we developed both a threshold-based detector and a scikit-learn Random Forest model with 300 decision trees, trained on labeled Wi-Fi CSI recordings of falls, walking, and sitting down. All training data was collected using Wi-Fi signals alone, without cameras or video recordings.

Data Collection: To collect this data, we built a recording dashboard with synchronized audio cues, live CSI visualizations, and automatic detection of poorly timed recordings. We used Cloudflare R2 to synchronize recordings and trained models across our team. We trained it on real data, which involved a lot of real falling.

Alert System: We implemented a state machine that verifies four seconds of continued stillness after detecting a potential fall. The system then initiates a check-in using Photon for iMessage integration and escalates unanswered alerts to caregivers through SMS.

Dashboard & Integrations: We built a real-time dashboard using WebSockets to display motion activity, fall history, and alerts. We integrated Tiger Data (TimescaleDB) to store fall and movement events in time-series hypertables, using continuous aggregates to efficiently generate historical trends such as daily fall counts and hourly activity. To ensure database outages don't interfere with fall detection, we implemented asynchronous writes and a backfill mechanism to synchronize historical data. We also integrated the Gemini API to generate incident summaries from anonymized event metadata and designed a custom 3D-printed alligator enclosure using CadQuery, complete with an interactive 3D model on the dashboard.

Challenges we ran into

One of our biggest challenges was the sensitivity of Wi-Fi signals to their environment. At first our sensors weren't detecting enough movement, and we discovered that the direction of our antennas significantly affected our readings. Changing our sensor placement, orientation, and room layout required frequent recalibration, so we experimented with different configurations and eventually taped our sensors down to keep them stable. However, adapting Pulse to unfamiliar environments remains a challenge.

Training our fall detection model was another major obstacle. Our classifier often confused walking with falling, and we realized that training an accurate model required much more labeled data than we initially anticipated. We also initially wanted to classify sitting down separately because we were worried it could be mistaken for a fall. However, after struggling to collect meaningful sensor readings for sitting movements, we realized that sitting barely disturbed the Wi-Fi signals and wasn't interfering with fall detection in the first place. We ultimately scrapped sitting classification and focused on improving fall detection through additional recordings, threshold adjustments, and model training.

We also encountered network packet buildup and delays, which caused our live CSI feed to lag behind actual movement. This created a cascading effect throughout the system, affecting motion detection, classification, and the timing of alerts. After debugging and resolving the packet delay issue, we were able to restore real-time processing and improve the reliability of fall detection.

One thing that made debugging particularly challenging was that the problems weren't always in our code. Unlike typical software projects, we had to consider physical factors like antenna orientation and sensor placement, networking issues like packet delays, and the behavior of our machine learning model. A problem that initially looked like a classification bug could actually originate from the hardware or data pipeline. Learning to debug across all these layers was one of the biggest challenges of the project.

Accomplishments that we're proud of

One of our proudest accomplishments was building a working fall detection system using real Wi-Fi CSI data, without relying on cameras or wearable devices. We developed an end-to-end pipeline that captures signals from three ESP32-S3 boards, processes movement data in real time, identifies potential falls, and initiates alerts to caregivers.

We're especially proud of training our own fall detection model using data we collected ourselves. We developed both a threshold-based detector and a Random Forest classifier with 300 decision trees, extracting features like motion energy and changes in the room's wireless environment to distinguish falls from everyday movements. Seeing our model successfully identify falls after so much experimentation with calibration, data collection, and classification was incredibly rewarding.

Another accomplishment was getting all the different components to work together reliably. We resolved packet buildup and latency issues that affected our real-time CSI feed, and integrated motion detection with a state machine that verifies continued stillness before triggering alerts. Getting the entire pipeline working, from physical movement to detection and caregiver notification, was a major milestone.

Finally, we're proud of how much we pushed ourselves outside our comfort zones. Unlike a typical software project, Pulse required us to work across embedded hardware, networking, signal processing, and machine learning. We learned to solder, debug physical sensor configurations, and troubleshoot problems across multiple layers of the system. Being able to bring all of these unfamiliar technologies together in a single working prototype was one of our biggest achievements.

What we learned

One of our biggest takeaways was that building a hardware-integrated system requires a completely different approach to debugging. We were used to looking for issues in our code, but with Pulse, the problem could be anything from antenna positioning and packet delays to signal processing and model classification. We learned to think about the entire system rather than treating each component independently.

We also learned a lot about Wi-Fi Channel State Information, collecting and processing real-world sensor data, and training machine learning models. Unlike working with existing datasets, we had to collect and label our own data, figure out which features were useful, and understand how changes in the physical environment affected our results.

Most importantly, we learned how to work outside our comfort zones and quickly pick up unfamiliar technologies. From soldering and 3D modeling to machine learning and real-time networking, everyone had to learn something new to make Pulse work.

What's next for pulse.

Our biggest priority is improving Pulse's accuracy and reliability across different environments. We want to expand our training dataset with more people, movements, and room configurations to reduce false positives and improve fall detection without requiring constant recalibration.

We want to expand Pulse to support multiple rooms and multiple people, allowing caregivers to monitor activity throughout an entire home rather than a single space. Another goal is to incorporate room mapping, using differences in Wi-Fi signal disturbances to estimate where movement or a potential fall occurred.

We also want to move our iMessage integration to a cloud-hosted messaging service instead of relying on a personal Apple ID and a locally running setup. This would make our alert system easier to maintain, more scalable, and less dependent on individual devices.

Finally, we plan to integrate a physical Arduino button that allows individuals to confirm they're okay after a detected fall, providing an accessible alternative to responding through their phone.

Ultimately, we want to make Pulse a more accurate, scalable, and accessible fall detection system that can be deployed in real homes.

Built With

Share this project:

Updates

Submission history