Inspiration

We recently started hiking and assumed the uphill portion would be the most difficult part so we didn’t anticipate the knee pain on the descent. We soon discovered the discomfort is caused by how much we bend our knees and how much impact our knees absorb.

This made us want to discover a way to measure what we were doing instead of relying on how we felt. We built this project to track our movement during a hike, identify harder landings, and give us data we could review afterward to improve our downhill technique over time.

What it does it do

After receiving step logs from the ESP32, we plot the live data in our web app using Chart.js. The web app lets users start a hike, view live data, and, when they stop, store all hike stats and step logs in a database. The web app also allows users to view their hike history with the calculated hike stats such as total duration, active time, Steps 35, Average impact, Hardest step, Avg knee angle at impact, etc as well as the impact acceleration graph and knee angle at impact graph.

Soft Step collects acceleration and gyroscope data to estimate knee angles during movement. By combining these measurements through a complementary filter, we can track the relative orientation of the thigh and shin while reducing gyroscope drift. The user can also use a chatbot powered by the Snowflake API to analyze their hike data, ask questions about their performance, and get simple insights about things like knee angle, landing impact, and overall technique.

How we built it

We used an ESP32 microcontroller as the central processing unit, paired with two IMU’s to collect acceleration and gyroscope data from the thigh and shin. The components were connected using breadboards, and the entire component is secured to the leg using adjustable Velcro straps, allowing us to capture motion data during movement. The web app was built using vanilla JavaScript, HTML, and CSS. For the database, the web app used Supabase. Upon starting the hike, the step log data is immediately stored in IndexedDB. The step logs include a timestamp, knee acceleration, and knee angle. When the user ends the hike, the web app calculates the useful stats from stored step logs and stores it in the database. Moreover, the step logs are converted to JSON, compressed using Gzip compression, and stored in the database. All the database queries are possible from the client side with the help of the Supabase Anon Public Key.

We built the chatbot using Snowflake Cortex as the AI layer, with Supabase as the source of hiking data. When a user asks a question, the request is sent to our backend, which retrieves the relevant hike records from Supabase and packages that data together with the user’s question. That information is then sent to Snowflake Cortex through our backend using our application’s Snowflake credentials. Cortex analyzes the provided hike metrics and generates a natural-language response, allowing users to ask questions about things like impact, knee angle, landing patterns, and changes across hikes without needing to manually interpret the raw data.

Challenges we ran into

One of the biggest challenges was figuring out how to turn raw sensor readings into meaningful information about hiking technique. We had to work out how to combine data from two IMUs to estimate knee angle, account for calibration, use acceleration to detect foot strikes, and decide how knee position and impact should work together to identify a poor landing. We also had to make the hardware and software communicate reliably through Bluetooth, store the right data for each hike, and connect our backend to the Snowflake API.

Accomplishments that we're proud of

We built a working MVP that quantifies downhill hiking technique using real sensor data. The system can measure knee angle and landing impact, provide immediate feedback through the wearable device, save hike data for review, and let users analyze their results through a chatbot powered by the Snowflake API.

What we learned

We learned how to collect data from hardware components, process it, and derive meaningful findings from the data. This project provided more insight into the Supabase database and Snowflake API.

What's next for Soft Steps

To improve the accuracy of our knee-angle measurements, we could implement an adaptive complementary filter instead of using a constant weighting between the accelerometer and gyroscope. This would allow us to dynamically adjust how much we trust each sensor based on movement conditions. For example, during sudden impacts, we would place greater weight on the gyroscope, as the accelerometer's readings may be distorted by additional forces. When movement stabilizes, we could increase the accelerometer's influence to correct accumulated gyroscope drift, resulting in more reliable knee-angle estimates.

Built With

Share this project:

Updates

Submission history