Inspiration

Our team of three wanted to build a project that implemented physical hardware using low-level C algorithms, as C is the language we are most familiar with. We were inspired to combine this bare-metal hardware interaction with Python, using Python as a lightweight wrapper to handle the complex networking and logic scaffolding.

What it does

RiHab is a smart rehabilitation wearable that turns at-home physical therapy into a precise, gamified, data-driven experience. Using an Arduino, a rotary angle sensor, and a 3D-axis accelerometer, our hardware captures a patient's full range of motion, repetition speed, and "flux" (micro-instabilities). It compares the injured limb to a healthy limb to generate an objective recovery score. The platform also gamifies consistency with workout streaks and connects patients to in-network providers and recommended stretches if they experience discomfort.

How we built it

To maximize our 36-hour execution window, we completely decoupled our roles so no one was waiting on someone else's code to compile. We divided the team into three specific areas:

Low-Level Software Engineer: Focused on writing the core C data processing loops, managing memory, formatting the raw output data, and building the device.

Python Integration Lead: Focused on capturing the C outputs, feeding data into the logic models, and handling the reporting.

Hardware & Communications: Managed the wiring of breadboard components and ensured the sensors passed accurate voltages.

Instead of building the project feature-by-feature, we broke the architecture down by the data pipeline. We structured the flow into isolated stages: reading raw physical signals into C, processing the algorithms in C to output a formatted string of numbers, and bridging those numbers into a Python script. To avoid bottlenecks while the complex C math was being written, we temporarily passed hardcoded "dummy" data to the Python engineer so they could build the backend logic concurrently. Once each component was built we spent time to integrate them together seamlessly. Finally, we created binding devices to attatch the Arduino, breadboard, and sensors to a thigh plate to keep the components stable using OpenSCAD and then exported the files and fed them through a 3D-printer. We were able to cut printing time by decreasing the infill percentage and keeping the plates hallow.

Challenges we ran into

The biggest challenge we ran into was integration AFTER building out each part in addition to learning how to use the hardware and setting up the pipeline on the fly. During a 36 hour hackathon it's not efficient to wait for other people to finish building their contribution to then build your own, so its alot of hardcoding dummy data until you're able to implement real data. We also ran into a lot of hardware issues as well one being a lock-up in the setup() phase due to the IC2 protocol waiting infinitely if the accelerometer wires were even the tiniest bit loose. I had to use jumper wires with the grove wires, we didn't have grove-to-male wires.

Accomplishments that we're proud of

We are incredibly proud of the way we were able to implement great system design which helps streamline the process significantly. We're also impressed with our ability to adapt and learn new skills on the drop of a dime and implement aid skills effectively.

What we learned

We learned the critical importance of breaking a project down by its data pipeline rather than by final features. By isolating our inputs, logic, and outputs into stages, we kept development moving simultaneously—even passing hardcoded dummy arrays to the Python engineer so they could build the backend while the complex C math was still being written.

What's next for RiHab

Built With

Share this project:

Updates

Submission history