I built this ACL Rehab Tracker as a fun way to learn more about wearable sensing and to make knee-rehab exercises easier to visualize. The idea is to easily track the progress of your knee post injury based on the most important indicators of knee health including range of motion, quad activation, leg torque etc.
The system uses two IMUs mounted on the thigh and shin and a MyoWare muscle sensor for quadriceps activity. A PocketBeagle reads the IMU data over I²C and the EMG signal through an analog input, then sends everything to a browser dashboard. The UI shows the knee angle over time through a live graphic, basic muscle activation, and helps you keep track of all of these metrics.
Hardware Guide: Fritzing DiagramHardware Guide: Step-by-Step Instructions
The wiring and layout follow the Fritzing diagram shown in the project schematics. You’ll want to have that open while you go through the steps.
1. Soldering and Prep
IMU boards (thigh + shin)
- Solder a straight 0.1" male header strip to each IMU breakout so the pins point downward into the breadboard.
- Make sure you solder all the relevant pins: VCC, GND, SDA, SCL, and any address pin you plan to use (if you’re changing I²C addresses).
MyoWare muscle sensor & Link Shield
- Solder a 3 pin header to the MyoWare sensor board so you can break out + (V+), – (GND) and ENV (envelope output).
- Snap the Link Shield onto the main MyoWare sensor using the three metal snaps so they form one assembly.
- Remove the protective cover on the front of the MyoWare sensor and adjust the gain dial down (normally comes with gain ramped up too high which gives inaccurate output voltages)
Electrode cables and pads
- Braid the electrode cables to minimize interference.
- Connect the snap electrode cables to the link shield.
- Attach disposable electrode pads to the other ends of the cables; these will later stick to the quadriceps according to MyoWare’s placement guidelines.
Tip: Do all soldering before you plug anything into the breadboards or power the PocketBeagle.
2. Setting Up the Breadboards and Power
Arrange the boards like the diagram
- Place one IMU on the left breadboard and the second IMU plus the MyoWare assembly on the center breadboard.
- Place the PocketBeagle on the right breadboard, lined up so its pins drop into the breadboard rows as in the Fritzing sketch.
Join the power rails across breadboards
- Use jumper wires to connect the 3.3 V rail (red) across all boards.
- Do the same for GND (blue/black rail) so that both IMUs and the MyoWare sensor share the same ground and 3.3 V source as the PocketBeagle.
Provide 3.3 V and GND from the PocketBeagle
- Choose the PocketBeagle pins that supply 3.3 V and GND (P1_14 and P1_16) and run them to the appropriate power rails on the main breadboard, as shown in the diagram.
- Double-check that all sensors are powered from 3.3 V, not 5 V.
3. Wiring the IMUs to the PocketBeagle (I²C)
Powerconnections for each IMU
Connect VCC → 3.3 V rail.
- Connect GND → GND rail.
- Connect AD0→ 3.3 V rail for the shin IMU to set the address high.
Shared I²C bus
- Run the SDA line from the PocketBeagle’s I²C2 pin to the SDA pin on each IMU.
- Run the SCL line from the PocketBeagle I²C2 pin to the SCL pin on each IMU.
- These are shared lines, so SDA and SCL are daisy-chained to both IMUs just like in the Fritzing diagram (top jumper bundle).
4. Wiring the MyoWare Sensor to the PocketBeagle (Analog)
Power for MyoWare
- Connect V+ on the Link Shield → 3.3 V rail.
- Connect – (GND) on the Link Shield → GND rail.
ENV output to analog input
- Connect ENV from the Link Shield to the 3.3 V analog input pin on the PocketBeagle (P2_35).
- Route this wire along the lower section of the breadboard, matching the cyan wire in the Fritzing diagram.
Electrode placement
- Stick the electrode pads on the quadriceps according to MyoWare’s recommended configuration: two active pads along the muscle and one reference/ground pad nearby.
- Confirm all three snap leads are firmly attached to the MyoWare sensor.
Tip: Only uncover the sticky backing of the electrode pads and attach them to the muscle when you are ready to test/use the device as they can lose a bit of their effectiveness on every subsequent use.
5. Final Checks Before Powering On
Continuity & shorts
- With power disconnected, quickly check for obvious shorts between the 3.3 V and GND rails.
- Make sure no bare wires are crossing between rows that shouldn’t be connected.
Pin verification
- Verify each IMU has VCC/GND/SDA/SCL going to the correct rails and PocketBeagle pins.
- Verify the MyoWare V+, GND, and ENV → analog input are correct.
Power up
- Plug in the PocketBeagle’s USB power.
The IMUs and MyoWare should power up. You can now run your backend code on the PocketBeagle and the frontend server on your computer (instructions for all software is included in the github repo).
Project DemoLocated in Github repo in folder Project_01Link Here
Issues and Future ImprovementsI initially set out with intentions of having this device be completely disconnected from my computer and run a webserver that could be accessed through any device on the same WiFi network. The idea was to power the device with a battery and attach a USB WiFi module so the PocketBeagle could function entirely on its own. However, I ran into multiple issues, all stemming from the PocketBeagle not being able to host a modern React frontend due to the size of the build files and limited memory.
As a workaround, I tried keeping only the lightweight backend running on the Beagle and streaming the sensor data to a frontend hosted on my laptop through the local development server. However, I wasn’t able to reliably route the data to the frontend because of port conflicts and cross-origin/port-mapping issues between the Beagle and my machine, so the two sides never communicated cleanly. While I don't think this is a super difficult problem to solve, it's something I didn't have time to debug now but plan to do in the near future.











_3u05Tpwasz.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)
Comments