Human Power Output Measurement Device For Cycling

A training tool that provides real-time human power output and form feedback

Similar projects worth following
Devices that measure the power output for cyclists are expensive, require special components (e.g. crank, wheel hub, pedals) and are closed to software development and personalization from hobbyist or enthusiasts.

The device proposed does not employ a novel methodology, but utilizes readily available components that along with very detailed assembly instructions and a custom Android app, enable 100% of the DIY cyclist community to have a dual leg power output measurement device for less than $200. Initial design specification goals are as follows:

Minimum 100Hz data sampling rate.
Minimum 10hr battery life during active use - USB rechargeable
LE bluetooth communication between sensor and Android device.
Force measurement (computed from bending moment via full-bridge strain gauge on crank arm) must be accurate to within 3% full-scale value throughout full measurement range.
Force range +/- 2000N (~500lbs)
Create a Android application that provides real-time power output

Project will be broken into phases. At the end of which there will be a working prototype that may be further refined for aesthetic reasons (i.e. smaller):

Phase I: Instrumenting a Crank Arm


  • DONE Source strain gauges
  • DONE Optimize installation of strain gauges onto aluminum crank arm
  • DONE Source instrumentation amplifier (SOIC package, single supply) and auxiliary components
  • DONE Construct prototype instrumentation amplifier (IN-Amp)
  • DONE Perform validation of instrumented crank arm with custom instrumentation using NIST traceable reference (Instron 8872)
  • DONE Determine linearity, hysteresis, fatigue life, and sensor crosstalk
  • DONE Analysis of the signal will indicate need for filtering (likely need a passive or active LP filter)


  • DONE Strain gauge placement that permits linear (or low hysteresis) over desired measurement range
  • SEE PHASE II Battery powered instrumentation amplifier that outputs a 0-5 (or 0-3.3)VDC signal
  • DONE 10pt calibration is within specification

Phase II: Analog Voltage to LE Bluetooth

  • DONE Source and microcontroller with ADC and LE bluetooth module that will allow a minimum sampling frequency of 100Hz (in the Android app).
  • DONE Source gyro that will be used to determine rotational velocity of crank arm.
  • DONE Determine power requirements of circuit so that an appropriate capacity LiPo battery may be chosen

Phase III: Form and Function

  • IN PROGRESS Design custom PCB to integrate all components. No breakout boards (FAILED)...
  • NOT STARTED Design custom weather-proof housing
  • IN PROGRESS Begin Android application development.

  • 4 × Model BF350-2GB-A half Strain gage Strain gauge for Load cell / Pressure sensor Model BF350-2GB-A half Strain gage Strain gauge for Load cell / Pressure sensor
  • 1 × nRF8001 Bluetooth low energy breakout board by Adafruit
  • 1 × AD623 Analog Device, Instrumentation amplifier
  • 1 × ATmega328 Microprocessors, Microcontrollers, DSPs / ARM, RISC-Based Microcontrollers

  • Circuit; Rev3. Bringing it Together

    valgus11/02/2014 at 21:51 0 comments

    As software development is slow going, I thought I'd spend some time completing the hardware component of the project to improve morale. The plan is to make the circuit (below) as small as possible, 3D print a case, and have a working prototype that I can pass around to collaborators to wrap up the software element. I have located components with SMD footprints for the charging, DC-DC boost, and instrumentation amplifier,

    and plan on getting boards made soon through OSHpark. Incorporating the bluetooth and 9DOF IMU elements are out of my comfort zone, so I'll rely on the Adafruit breakout boards. This is not ideal, but I'm confident that the final device size will be acceptable.

    My biggest assumption moving forward is that the 9DOF IMU will provide orientation/rotational velocity feedback accurate enough to meet my requirements. I had planned on using a reed switch on the crank arm to serve as a fiducial for correcting orientation. I will rely on testing to determine if additional input is necessary, or if the 9DOF IMU will be sufficient.

  • Rev2 Circuit Complete

    valgus10/18/2014 at 22:07 0 comments

    The Rev2 circuit was built and tested [awhile ago]. The design intent was to create a signal conditioner and amplifier for a full wheatstone bridge, single-rail supply (6-18VDC), and jumper settable gain options of 10, 50, 100, 500, and 1000. By design, the output range is 0-5VDC, centered at 2.5VDC. However a potentiometer could easily replace the voltage divider that provides the 2.5VDC reference voltage for the instrumentation amplifier if a different reference is desired.

    In the photo above, you can see the LM7805 5VDC voltage regulator. In the next prototype, a batter charging circuit, boost converter (to get 5VDC from 3.7VDC LiPo battery), ATmega328, LE bluetooth module, and gyro will be added. The boost converter will replace the inefficient voltage regulator in circuit Rev2, but was suitable for early prototyping and sensor validation. The Analog Device's instrumentation amplifier is top middle, surrounded by polypropylene filtering capacitors. And finally, five 0.1%, 50PPM metal film resistors (one on bottom of board) provide the 5 different gain options depending on the position of the white jumper. This turned out to be a fortuitous design addition, whereby I can easily increase the gain to ridiculous levels to facilitate balancing the bridge, and then quickly change to a lower gain for measurement use. Noise levels were similar to the Rev1 design, approximately 10mV Pk-Pk. As previous results have shown, this is suitable for my purposes, and combined with simple digital filterring techniques, measurement uncertainty is approximately 1-2lbf at 340lbf.

    Right now the largest hurdle moving forward is developing an Android application that will read the sensor data, and display it in a meaningful way. For prototyping, I purchased a LE bluetooth module (Bluefruit LE - nRF8001 Breakout - v1.0) and will continue working towards this end. If anyone is interested in helping/collaborating, please contact me.

  • Calibration Fixture Re-Welded

    valgus09/29/2014 at 00:50 0 comments

    Re-welded and sandblasted the calibration fixture. Planning on doing the calibration afterwork 9/29/2014. Also purchased the bluetooth module so that I'll be ready to start coding once the Rev2 circuit is done.

  • Phase I Almost Complete

    valgus09/27/2014 at 02:17 0 comments

    Strain gage amplifier/conditioner:

    The Rev1 amplifier/conditioner circuit was built and tested on both the initial single strain gage test bar, and the fully instrumented crank arm (pictured).  The results were very promising, as a gain of approximately 2,500 was used, and the pk-pk fluctuation of the signal was <15mV. Not inconsequential, but in regards to the instrumented crank arm, this amounts to an error of 3lbs (+/- 1.5lbs about mean). The next iteration will move towards a single-side supply, making the circuit much easier to power by a single battery. More importantly, the new revision will provide a 0-5VDC output, with 2.5VDC corresponding to 0% strain. I've abandoned the pursuit to make a device that does not rely on a microcontroller to communicate between the analog-to-digital converter (ADC) and the bluetooth transceiver. Since doing this, it makes component selection much easier, and permits the application of digital signal processing, utilizing a built in ADC, and ability to expand features (scope creep?). The 0-5VDC output signal from the strain gage amplifier/conditioner will be compatible with the microcontroller ADC.

    Instrumenting the crank arm:

    This was much easier than I expected. I had two cranks to instrument, and intentionally instrumented one haphazardly. Ironically, I accidentally tore the leads off of not one, but two strain gages on the one that I spent a lot of time on.  However, the 'haphazard' crank worked beautifully. I built a special fixture to allow calibration, and fatigue testing of the strain gages, but sadly I was only able to run one loading run before my welds broke. That is why the applied load curve is non-linear.

    I used the same epoxy specified in my previous project log, and it appears to be working, yet I won't know for sure until a proper fatigue test is done (1 million cycles or more). 

    Initial calibration:

    As previously mentioned, the strain gages were placed 'haphazardly', in that the strain orientation was not aligned along the long axis of the crank arm as well as it could have been. Regardless, the linearity was much better than expected, and the hysteresis was not significant enough to measure (see graph). The error was also independent of the applied load, and fluctuated +/-1.5lbf. This meets my design requirement, but more testing is needed to confirm the result. Due to the premature failure of the calibration fixture, a proper calibration could not be completed (yet).

    Another much needed test is to measure the amount of instrument crosstalk. The placement of the gages was designed to measure the applied bending moment and be insensitive to forces applied along the long axis of the crank arm. In essence, if a person is resting on the pedal with the crank resting at bottom-dead-center, there should be no output. Along with the aforementioned fatigue test and hysteresis test, measuring crosstalk will need to be completed before moving forward.

    Path forward:

    Order components for Rev2 amplifier/conditioner

    Build Rev2 amplifier/conditioner

    Re-weld test fixture

    Repeat calibration tests

  • Strain Gages Arrived, Much To Do

    valgus09/06/2014 at 20:57 0 comments

    The strain gages arrived, and initially seem to be okay based on how much the resistance varies from sensor to sensor. The difference ranged from 0.0 ohm to 0.7 ohm, which appear to be on par with more expensive sensors. It doesn't tell the whole story, but so far so good.

    I was researching glue and decided on a high strength (3.5ksi, 24MPa) epoxy I purchased from a home improvement store. I followed some tutorials I found on both Vishay's and Omega Engineering's website as well as on YouTube.  After preparing the surface with acetone (to degrease) and isopropyl alcohol (to remove acetone residue), I adhered the strain gage using the tape method and left the epoxy to cure for 24hrs. I then soldered on leads and gave it a shot (see photo). 

    With a variable resistor set to match the resistance of the strain gage, I was able to make a voltage divider with a 10VDC power supply. With approximately 350Nm of bending moment on the beam (see photo), I was able to get a output voltage change of 14mV. Based on this, I estimate that a full bridge will provide ~52mV in practice. 

    I designed the first version of the amplifier/conditioner (see photo). It consists of an Analog Devices instrumentation amplifier combined with an active 3rd-order Butterworth filter. There will be a lot of differences between this initial design and  the final version, but this will be enough to hash out appropriate gains, noise suppression techniques, and measure the linearity and calibration values of an instrumented crank once it is created (soon). All of the parts have been acquired, so the first version will be made with a standard perf board this week, and hopefully noise levels will be below 2mv pk-pk else a custom PCB will replace the perf. Hopefully it doesn't come to that just yet.

  • FEA Results- No Strain Gages Yet...

    valgus08/31/2014 at 23:12 0 comments

    Still waiting on the strain gages to swim over from China. As I was waiting, I did some simple FEA on a left crank arm to support my initial strain gage placement. I plan on using 4 gages to create a complete wheatstone bridge that will [hopefully] measure applied bending moments, and yet be insensitive to pure tensile force (when crank is bottom-dead-center and the cyclist is not actively pedaling). The results corroborate the napkin calculations, that strain magnitudes will be far from the gage's 2.5% limit, and therefore ideal placement should be closest to the bottom bracket spindle to increase sensitivity. The FEA results presented were calculated using a 200lbf shear load applied to the end of the "pedal" perpendicular to the long axis of the crank (first and second image), and also with the 200lbf shear load applied parallel to the long axis of the crank (third image, "pure tensile force"). The purpose of the simulation where the force is parallel to the long axis of the crank was to determine how precise/accurate strain gage placement needs to be in order to guarantee that the gages are only sensitive to bending moment, and not a tensile force. Given the region of very low strain along the midline of the crank (third image), it should provide the desired result. Fingers crossed.

    Hopefully the strain gages arrive soon, and the trial-and-error process of instrumenting the crank arms can begin. In preparation I'll purchase some hobby-quality 2-part epoxy (Home Depot, Lowes, Ace, etc), and cyanoacrylate + hardener glues. CA glue will be used to adhere the strain gages to the crank arm, while the epoxy will form a protective shield in the inevitable event that I drop it. Note that I'm not purchasing from Omega or the like. Nothing against them, but as cost effectiveness one of my main deliverables, I've decided to take the risk in hopes of finding and demonstrating lower cost alternatives that perform equal to or better than traditional suppliers (Omega, Vishay, etc).

  • Strain Gage Placement II

    valgus08/13/2014 at 16:50 0 comments

    Aforementioned napkin calculations suggest that the 2.5% strain afforded by the purchased strain gages is an order of magnitude more than the peak strain induced in a crank given a 2224N pedal load (331Nm equivalent at bottom bracket). I'll still proceed with creating a FEA to provide a more accurate representation of strain three dimensionally. This will take into account the axial torsion due to off-axis loading (pedals aren't in-line with cranks). The lesson learned is that the strain gages should likely be placed as close to the bottom bracket as possible to improve sensitivity.

    Purchased 3 crank arms that will arrive this Friday, and will subsequently be instrumented once the strain gages arrive.

    Currently designing a test rig that will rigidly hold a crank arm so that the device may be calibrated using an Instron servohydraulic load frame.

    While doing some research, Keith Wakeham's previous Hackaday project surfaced. Tremendous amount of work (quality and quantity), yet his blog suggests that work has stopped. It seems a true open source power meter has yet to be created. I think getting away from the usual ANT+ devices (e.g. Garmin) and using smart phones will provide greater flexibility in software design, and allow anyone to produce novel training programs utilizing the power meter. Also I want to do everything possible to avoid using an intermediary microcontroller between the instrumentation amplifier and bluetooth device. This is mainly to reduce power requirements, but also to simplify the circuit, minimize size, and keep component/manufacturing costs low. 

  • Strain Gage Placement

    valgus08/09/2014 at 01:53 0 comments

    The gages are specified as having a max strain threshold of 2.5%.  I'll post some estimates for optimal placement on a 6061 Al crank arm (soon to be purchased in triplicates) given a peak applied force of 2000 N. I'll assume the typical cantilevered beam equations are adequate with an elliptical cross-section, and a factor of safety of 2. I'm a little worried this may dilute my low force readings, but I feel it is a good starting point given the risk of sensor delamination or premature failure. Worst, slow sensor drift that would give the appearance of proper function, but entirely wrong. Is that Type 1 error?

    By Friday August 15 I should have these calculations done along with a more formal analysis done with NASTRAN. I'll model the cranks as soon as they arrive and run a FEA to guide my first go at sensor placement. Both estimate and analysis will hopefully corroborate each other and be a fun learning opportunity for working with NASTRAN. 

  • Sourced Strain Gauges

    valgus08/07/2014 at 01:58 0 comments

    Finally found a cheap source for linear strain gauges. Bought 3 lots (9 gauges per lot) for $37 from Definitely questionable, but I'm optimistic that they will be sufficient for my purposes. Consistent resistance between gauges will certainly support or discourage my optimism. Will update when they arrive.

View all 9 project logs

Enjoy this project?



Michael Haas wrote 10/20/2014 at 09:17 point
Just a quick reply as I am on mobile: different barbells flex differently. High-quality Olympic lifting barbells are a lot more whippy than others, so the strain gauge needs to be calibrated to each barbell.
Additionally, grip width is different between snatch and clean so you'd have to re-adjust the gauge (I assume).

There are some training system out there which focus on maximum force/power production, so that'd be a plus. In the snatch, maximum power is typically achieved at less than your max.

Regarding left/right side imbalance: that's typically measured with a force plate under each foot, but measuring at the barbell might just work.

I am wondering if two accelerometers glued to the barbell would just work as well.

  Are you sure? yes | no

valgus wrote 10/20/2014 at 20:21 point
I agree it is a simpler solution, yet you would be unable to calculate a unique solution with only 2 accelerometers. You need to account for the rotation of the bar (rotation of the accelerometers) in order to calculate the acceleration vector with respect to the ground. I think the simplest solution would be to purchase a 9 degrees of freedom IMU commonly used in quadcopters. The combination of acceleration and gyro data is enough to get what you want.

  Are you sure? yes | no

Michael Haas wrote 10/21/2014 at 04:59 point
Yes, that was my thinking. I neglected to mention the accelerometer in my last answer, I guess. The wiimote has both of these sensors... Somewhat coincidental, I am starting a program today that requires speed work at a specific bar speed. I might just strap my android phone to the bar and see what happens.

  Are you sure? yes | no

Michael Haas wrote 10/19/2014 at 08:06 point

this is a very cool project. I'm always interested in measuring (and improving) human sports performance. If you ever want to do some work for barbell related sports, let me know!

  Are you sure? yes | no

valgus wrote 10/19/2014 at 14:50 point
What did you have in mind? If it means help developing the phone software, I'm in.

  Are you sure? yes | no

Michael Haas wrote 10/19/2014 at 15:52 point
I have no concrete plans right now, I'm afraid. A while ago I was toying with some ideas...

So, olympic weightlifting. You typically rely on a coach, but you can also (or additionally) do video analysis of your lifts. These will tell you your bar speed, bar height, and most importantly bar path. Nowadays, if you want to do a video analysis, you need a laptop, a (firewire?) camera and a special, very expensive software.

As an alternative, you can use your smartphone and some special apps which will track the bar path for you. Only one (that I know of) can track bar speed, and that one is missing some other numbers that may be of interest to coaches.

So I basically had the idea to strap a wiimote to the barbell and hook it up to a smartphone via bluetooth. An app would then calculate the relevant measures from the acceleration data. The basic use case is a cheap alternative to the expensive windows software. But I guess it'll become obsolete soon with better apps on smartphones.

As you can see, no concrete plans - you were just the first person I saw doing a sports-related hack and I figured I'd reach out. If you happen to be interested, then here's a video showcasing some of the analysis techniques:

  Are you sure? yes | no

valgus wrote 10/20/2014 at 01:41 point
Ultimately, the device I want to make is essentially a small wireless strain measuring device that can be read wirelessly by either a smartphone or computer. What if you placed strain gages on the barbell (two sets, placed in between your grip and the weight) in a configuration such that you can measure the bending moment in two dimensions (

Add a gyro to orient the bar with respect to the ground, and you would have all the information necessary to compute bar motion. Since you know what the mass of the bar is, you can use the force data to calculate acceleration, and gyro data to determine acceleration direction. Integrate that vector over time to get velocity, and integrate again to get displacement.

In addition to velocity and displacement, you would be directly measuring your applied force (deadlift 80kg, but what is your true peak force? 100kg?), how symmetrical your lift is (do you favor your dominate side? by how much?), and also how much energy you're expending. This last part would be very interesting to compare people of different experience. I remember some study on climbers that suggested the most significant difference between professionals and amateurs was not strength or endurance, but that the professionals expended less energy, relying on passive holding postures rather than active.

I think I'm getting ahead of myself, but we could conceivably publish our results in at least a scientific conference (American Society of Biomechanics comes to mind) if not a peer-reviewed journal even with just a few "test" subjects.

The downside is of course you have to glue the gages onto the bar, which would be an issue if the bar does not belong to you.

As an alternative, I have worked with video processing before. You could use two-three video cameras (GoPro?) at a known distance apart, and record the lift. Then take the recordings and process them in something like MATLAB or Octave to compute 3D motion. A lot less sexy, but data nonetheless.

Let me know your thoughts.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates