Open Barbell: Modifying the User Experience

My fantastic trainers Lance and Kelley at Get Strong First got their hands on a few of the Open Barbell V2 units. Joseph over at Squats and Science was kind enough to provide me with a pre-production version of the firmware, which runs on an RFduino board.

Adding Real Time Reporting

I watched the Open Barbell device being used for eccentric training, where the lifter attempts a slow controlled lower and rapid lift. The accurate information about lowering time was helpful. Unfortunately, the phone app only displays time information after a rep is completed. A lifter could make better corrections if shown real time feedback. After explaining the idea Kelley lent me a device. I discovered the current implementation of the firmware only sends a result packet after rep completion, but there’s no reason the Open Barbell couldn’t give some form of feedback to the user in real-time. This series of posts will track my progress bringing up the Open Barbell firmware and implementing the feature.

Arduino IDE Bringup

The wiki has some step-by-step directions for bringing up the Arduino IDE, but as of December 2016 the required libraries zip on the wiki doesn’t contain all the requirements. The Filters library isn’t included, and there’s a small fix to a test method needed to get the library to compile on the RFduino board. I’ve forked the library and the wiki now includes a step to clone or copy the library into your Arduino libraries folder.

Filter library fix

For future reference, here’s a quick rundown of the problem and simple fix. In the original library the RunningStatistics.cpp file has a test function that gathers filter data off the analog pin A0. Since the RFduino libraries don’t have the analog pin aliases, I’ve moved the test functions to a new file RunningStatisticsTest.cpp/h and added #ifndef __RFduino__ guards to avoid compiling it in an RFduino project.

Remember that the Arduino IDE must be restarted after adding a new library. While pulling in a code change in an existing library file only requires rerunning sketch verification.

Future Tasks

This is part one in a series documenting an Open Barbell development environment on a chromebook running GalliumOS 2.0 (a Ubuntu 16.04 based distro). This section will serve as a living table of contents of project goals and progress.


  1. Adding an on-rack accessory display with current rep data via BLE is the first step towards real-time reporting.

Environment Setup

  1. Get my Gtest/Gmock bootstrap repo going with an arduino mock library.
  2. Setup a CMake project to build and bootload the project outside Arduino IDE.
  3. Setup Vim environment to navigate the codebase.
  4. The codebase needs an automated test suite to help refactor from an Arduino sketch in a single file.

Feature additions

  1. The tach is not used for user interface input. This would be an interesting and novel method for navigating menus or making other selections.
  2. The RFduino bootloader doesn’t seem to have a way to query the payload checksum. The firmware should calculate a checksum and store it in flash on first boot. Then add it to a menu or BLE report.

Leave a comment

Your email address will not be published. Required fields are marked *