From WikiBarbell
Jump to: navigation, search


What does the OpenBarbell Do?

Back to Table of Contents

OpenBarbell is a low barrier-to-entry Velocity Based Training device. It enables lifters to track the velocity of barbell (or otherwise) exercises to they can do velocity based autoregulation. This data has been used for decades by high level athletes and has yet to trickle down to the average lifter because of a perceived lack in demand. We disagree with that perspective and are dedicated to supplying athletes in strength sports with the same level of technology that athletes in other sports enjoy.

Each Rev 1 device measures average velocity that has been validated against the best technology in velocity tracking. It also has the ability to display peak velocity, but that data has not yet (at this date) been validated. It also measures the duration of each lift in seconds, the total range of motion of each lift, and the spot at which you achieve your peak velocity (in %). With successive firmware and software updates, OpenBarbell will earn more and more features that we will include in this live document.

Frequently Asked Questions

Back to Table of Contents

Basic Info

How much does OpenBarbell cost?

We are trying our best to keep the price low enough to allow the amateur lifter to enjoy the benefits of Velocity Based Training. At the same time, we're balancing unit costs and the amount of time spent on our part designing and assembling small batches of these units. That being said, we are offering OpenBarbell for sale at $199, an order of magnitude less expensive than comparable devices.

When will OpenBarbell be released?

OpenBarbell will be released on our webstore on Sunday, February 21st at 8:00 PM Eastern! They will go fast, so we recommend you keep an eye on the OpenBarbell countdown here and on the home page.

Does my device have a warranty?

The Squats and Science OpenBarbell is unlike most consumer devices available for purchase. It was made by a couple engineers who were fed up with the lack of accessibility for advanced training tools and decided to solve the problem themselves. That meant making something that works quickly and at low cost. Although we would love to continue to support our devices as long as you own them, we will only be making these in small batches and therefore unable to replace parts, dedicate a service team or absorb the costs of return shipping. We will however support each and every device when it arrives on your doorstep, and if there are any issues you can ship it back to us to be repaired or we will give you a full refund.

OpenBarbell, like the name suggests, is also totally open source and Arduino compatible. Normal warranties prevent users from hacking their devices, but we encourage it. We do not wish to preclude you from modifying your device and we hope you have the ingenuity to create functionality that the community can take advantage of.

That being said, we do plan on helping our owners wherever we can. Any questions you have about your device can (or may already) be answered in the Owners forum. If the forum doesn't help and you're feeling frustrated you can also send an email to the dedicated account rep1support@squatsandscience.com. This service will never expire and as long as we have fingers (and money to pay for hosting) we will be replying to your forum posts.

What does OpenBarbell do?

Very simply, OpenBarbell measures the position and velocity of an object in one dimension. This capability allows a lifter to utilize VBT (Velocity Based Training) to autoregulate their exercise routine. Autoregulation is a fancy way of saying you use the most current information about how strong you are to determine what you do at the gym that day. This type of training has been shown to be incredibly effective at both executing long term training goals and planning maximum effort attempts in the same day.

How do you use OpenBarbell?

Coming soon!

Technical Questions

I'm getting funky battery readings, is that alright?

OpenBarbell is made primarily by two engineers. In order to get these devices out in a reasonable amount of time, we decided against doing in-house battery conditioning. What that means is your OpenBarbell needs to learn its battery over the course of the first few charge and discharge cycles. We highly recommend you charge it until full as soon as you get it, and let it discharge until 2-3% without letting it die. You'll notice it has much more consistent battery readings, and will appear to last much longer.

What are OpenBarbells dimensions?

80mm (width) x 90mm (height) - Approximately.

What's under the hood?

OpenBarbell is powered by a Nordic nRF51 series ultra low power SOC. This system is a combination of a 2.4 GHZ Bluetooth transceiver and a low power 32 bit ARM Cortex -M0 core. This package is mounted onto a board developed by RF Digital called the RFduino, which is Arduino compatible and FCC Module Certified for use in consumer electronics.

What are the maximum and minimum velocities?

The following are theoretical numbers from our experimentation. We will likely do further investigation and will post them here.


The maximum velocity can be answered in a few different ways. If you wanted to know what the fastest barbell lift is that it can track, the answer is ALL OF THEM! In our testing we haven't been able to approach a skipped reading or measurement with any barbell lift, no matter how strong our subject is an how light the weight is. We can be relatively sure of this because, our velocity code runs in what's called an 'interrupt', which checks the encoder at a rate close to the clock speed (16 MHz, or 16 million times per second). The bottle neck is how fast it can crunch the numbers after the interrupt occurs, and by comparing how many times we get in the interrupt vs. how many times we crunch the numbers, we can tell when reps are missed.

If you want to know how fast you can pull the string out of the device, first I would say please don't do anything you would regret, then I would say we have pulled the string as fast as 5.71 m/s average velocity and 12.62 m/s peak velocity. The fastest lifts I've ever seen are hovering around 2 m/s average velocity. The bottleneck would likely be the mounting point of the spring and the axle, so if you were to attach it to a bottle rocket or an SR-71 Blackbird that's where we're guessing it would fail first. We've tried and failed to do it with any of our humane means.


The minimum is a little more straightforward, although a bit mathematically involved. Let's pretend we're coaching the worlds smallest lifter. His bench ROM is incredibly short and he has been training for decades, carefully refining his technique becoming the worlds slowest lifter.

Our hardware calculates velocity approximately every 2.8 mm. Velocity being distance over time, the smallest possible distance you can travel would lead to the slowest possible velocity. Coincidentally, our tiniest lifter in the world has a bench ROM of 2.8 mm.

Our ARM Cortex M-0 processor has a time-based interrupt that is constantly counting upwards in microseconds (millionths of a second). Because of the limitations of a 32 bit unsigned long variable, the number rolls over every 70 minutes and starts counting from 0 again. Since the odds of you starting and ending a rep at that exact time are incredibly slim, we did not write code to fix that fringe case. That means the maximum time we can do one rep would be about 70 minutes. That happens to be the longest attempt our World's tiniest lifter has ever accomplished.

A little bit of math later and we've calculated that the tiniest lifter in the World has maxed out our device at an astonishing 0.0000006667 m/s. That is roughly the equivalent of traveling the distance of one wavelength of red light every second.

How accurate is OpenBarbell?

There are two metrics that are important when talking about the quality of data you get from OpenBarbell. Those are accuracy, and precision. Accuracy is how close our readings are to real-world velocities, which we discern from lab grade velocity measurement devices. Although accuracy is very important, we often get the argument that precision is even more valuable. A precise device would produce readings that are always consistent with each other, allowing you to compare lifts to those done in the past and future, which is vital for autoregulation.

OpenBarbell is both very precise and incredibly accurate. We have preliminary results from measurements made against the Tendo device, OptoTrak optical position sensing device, precision micrometers and super-high accuracy industrial encoders. Our readings show that we have the capability to reproduce real-world velocities very consistently, with R-values above 0.999 and accuracy hovering around 98-99%. Don't take our word for it. Dr. Mike Zourdos at Florida Atlantic University is currently conducting a validation study on the device with the results to be published later this year, or early next year. We will also publish official results of our own test soon as well.

How long does OpenBarbell last on a charge?

With our real-world testing, we are currently estimating that, using your device's energy economically, it can be trained with every day and last about a month. With a normal training schedule it could last even longer than that. The lifetime of the battery should be great as well, since that is dictated by number of charge cycles and there can be as little as 10 a year!

Please keep in mind, personal use can vary. If you tend to leave your device on between workouts you can kill the battery in a matter of days. If you turn it off between sets it will last much, much longer.

What's the maximum displacement?

The maximum string displacement is under 9 ft. In real world scenarios, that means a lifter about 6'6 can do an overhead press with a close grip and only have a few inches to spare. If you're very tall, tread with overhead work carefully in the beginning. If you're doing presses you can mount the device higher off the ground. If you're doing Olympic Lifting you can mount it on a few extra plates until it's just below the bar, and be careful not to run off the platform. If you have a habit of doing that, we will be developing a magnetic attachment that will release if pulled too far. Check our store for that in the future!

How much resistance does this add to the bar?

OpenBarbell adds up to 1/3 lb to the bar. That is when pulling hard at close to the extent of the string length. This is consistent with other draw-string based devices.

How does my device work?

Coming soon!

My device is acting weird while plugged in. Is it broken?

It's perfectly fine! OpenBarbell is chock full of peripherals so we needed to use pins for multiple purposes. Two pins that are grounded while the MicroUSB are plugged in are vital for the devices functionality.

We understand this may be inconvenient, but we've designed it to charge fast and last long, so hopefully it won't be so bad!

Servicing and Repair

What happens if a part breaks or malfunctions?

If your item breaks or is in need of a specific part, you have a couple of choices. OpenBarbell is totally open from head to toe so from day one you have the ability to modify, improve, or fix your own device. Search the forum or write a post and we will instruct you on the best course of action. If it turns out we have the ability to supply a spare part or can fix it ourselves, you can send the unit to us and we will fix it at no cost (but we cannot cover the shipping). Since the device is also totally open source, we hope others who may be more technically inclined can pitch in to help others in case of VBT emergencies.

What happens if my string breaks?

OpenBarbell is made with a very durable half millimeter Kevlar string. It has been tested for almost a year in these devices with very little signs of wear. That being said, we know somebody out there will put the string through the gauntlet so we installed a few fallback solutions.

A common area of wear for the string is at the top where it rubs on the bar. If you see it getting precariously thin, you can cut it off and tie the bar clip lower. There are a few extra turns of string on the spool, so you can unfurl a turn or so and you won't lose any string travel. There will be a tutorial for this soon!

If you need to restring the device, the entire center assembly comes off and you'll have access to the spool. A tutorial will be available for this as well.

Are my magnets supposed to spin in place?

Don't worry, nothing is wrong with your unit. In our effort to allow easy disassembly, we used screws at the bottom that do not have nylon locking nuts. They'll stay put, but over time they will move around by a fraction of a turn. This doesn't impact the units ability to maintain its magnetic attachment to a ferrous base object. We encourage owners NOT to tighten these bolts, as you can over-tighten them and cause the top part to break.

How resilient is OpenBarbell?

We hope you've noticed how sturdy OpenBarbell feels, but we hope you also know that this device is hand made by the Squats & Science team and isn't your ordinary consumer device. It was built to be kept in your gym bag and will last as long as you keep good care of it. Think of OpenBarbell as a fine hand made sports car. It's beautiful, high performance and rock solid but you probably shouldn't go off-roading with it.

Why is my spindle wobbly, and is that OK?

We evaluated several manufacturing techniques for OpenBarbell. The laser cutter turned out to be our best bet for a high accuracy low cost device. The problem with laser cutters is the optics create a conical beam for cutting, not the super straight laser beam people imagine.

Laser beam cutting edge. This causes the edge of some parts to be a little crooked, and moving parts to be a little wobbly. We evaluated this fact when deciding to use laser cutting for our manufacturing and it doesn't effect the accuracy or consistency of our device in any way. For more information about how our device works, see the "How does the device work" question.

Hacking your device

How do I hack my device?


We're glad you asked! OpenBarbell is Arduino compatible, has a totally open source design and a completely open source app (if it's not released, we're working on it!). That means there are a ton of ways you can tinker with your device! The best place to start is the V0.25 Instructions, which will show you how the meat of an OpenBarbell is made.

If you're looking to hack the firmware head over to the RFduino Readme on GitHub to get started. You can play with the velocity detection algorithm, send more robust velocity data to the app, display all kinds of information to the screen, program visual cues at certain points of the lift, create a visual metronome for tempo squats, the opportunities are endless!

If you're looking to hack the app, which is where we think the most exciting features can be implemented, check back here soon for more information as we are deep into development as we speak. If you think you can help the team we'd love to hear from you, send us an email at contact@squatsandscience.com.

Does this stuff void my warranty?


Remember, OpenBarbell doesn't have a standard warranty. It comes with very limited support (outlined above) and a 14 day return policy. That being said, I can split this answer into two sections.


If you decide to modify the hardware and break something, we will do our best to make you replacement parts (at close to cost) but we cannot guarantee you parts or fix your device for you for free. We build the device to last, but we can't compensate for your possible lack of DIY skills. If you NEED to hack the hardware or manufacture your own replacement parts, our housing and PCB CAD files are all available via our GitHub page.

Firmware & Electronics:

Again, we aren't sure how good your hobby electronics skills are, so we can't guarantee our board can make it through bouts with your soldering iron. Upgrading your battery, adding LED's, installing a buzzer are all things that we would not be able to support if it were to go wrong. The same goes for firmware, if you are clever enough you can probably find a way to burn out your PCB via firmware change. We will however support any upgrade to official Squats & Science firmware updates. If you verify that your issue was caused directly because of a firmware update we will do our best to correct the situation.

How do I update my firmware?

Updating firmware is a little involved, and not for the faint of heart. If you're familiar with Arduino and can navigate a breadboard it isn't too bad. It requires the following parts:

One OpenBarbell

One MicroUSB Breakout Board

One RFduino USB Shield (or other FTDI board)

One Breadboard

Jumper Wires

  1. Follow the guide here (scroll down) to both install the Arduino IDE (if you haven't already) and RFduino compatibility.
  2. Grab the latest firmware from our GitHub.
  3. Download the OpenBarbell required libraries and paste them into your Arduino libraries folder.
  4. Put together your breadboard
    1. Wire the MicroUSB breakout to the RFduino USB Shield in the following configuration (MicroUSB Breakout --> RFduino USB Shield) (see the RFduino USB Shield schematic here)
      1. D+ --> GPIO0
      2. D- -->GPIO1
      3. ID --> RESET
      4. GND --> GND
      5. VCC --> +3V
    2. Plug the RFduino MicroUSB Shield into your computer, go into the Arduino IDE and navigate to Tools --> Board and choose "RFduino", and select your COM port (you may need trial and error to pick the correct one).
    3. Plug the MicroUSB Breakout into your OpenBarbell.
  5. Upload code!

Getting Started

Back to Table of Contents

Whats in the box...

1. One official Squats & Science OpenBarbell unit

2. One MicroUSB cable for charging ONLY (you can pair it with your cellphone charger)

3. A thank you letter from us, including the unit number of your specific device.

4. One lanyard for mounting onto the bar

5. The hopes and dreams of two guys who just want you to be a better you.

What next...

  1. Read our care instructions! It's imperative that you treat your OpenBarbell the way you'd like it to treat you. There's information about safe OpenBarbell placement during your workout, transporting your device, battery management, device maintenance, etc.
  2. Using your device:
    • Using your device is simple. As you can see in the instruction card included with the device, all you need to do is turn it on, anchor it to a plate or rack, attach it to the bar, and lift!

Begin Set...

On the begin set screen, you can see the rep number you're on in the top left (it will always be Rep#: 1 on the Begin Set screen), the time since your last rep in the top middle, and the percentage of battery remaining in the top right. This is called the System Tray and will almost always be present for your device.

After you complete your first rep, you'll default to the Power Mode (more on that in a second). The power mode displays the System Tray at the top, Average Velocity for that rep nice an big in the center, Peak Velocity at the bottom left and Range of Motion of the rep on the bottom right. As you can see, the rest timer at the top center resets after each rep is performed.

Olympic Mode

If you'd like to switch to a different data set more suited towards Olympic Weightlifting, press and hold one of the buttons for three seconds to switch over.

As you can see in this mode, Peak Velocity is displayed prominently in the center of the screen, with the duration of the lift at the bottom left, and the spot at which you achieved your peak velocity for that lift in the bottom right. You can switch from Power Mode to Olympic Mode by holding either button for three seconds, and it will display the same rep data during each mode, for a total of five metrics for each lift.

Holding down a button for three more seconds returns you to Power Mode.

Invert Mode

Holding down both buttons for three seconds will send you into Invert Mode. Invert Mode is used if you would like to mount your device up-side down above your exercise implement. This essentially tells the device to pay attention to the opposite direction, since while inverted we care about the velocity coming towards the device, instead of away. <a href="http://squatsandscience.com/wikibarbell/openbarbell-wiki/openbarbell-v1-0/care-instructions/">PLEASE READ OUR CARE INSTRUCTIONS BEFORE USING YOUR DEVICE WHILE INVERTED</a>.

Invert mode displays the same data as non-inverted mode, but you can now accomplish reps with the device above you.

Another three second hold turns off Invert Mode.

Deleting Past Set

Tapping the right button until you reach the end of your set will display the 'Delete Past Set' screen. If you chose to tap the right button once more, you will remove all previous rep data from device memory. Tapping the left button will preserve your rep data.

Interacting with the Device

Back to Table of Contents

On the hardware side, OpenBarbell has two input buttons that you can use to toggle between reps, reset rep memory, wake the screen, switch between Power Mode and Olympic Mode, and invert the device. It also has a power switch for (obviously) turning on and off power supply, a MicroUSB port for charging and uploading firmware, an OLED display for displaying device functionality to the user, and a string/string hook for measuring barbell velocity.



See screen shots of the UI in the Getting Started section.


Interpreting the LEDs

Back to Table of Contents

At rest, the green LED indicates the device is on, will blink every 2 seconds to catch your attention if it is inadvertently left on. The purpose of this LED can be modified by playing with our Arduino Code - https://github.com/seminolemuscle/V0.24 - for whatever you'd like.

The red LED indicates the battery is being charged. When the LED turns off that means your battery is fully charged. If the LED is showing a less bright red than usual, don't worry. That's a bug with the LiPo battery charging chip and can usually be fixed by unplugging your device and plugging it back in. The red LED cannot be changed via firmware as it is connected directly to the LiPo charging chip and not the RFduino microcontroller.


Battery Life and Charging

Back to Table of Contents

The Squats and Science OpenBarbell is equipped with a 1000 mAh battery. Let's put that in perspective.


FitBit Flex: 50 mAh

iPod Nano: 220 mAh

Moto 360 Smartwatch: 300 mAh

iPhone 6S: 1715 mAh


We wanted to make sure you didn't have to worry about charging another device every day. In preliminary testing we've operated the OpenBarbell for the equivalent of weeks of training sessions, theoretically much more if battery is conserved by shutting the device off between sets. With a standard phone charger, the device can charge from nearly empty to 40%+ in minutes, and can charge completely within about two hours. We are currently testing our battery capacity in terms of actual reps completed and will publish our findings here when they're available.


Battery Study Findings:

The following are results we've found when using a device that has had the battery conditioned (charged and discharged) several times, giving us more consistent results. Each test has been a traditional workout session consisting of about 50-60 total reps over the course of 1.5-2 hours, without a Bluetooth connection and keeping the device on between sets. The results vary depending on the current state of battery charge.









As you can see, there is a general trend where the lower the current battery level is at the beginning of the workout, the longer it seems to last. We're estimating on average a lifter can get 10 uses per month if used in the conditions stated above.


Battery Care

Battery care is essential for any consumer electronics device. We recommend you let your battery experience nearly a full range of its capacity every charging cycle. Let it discharge down to less than 5% and charge it until it is full, rinse and repeat. Try very hard not to let your battery die, as it can impact longevity and the function of its internal circuitry. You can feel free to use your cellphone charger for this device, and we have tested it with chargers that go up to 2.0A supply current (it will charge faster with chargers that have greater supply current).


If your battery is giving you fluctuating readings, or rapidly reducing after it is unplugged do not worry. The batter fuel gauge chip has a learning period until it figures out your batteries habits, and it can sometimes be tricked by different chargers. It seems there is about a 3 charge cycle learning period until you can get consistent, predictable readings. Even then, there may be sudden drops in readings or it may not drop much at all during the same usage period.


We've added a blinking LED light to indicate when the device is left on. If you see this blinking light and you intend for your device to be off, it is an indication that you should turn off your device. Although OpenBarbell lasts quite a while, it can discharge a significant amount overnight as it consumes most of its current at rest.


Care Instructions

Back to Table of Contents

It's imperative that you care dearly for your brand new Squats & Science OpenBarbell. Your new velocity measuring device is not indestructible, in fact there are several ways you can destroy your brand new strength tool during your workout. Here's our attempt at a comprehensive list of ways you can do just that.

Dropping weight on your device

It's very possible to drop a barbell or other implement on your OpenBarbell since it can be located directly below your exercise equipment of choice. OpenBarbell was not designed to live through this event and will surely break into quite a few pieces if this were to happen. To avoid this tragic occurrence, try to place OpenBarbell in a spot under your implement that is not in immediate crushing danger. For a barbell, do not place the unit below the weights themselves, rather to the side where there will be clearance in the case where it is dropped. Please also make sure to keep the device as close to the same position every time you use it, preferably with the string completely vertical (but not directly under the weights!).


Crushing the string hook/cutting the kevlar string

In our tests we were able to both break the nylon string hook as well as cut the kevlar string by pinching it between sharp knurling and a metal rack hook. To ameliorate this occurrence, best cheap web hosting we shipped each unit with a fabric lanyard that can be looped around the bar and hooked onto the device. This way, the string can still be mounted inside the barbell collar for barbell exercise so it does not need to be repeatedly removed between weight changes. If you do not like this mounting configuration and would rather mount it directly onto the bar without the lanyard, we recommend you do so outside of the weights to reduce the chance of wear and tear due to knurling and contact between the bar and rack.

Transporting OpenBarbell

OpenBarbell is meant to live in your gym bag, but it isn't a pair of squat shoes or wrist wraps. It should be kept away from heavy items like metal belt clips or wooden shoe soles, and should not be dropped onto the ground from any height without cushioning. A simple solution would be to put it in a side pocket of the gym bag that does not extend to the bottom of the bag, keep it in a dedicated draw string bag inside your gym bag, keep it inside a (dry) knee sleeve, or even toss it in a dedicated sock or coozie.

Battery maintenance

Make sure to see our Battery Life and Charging section of the user manual. To summarize, we recommend not using a MicroUSB charger above 2.0 A supply current. We also do not recommend fully discharging your device, or leaving it on the charger for very elongated periods of time. To condition your battery, make sure to fully charge your device each time and discharge down to about 5% before recharging. Keep OpenBarbell away from temperatures above 110 degrees F or below 32 degrees F for extended periods of time.


OpenBarbell was designed to be fully serviceable. We understand parts in the device might need care every once in a while, but we cannot guarantee that skills of our customers in assembling and disassembling their device. That is why we cannot support any problems that occur due to our customers fixing their device themselves. Any issues found upon receipt of the device can be fixed by us for free within 14 days of the product arriving at your doorstep. If any disassembly is required after that, please contact us and we will work out an amicable solution to your repair needs.

Safe magnetic mounting of OpenBarbell

It is possible to damage OpenBarbell if it is carelessly mounted onto a hard ferromagnetic surface (a metal plate or rack). We recommend gently placing the device down to reduce the odds of a stress fracture in the acrylic housing.

If mounting the device in invert mode, it is very important to make sure it has a very secure mounting spot for all four magnets, and that it is not being pulled by the string at an odd angle as to introduce a lateral force that can remove one side of the device from its mounting position. Unless that is achievable, we do not recommend inverting your device.

Caring for the Housing

The exterior and many of the internal parts of the device are made from a cast Acrylic - also known as Plexiglass, Lucite and Acylite. With proper care this device should be able to last for years to come, unlimited reseller hosting however acrylic is susceptible to scratches and abrasions as well as damage from some chemicals.

Most of the superficial dirt and grime that the OpenBarbell will pick up can be wiped away with a mild solution of soap, water and a rag. This device is by no means water-proof but will withstand a very lightly damp rag (just stay away from the buttons, usb, and switch!). If you want to do some heavier cleaning then we have to take some precautions. The best way to clean cast Acrylic is with products specifically designed for cleaning cast Acrylic such as Novus No. 1 or Brillianize. It is important to NEVER use cleaning solutions with Ammonia (such as Windex or Formula 409), gasoline, denatured alcohol (paint thinner), carbon tetrachloride, or acetone! All of these product will cause the Acrylic to Craze with minute cracks.

Loading Code

Back to Table of Contents

The purpose of this brief tutorial is to demonstrate how to upload code to an OpenBarbell unit made at home, or modified by an owner. Before we begin, please read our Warranty


To load code on your device you need a few things:

  1. Female to male USB cord
  2. RFduino USB Breakout Board (or another FTDI Breakout Board
  3. MicroUSB Breakout Board (or you can find one online that requires no soldering)
  4. Breadboard
  5. Female to male breadboard jumper wires


Essentially what we're doing is connecting the RFduino on your device to an FTDI breakout board. We routed the appropriate pins to the spare microUSB pins on the board for easy access, but don’t go plugging it into your computer. We need to get those pins hooked up to your FTDI board to convert it to a language your computer can understand. You need 5 pins to program an RFduino, GND, VCC, TX, RX, and RESET. TX and RX are hooked up to pins GPIO0/1 so they are routed to USB pins D+ and D-. The most convenient way to access these pins is to split a USB cord, but most USB cords do not utilize the ID pin and therefore do not have a 5th wire. If you do not have a 5 pin microUSB cable, you need a microUSB breakout board to have access to these pins. See the schematic below for reference.


VUSB above is the vertical USB port on the top of OpenBarbell. This will match with the labeled pins on the microUSB breakout board. Those pins need to be routed to the same pins on the RFduino USB Shield.


Once that is set up, you should head over to the Getting Started page of the Rfduino Github. That will walk you through downloading and setting up an RFduino compatible version of the Arduino IDE. You can run a default RFduino example to blink the OpenBarbell LED on pin 2. If you can get that to work, you're ready to download our code and libraries. Several of them are slightly modified to fit our exact needs, or to fix a few issues we found along the way. You can find the modified libraries here. Place them alongside your other Arduino libraries in your installation folder.


Last but not least, grab our firmware off of GitHub and upload it onto your device. Our latest revision can be found here.


We'll be writing a more detailed calibration method in the near future, but for now the following should suffice. If you're re-loading firmware onto a device you purchased, contact us for your tic length, we will give you a very accurate number you can use in your code for your specific device.


  1. Place a caliper above your device (MINIMUM 12 inch caliper, the longer it is the more accurate your calibration will be) and have the string follow the caliper precisely. Do this several times around the maximum caliper displacement and record the ROM from the device, and the displacement from the caliper.
  2. We set the default tic length (string displacement between encoder readings) at 2.667 mm. Take each ROM you recorded and divide it by the tic length, then round to the nearest whole number. This represents the number of encoder readings.
  3. Next, divide each caliper displacement by the corresponding number of encoder readings. This will give you a new tic length. Average each of your recorded tic lengths (since you did the measurement several times) and this will be your new ticLength variable on line 56 of our code.

That's it! Go lift some weights, and make sure to sign up for Squats & Science Velocity Tracking so we can help you optimize your training!

Bluetooth Communication

Back to Table of Contents

What really unlocks some great potential with the OpenBarbell is the ability to take the information off the unit for use online or in an app and to set configurable values. In order to accomplish this the device utilizes BLE (Bluetooth Low Energy) to talk with a paired phone.



(OpenBarbell --> Phone)

By default the device will transmit limited information to a paired phone at the end of a rep. All of the information calculated on the device will be sent but the raw times between the encoder ticks will be compressed. The limitation imposed on this transmission is the amount of time necessary to send the requested data and the battery drain resulting from continuously broadcasting via bluetooth. In order to ensure we do not miss a rep and/or to ensure that we are not transmitting at the start of a rep we have kept default transmissions to a minimum.

The following is a breakdown of how the data is transmitted to the phone in the order that the phone receives it


This is a unique number sequence that will signify to the app (and to the person looking at the data) that the rep has begun. Data transmission is then held until the rep is complete.

Rep #

Once the rep is complete there will be a string of data coming to the phone. The first piece of data coming is the "Rep #" - this number corresponds to the "Rep #" displayed on the unit.

Avg Velocity

This is the average velocity during the rep as calculated on the device.

ROM (Range of Motion)

This is the distance traveled, in mm, through the rep

Peak Velocity

This is the peak instantaneous velocity during the rep as calculated on the device.

Peak Velocity Location

This is the location, expressed as a percentage, at which the peak velocity occurred. For example, if the peak velocity location was "63%" with a ROM of "1000 mm" then the peak velocity location occurred at 63% of 1000 mm or 630 mm into the rep.

-9999 (Start compression data)

This is a unique number sequence to signify that the "Compression Data" transmission will now begin

# of ticks counted

As discussed above, by default, only a sample of the total lift will be sent over to the phone to conserve transmission time and battery life. The "# of ticks counted" corresponds to the frequency at which we log the data to be sent.

For example, if this said "5" then that would mean every 5th tick of the encoder we would save the value - as in...

Tick #1 - Not Saved, Tick #2 - Not Saved, Tick #3 - Not Saved, Tick #4 - Not Saved, Tick #5 - Saved, Tick #6 - Not Saved, Tick #7 - Not Saved, Tick #8 - Not Saved, Tick #9 - Not Saved, Tick #10 - Saved, Tick #11 - Not Saved, Tick #12 - Not Saved, Tick #13 - Not Saved, Tick #14 - Not Saved, Tick #15 - Saved, Tick #16 - Not Saved, Tick #17 - Not Saved, Tick #18 - Not Saved, Tick #19 - Not Saved, Tick #20 - Saved, etc....

Then when the values are sent over they are sent in order that they were saved. So for the above example of "5 ticks" the string of compressed data would be .... Tick #5, Tick #10, Tick #15, Tick #20, Tick #25, etc...

In order to the get the compression ratio, divide one by the "# of ticks counted". So, continuing with our above example of 5, the compression ratio would be 1/"# of ticks counted" or 1/5 ticks would be counted or a net result in 20% of the available data being sent.

Precision of Compressed Values

Another way we compress the data being sent is to utilize all the available size in the data types being sent to the device.

For example, say we wanted to send two DTs worth of information to the device. DT1 has a value of "100 ms" while DT2 has a value of "140 ms". We could send the first DT, DT1, followed by the second DT, DT2 - that would look something like this...





This would be fine and it would work for such a short string but when we start having to send over many hundreds of values it can really slow things down. We can save on transmission time by compressing both DTs into one message...here's the underlying principle...

The data type that BLE uses to send its data is called a Floating Point Number - Here's a good write up on Floating Point Numbers from Wikipedia. In it's simplest embodiment, the floating point number can represent a value with 8 locations for digits where we can choose to put the decimal place wherever we would like within/outside those 8 locations. See the picture below for an explanation...


As you can see above, this data type can be used to represent very large numbers (1,075,270) as well as very small numbers (.34375). However, we should also notice that regardless of the value of the number (i.e. 100 or 1,075,270), all 8 positions of the data type will be utilized regardless if there is meaningful information in those positions. One way to think about this is by placing leading zeros in front of the values. For example, 100 is represented as 00000100 and 1,075,270 is represented as 01,075,270. Thus, a value of 100 and 1,075,270 have the same size in terms of the amount of data being sent over bluetooth. So this brings us to how we might utilize this information to compress the data via bluetooth.

If we go back to our original example of DT1 and DT2 (100 ms and 140 ms, respectively) now we know that it will actually look like this...


MESSAGE 1 : 00000100

MESSAGE 2: 00000140


Let's combine both of those numbers into one number by dividing the second number by 10,000 (to shift the decimal places over 4 values) and add it to the first. Now we'll have DT1+DT2/10,000 = 100 + 140/10,000 = 100 + .0140 = 100.0140. And voila, we've turned two numbers into one number and we can easily separate them as well. Let's see what his new transmission might look like...


MESSAGE 1 : 0100.0140


Just for one more example, lets compress the following string of numbers and send them over... 123, 52, 5124, 62, 462, 688, 123, 2, 4123,6252 ... if we apply the same compression above to these values then we would get the following message...


MESSAGE 1 : 0123.0052

MESSAGE 2 : 5124.0062

MESSAGE 3: 0462.0688

MESSAGE 4 : 0123.0002

MESSAGE 5: 4123.6252


FANTASTIC! We did it, right?! Yeah, of course we did! So we've been talking a lot about "compression" but we still haven't touched on what the "Precision of Compressed Values" is...for that we have to did just a little bit deeper to understand.

One of the main things measured on the device is the amount of time in microseconds between "ticks" of the encoder. Yeah, microseconds, as in there are 1 million of them per second. As you can imagine that number gets very large very fast - this number can actually get up to 4,294,967,296 which is ~4.3 trillion microseconds or about ~4,294 seconds or ~72 minutes.

For a realistic scenario, let's say the average speed of a 1 meter ROM lift is .75 m/s. Some simple math tells us that the time of the lift is about 1.33 seconds [(1 meter)/(.75 meter/second)=~1.33 seconds]. We can do some more math to calculate how many ticks occurred during that lift since we know there are roughly 2.667 mm/tick to figure out there was roughly 374 ticks [1 meter = 1000 mm --> (1000 mm)/(2.667 mm/tick)= ~374 ticks]. If we take the amount of time for the lift, 1.33 seconds, and divide by the number of ticks, 374, we will get to an average length of time between the ticks of, (1.33 seconds)/(374 ticks)=.00355615 seconds/tick or (if we multiply by 1,000,000 microseconds/second) about ~3556 microseconds/tick. Now that we know the average dt between ticks lets pick some numbers around that average for a sample transmission - Let's say 3550, 4267, 3000, 3687

If we apply the above compression the data transmission would look like this...


MESSAGE 1 : 3550.4267

MESSAGE 2 : 3000.3687


This all seems great until we consider what might happen for a lift with an average velocity of .25 m/s with a 1 meter ROM. If we do the same math as above we find (1 meter)/(.25 meter/second)=4 seconds --> (4 seconds)/(374 ticks)= ~.01069519 seconds/tick or roughly 10,695 microseconds/tick. Now let's pick some numbers around this average time - Let's say 11,212, 10501, 9,632, 10729. However, there's a problem. Now that we have 5 digit numbers, we wouldn't be able to fit it into the above compression method as there are only 8 placeholders for digits and two 5 digit numbers would require 10 placeholders. What to do? Well, we can finally get to the whole purpose of this section, the "precision of the compressed value".

While these 10 digits of precision are necessary for the device to do its job correctly (as in the number of digits in 4,294,967,296), we may be perfectly fine in shaving the last digit of precision - as in the difference to us of 525,967,283 microseconds vs 525,967,280 microseconds is not very much - we're literally talking about a rounding error there of 3 microseconds or .000003 seconds. For this reason the device will, by default, divide all of the DTs (time between ticks) by "10" (the default "precision of the compressed value") before sending them over. So if we take the above example numbers for the .25 m/s lift - 11212, 10501, 9632, 10727 -and divide them by 10 (and round to the nearest integer) we get values that we can fit into our compression scheme - 1121, 1050, 963, 1073 - Thus the transmission for the .25 m/s lift would look like this...


MESSAGE 1 : 1121.1050

MESSAGE 2 : 0963.1073


If we now apply this principle of "precision of the compressed value" to the .75 m/s lift we see that it would actually be sent over like this...


MESSAGE 1 : 0355.0427

MESSAGE 2 : 0300.0369


So what's the trade off here? In order to, by default, allow some of the slowest lifts to fit into the compression method we have to round the last digit of the time. This means that for very fast lifts, with very small DTs, we lose some precision. But the good thing is that if you want that last digit of precision, you can have it, just set the "precision of the compressed value" to 1 and the full microsecond number will come over. In any scenario there exists the possibility of generating a number with over 4 digits, even after you apply the "precision of the compressed value" divider - in that case the number is sent over by itself.

So, for one final example - if we want to send the following values... 1963, 1938, 19381, 39103, 739173, 9381, 1912...the transmission would look like this...


MESSAGE 1 : 1963.1938

MESSAGE 2 : 00019381

MESSAGE 3 : 0039103

MESSAGE 4 : 00739173

MESSAGE 5 : 9381.1912



This is a unique number sequence to signify that the "Compressed Bulk Data" transmission will now begin


This is the compressed bulk data - this will be a snapshot of some or all of the DTs between ticks - see Precision of Compressed Values for more details. Although this is written as "11." this section could be anywhere from 1 message long to hundreds if not 1000+ messages depending on the settings of the user.


This is a unique number sequence to signify that the "Compressed Bulk Data" transmission has completed

Battery charge

This will send the battery charge of the device to the phone to keep tabs on the device.

(Phone --> OpenBarbell)

Note - All transmissions to the OpenBarbell must be done in HEX format - since we don't normally think in base16 here's a helpful site to convert DECIMAL notation (base10 - what you would interact with on a daily basis) into the proper format (HEX) to send http://www.binaryhexconverter.com/decimal-to-hex-converter

Minimum Rep Threshold (01 XX)

Interaction: 01 XX where XX = The "minimum rep threshold", in mm, in HEX notation

Explanation: The minimum rep threshold is the minimum distance, in mm, that will be counted as a valid ROM.

Range: XX can range from 00 (0 mm) to FF (255 mm)

Default Value: 150 mm

Example Transmissions:

  • 01 00 => (Minimum Rep Threshold) (00 in Hex = 0 in Decimal ==> 0 mm)
    • In this example we have set the Minimum Rep Threshold to "0 mm" which will count any ROM as a valid rep as any rep will have a ROM greater than 0 mm
  • 01 64 => (Minimum Rep Threshold) (64 in Hex = 100 in Decimal ==> 100 mm)
    • In this example we have set the Minimum Rep Threshold to "100 mm" which will not allow any rep with a ROM less than 100 mm to be counted as a valid rep
  • 01 C8 => (Minimum Rep Threshold) (C8 in Hex = 200 in Decimal ==> 200 mm)
    • In this example we have set the Minimum Rep Threshold to "200 mm" which will not allow any rep with a ROM less than 200 mm to be counted as a valid rep

Power/Olympic Mode Select (02 XX)

Interaction: 02 XX where XX = "Mode Select" in HEX notation

Explanation: Use this function to switch between Power Mode and Olympic Mode. In order to switch between the two modes the full range of 00 to FF is divided into two sections.


Power Mode - XX can range from 00 (0) to 09 (9) Olympic Mode - XX can range from 0A (10) to FF (255)

Default Value: n/a

Example Transmissions:

  • 02 00 => (Power/Olympic Mode Select) (00 in Hex = 0 in Decimal ==> Power Mode)
    • In this example we sent over a value of 00 (HEX) or 0 (DEC) which falls in the range of 0-9, thus we have selected Power Mode
  • 02 07 => (Power/Olympic Mode Select) (07 in Hex = 7 in Decimal ==> Power Mode)
    • In this example we sent over a value of 07 (HEX) or 7 (DEC) which falls in the range of 0-9, thus we have selected Power Mode
  • 02 0A => (Power/Olympic Mode Select) (0A in Hex = 10 in Decimal ==> Olympic Mode)
    • In this example we sent over a value of 0A (HEX) or 10 (DEC) which falls in the range of 10-255, thus we have selected Olympic Mode
  • 02 AC => (Power/Olympic Mode Select) (AC in Hex = 172 in Decimal ==> Olympic Mode)
    • In this example we sent over a value of AC (HEX) or 172 (DEC) which falls in the range of 10-255, thus we have selected Olympic Mode

Low Pass Filter Frequency (04 XX)

Interaction: 04 XX where XX = Low Pass "Filter Frequency", in hertz, in HEX notation

Explanation: In order to work with some of the mechanical properties of the device it is necessary to apply a low pass filter for accurate peak velocity values. Read more about this filter here: http://playground.arduino.cc/Code/Filters

Range: XX can range from 00 (0 hz) to FF (255 hz)

Default Value: 10 hz

Example Transmissions:

  • 04 00 => (Low Pass Filter Frequency) (00 in Hex = 0 in Decimal ==> 0 hz)
    • In this example we sent over a value of 00 (HEX) or 0 (DEC), this will set the filter frequency to 0 hz
  • 04 0A => (Low Pass Filter Frequency) (0A in Hex = 10 in Decimal ==> 10 hz (default value))
    • In this example we sent over a value of 0A (HEX) or 10 (DEC), this will set the filter frequency to 10 hz (the default value)
  • 04 AC => (Low Pass Filter Frequency) (AC in Hex = 172 in Decimal ==> 172 hz)
    • In this example we sent over a value of AC (HEX) or 172 (DEC), this will set the filter frequency to 172 hz

Compressed Transmission Settings (08 XX)

Interaction: 08 XX where XX = is a value in HEX notation that can either change the precision of the compressed values or the compression ratio

Explanation: In order to compress the data coming from the OpenBarbell there are two compression schemes. The first is to send only a certain ratio of the collected data (as in one out of every 5 or one out of every 10 pieces of data collected) while the second is round the values to one decimal place and remove the trailing zero (as in "12237" rounds to "12240" and is sent over as "1224"... this reduces the overall size of the data being sent over). When setting the RATIO the value sent is put over 1 (as in the ratio becomes 1/XX). When setting the PRECISION there are only two settings - rounding or full precision. Sending 08 FE will allow the rounding of the sent values to 1 decimal place while sending 08 FF will force full precision values to be sent. See the section above entitled Precision of Compressed Values for more detail.


XX can range from 01 (1) to FD (253) to change the RATIO OF SENT VALUES

XX can either be FE (254) or FF (255) to change the PRECISION OF THE VALUES

Default Value:

RATIO of sent values: 5 (This results in 1/5 of the values collected being sent)

PRECISION of sent values: FE (Rounded)

Example Transmissions:

  • 08 01 => (Compressed Transmission Setting) (01 in Hex = 1 in Decimal ==> Ratio of 1/1)
    • In this example we sent over a value of 01 (HEX) or 1 (DEC). Because 1 (DEC) is in the range of 1 to 253, this value will adjust the RATIO of sent values. A value of 1 in this case will make the ratio 1/1, or will force all values to be sent via Bluetooth.
  • 08 05 => (Compressed Transmission Setting) (05 in Hex = 5 in Decimal ==> Ratio of 1/5 (default value))
    • In this example we sent over a value of 05 (HEX) or 5 (DEC). Because 5 (DEC) is in the range of 1 to 253, this value will adjust the RATIO of sent values. A value of 5 in this case will make the ratio 1/5, or will only allow one out of every five values to be sent via Bluetooth.
  • 08 64 => (Compressed Transmission Setting) (64 in Hex = 100 in Decimal ==> Ratio of 1/100)
    • In this example we sent over a value of 64 (HEX) or 100 (DEC). Because 100 (DEC) is in the range of 1 to 253, this value will adjust the RATIO of sent values. A value of 100 in this case will make the ratio 1/100, or will only allow one out of every hundred values to be sent via Bluetooth.
  • 08 FE => (Compressed Transmission Setting) (FE in Hex = 254 in Decimal ==> Rounded Values)
    • In this example we sent over a value of FE (HEX) or 254 (DEC). Because 254 (DEC) is in the range of 254 to 255, this value will adjust the PRECISION of sent values. A value of 254 in this case will send over the default precision where the values will be rounded to the tens place and the trailing zero removed.
  • 08 FF => (Compressed Transmission Setting) (FF in Hex = 255 in Decimal ==> Full Precision)
    • In this example we sent over a value of FF (HEX) or 255 (DEC). Because 255 (DEC) is in the range of 254 to 255, this value will adjust the PRECISION of sent values. A value of 255 in this case will send over the full precision of the collected values with no rounding.

OLED Back Light Timeout (10 XX)

Interaction: 10 XX where XX = "OLED Back Light Timeout", in seconds, in HEX notation

Explanation: The OLED screen on the device is back lit to aid in viewing the display. This adjustment allows one to modify the time that the screen stays on before timing out.

Range: XX can range from 00 (0 seconds) to FF (255 seconds)

Default Value: 10 seconds

Example Transmissions:

  • 10 00 => (OLED Back Light Timeout) (00 in Hex = 0 in Decimal ==> 0 Seconds)
    • In this example we sent over a value of 00 (HEX) or 0 (DEC), this will set the back light timer to 0 seconds which will effectively mean that they screen no longer turns on - This may be helpful to conserve battery life when Bluetooth is being used.
  • 10 0A => (OLED Back Light Timeout) (0A in Hex = 10 in Decimal ==> 10 Seconds (default value))
    • In this example we sent over a value of 0A (HEX) or 10 (DEC), this will set the back light timer to 10 seconds (the default value)
  • 10 64 => (OLED Back Light Timeout) (64 in Hex = 100 in Decimal ==> 100 Seconds)
    • In this example we sent over a value of 64 (HEX) or 100 (DEC), this will set the back light timer to 100 seconds (or 1 minute and 40 seconds)

Status Check (40 XX)

Interaction: 40 XX

Explanation: Regardless of the value of XX, this will initiate a status check that can be called at any time to check several important values including a verification of set values from some of the other commands from the phone to the OpenBarbell. The readout from this status check should read as follows:

  1. Ratio of Values Sent
  2. Precision of Values Sent
  3. Slowest Instantaneous Velocity
  4. OLED Back Light Timeout
  5. Minimum Rep Threshold
  6. Tic Length
  7. Battery Charge
  8. Unit Number

Range: XX can range from 00 to FF

Default Value: n/a

Example Transmissions:

  • 40 00 => (Status Check) (00 in Hex = 0 in Decimal)
    • In this case the status messages will be read back
  • 40 0A => (Status Check) (0A in Hex = 10 in Decimal)
    • In this case the status messages will be read back
  • 40 64 => (Status Check) (64 in Hex = 100 in Decimal)
    • In this case the status messages will be read back

Slowest Instantaneous Velocity

Interaction: 80 YY where YY is a code with reference table below

Explanation: The slowest instantaneous velocity is set by the maximum allowable time (in microseconds) between "ticks" of the encoder. The slowest instantaneous velocity can be set any where from ~6.15E-08 m/s to ~.003 m/s or you can disable this filter (and all any instantaneous velocity) by sending a value of FF. See below for more information.

Range: YY can range from 00 (6.15371E-08 m/s) to FF (0 m/s)

Default Value: .01 m/s

Example Transmissions:

  • 80 00 => (Slowest Instantaneous Velocity) (00 in Hex = 0 in Decimal)
    • See below for more information. The slowest instantaneous velocity will be set to 6.15371E-08 m/s
  • 80 0A => (Status Check) (0A in Hex = 10 in Decimal)
    • See below for more information. The slowest instantaneous velocity will be set to 6.15371E-07 m/s
  • 80 64 => (Status Check) (64 in Hex = 100 in Decimal)
    • See below for more information. The slowest instantaneous velocity will be set to 0.001218435 m/s
  • 80 FF => (Status Check) (FF in Hex = 255 in Decimal)
    • See below for more information. A value of FF will disable this filter and allow any instantaneous velocity.

Further Explanation

In version 1.08 the default for the slowest instantaneous velocity is ~0.01 m/s however you can make that much, much slower (any where from ~6.15E-08 m/s to ~.003 m/s). Refer to the table below to see the corresponding number to send to get the desired slowest instantaneous velocity. Keep in mind that the chart below displays values in DECIMAL notation however all values MUST BE SENT IN HEXADECIMAL notation.

Full Table

For a full table of values to send to the device for a given velocity see SlowestInstVelocity Table

Setup At The Gym

Back to Table of Contents


Back to Table of Contents

The Squats and Science OpenBarbell is unlike most consumer devices available for purchase. It was made by a couple engineers who were fed up with the lack of accessibility for advanced training tools and decided to solve the problem themselves. That meant making something that works quickly and at low cost. Although we would love to continue to support our devices as long as you own them, we will only be making these in small batches and therefore unable to replace parts, dedicate a service team or absorb the costs of return shipping. We will stand by our product up to 14 days after receipt of the device, after which you can contact us for further support inquiries.

OpenBarbell, like the name suggests, is also totally open source and Arduino compatible. Normal warranties prevent users from hacking their devices, but we encourage it. We do not wish to preclude you from modifying your device and we hope you have the ingenuity to create functionality that the community can take advantage of. We cannot however fix issues that arise from the modification or alteration of OpenBarbell, and we are not liable for repairs for said issues.

That being said, we do plan on helping our owners wherever we can. Any questions you have about your device can (or may already) be answered in the OpenBarbell Owners Forum . If the forum doesn’t help and you’re feeling frustrated you can also send an email to the dedicated account rep1support@squatsandscience.com. This service will never expire and as long as we have fingers (and money to pay for hosting) we will be replying to your forum posts.

Issue List

Back to Table of Contents

This is an evolving known bug list that will likely increase over the next few weeks and month. We cannot find or fix every issue in our firmware and hardware before it's sent out, but we did our best to make sure they were all identified and the serious issues were addressed.

Peak velocity does not give accurate readings above 2.0 m/s

  • Each displacement reading is put through a filter to reduce erroneous values due to encoder imbalances, indoor lighting effecting our optical sensors, inconsistent spring tension, string slack, etc. This filter helps us eliminate bad values but also dampens our good values. If you achieve a maximum instantaneous velocity above 2.0 m/s the display will read "MAX". We understand this limitation for very fast lifts, including Olympic lifts like the snatch and clean & jerk, and we are working hard to introduce a high accuracy mode in the phone app to be released in Spring of 2016.

OpenBarbell does not function as expected when plugged into power

  • In order to keep this device as open source as possible we wanted to make sure that you can reprogram the device at will - in order to do this we had to "share" some of the functionality across different hardware. For this reason the USB is not only used to charge the device but also allows reprogramming over FTDI via a USB MicroB Plug Breakout board. For reasons we'd love to discuss with you in depth if you'd like, the USB connection interferes with the button presses. While it is a minor inconvenience we think the ability to hack the device makes up for it!

Switching between Power and Olympic modes can show a 0.00 velocity rep

  • This is because the displayed rep is changed after two seconds in order to refresh the screen, so it doesn't appear to be stuck on the 'Power' or 'Olympic' mode. Fixing this bug would have required the introduction of a more sophisticated state machine to run our display, which would have elongated our release schedule. This bug does not effect performance.

Invert mode can be inhibited by slightly misaligned top screws

  • Our optical encoders require a precise position to read tics accurately. When assembled, our devices were tested to work recording tics from a position on the floor, and some units needed to be re-calibrated to work in both directions. If these screws loosen over time it might cause this same issue to arise again.

Kevlar knot can come untied from the string hook

  • This happens on rare occasions and was remedied by re-affixing each unit to the string hook. If the string comes undone and pulls back into the device, the spindle could un-spin from the spring and lose retractability. If this happens please contact us.

Magnets may be loose and spin in place

  • If this is the case for your unit, please do not try to tighten them. Their spinning does not inhibit their ability to magnetically adhere to a surface, and tightening them could interfere with internal component alignment. This issue does not impact performance.

First Timestamp Bug

  • A variable named tic_timestamp_last doesn't get cleared between reps when using OpenBarbell V1.0 release code. This causes the very first time measurement of a rep to be huge, but the effect of that is very minimal since it gets filtered out by our low pass filter.

Time Waiting Bug

  • We have a function called 'time waiting' that removes velocity readings below a customizable threshold (.01 m/s by default). This is useful because a lift might end very smoothly without changing direction, which is what we use to indicate a rep has finished. We then remove the amount of time spent at the end of your rep. The OpenBarbell V1.0 release code does not also remove the amount of displacement during that time. This usually only accounts for about 3mm of ROM.

0.0 Velocity Bug

  • In testing we have very rarely recorded velocities of 0.0 randomly after a long period of use. This has yet to be repeated so we are having a hard time locating the bug. More info will be added here when it's available.


Back to Table of Contents


There are none! Just kidding, of course there are limitations. OpenBarbell was built to be a low barrier to entry device so people can start taking advantage of velocity based training principles. While we wish we could implement all of the features we have in mind, it wouldn't be feasible for this device. Here are a few things we can't do.


Bar Path

OpenBarbell cannot measure bar path. At the most basic level, it measures the velocity vector of a single point in space in one dimension. As much as we'd like to do some engineering wizardry, there is just no way to figure out where your bar is in space only by pulling out a string. This doesn't mean we can't tell you anything about your form. Our range of motion measurements tell you a lot about your consistency and which reps were higher, lower, tighter and better set-up. Our peak velocity height reading can tell you where you're achieving your fastest speed and you can measure how that changes over time. We think these metrics will be very valuable to your training in the place of absolute bar position.


Peak Velocity Over 2 m/s on the Device

In order to lower costs and make hand assembly in the USA feasible we needed to invent our own optical quadrature encoder. There are companies who focus on that aspect alone for decades and they make wonderful systems. Ours is definitely adequate for its purpose, but there are a few drawbacks. The readings fluctuate a little from one to another, which are averaged out very well with our average velocity calculations. Peak velocity however extracts one reading that is the very fastest, so erroneous spikes can cause a wildly inaccurate reading. To fix this, we put whats called a one pole low pass digital filter on our incoming measurements and this allowed us great accuracy below 1.5 m/s, good accuracy up to 2.0 m/s, and less than consistent peak velocities above that. We made a decision that rather than show you readings we aren't confident about, we will instead display 'MAX' to the screen. A peak velocity above 2.0 m/s is rare in powerlifting so we don't think this will be much of an issue, but Olympic Weightlifting can reach those speeds often. That's why we're implementing much more effective filtering in our upcoming app and a new high precision mode that can unlock some more accuracy from your device.


Device Placement

OpenBarbell must be placed directly below where the bar will be moving in order to achieve accurate and repeatable results. Any angle away from vertical that the string is pulled from the device will reduce the speed your device will read. You don't need to do anything special, just make sure the device is approximately where you expect to be at the end of a walk out, unrack, or break the ground on a deadlift.


Bluetooth Transmission

When our app is launched, it will transmit data in bulk to your device. Since OpenBarbell utilizes the very low power Bluetooth 4.0 LE, our transmission rates cause a delay in the speed at which you can complete reps. To circumvent this issue, we have a high speed mode that sends about 1/5th of the bulk data to your device along with all of the OpenBarbell measurements you see on the OLED screen. What this means is in this mode, your app will be able to do simple graphs and math on your data as well as display the same info on your OpenBarbell screen, but it will not be able to do some more complicated features by default. That's why we've implemented High Precision Mode, where you get every single reading the device captures but it takes anywhere from 1 to 4 seconds to send it all to your device. This mode allows us to do much higher peak velocity readings (see out 2.0 m/s cap above), as well as very high resolution graphing and other features. This will be an option on the app that will activate this mode in the future.


Back to Table of Contents

Item Number Part Number Description Material Vendor Link QTY.
1 Tube Base Exterior Bottom of Unit 1/8" Cast Acrylic Custom Component n/a 1
2 Countersunk Magnet 3/8" od x 1/8" thick with countersunk hole for #4 screw NdFeB, Grade N42 K&J Magnetics, Inc. http://www.kjmagnetics.com/proddetail.asp?prod=R622CS-S&cat=173 4
3 CircBase Base of inner tower 1/4" Cast Acrylic Custom Component n/a 1
4 91772A151 Pan Head Phillips Machine Screw - 6-32 Thread, 3/4" Length 18-8 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#91772A151 4
5 Battery_Top Battery Cover 1/8" Cast Acrylic Custom Component n/a 1
6 BearingHolder Bearing Walls 1/4" Cast Acrylic Custom Component n/a 2
7 608_Bearing Abec 9 - Size 608 Bearings Titanium/Stainless Steel Amazon http://www.amazon.com/Titanium-Stainless-Sporting-Skateboard-Bearings/dp/B00IZ7LBLW/ref=sr_1_11?ie=UTF8&qid=1460066714&sr=8-11&keywords=608+bearing+abec+9 2
8 Axle Spring/Spindle Axle 1/4" Cast Acrylic Custom Component n/a 1
9 SpringSpool Tape Measure Spring Spool Injection Molded Plastic Custom Component n/a 1
10 Spindle_Wall Spindle Wall without Slots for IR encoder 1/8" Cast Acrylic Custom Component n/a 1
11 Spindle_Insert_String Spindle Core with Cutout for String 1/4" Cast Acrylic Custom Component n/a 1
12 Spindle_Insert Spindle Core 1/4" Cast Acrylic Custom Component n/a 1
13 Spindle_Encoder_Wall Spindle Wall with Slots for IR encoder 1/8" Cast Acrylic Custom Component n/a 1
14 91772A114 Pan Head Phillips Machine Screw - 4-40 Thread, 7/8" Length 18-8 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#91772A114 2
15 91831A005 Nylon-Insert Locknut - 4-40 Thread Size, 1/4" Wide, 9/64" High 18-8 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#91831a005/=11vss2j 10
16 Top_Bearing_Connect Bearing Wall Bridge 1/8" Cast Acrylic Custom Component n/a 1
17 Top_Mount PCB Mount 1/8" Cast Acrylic Custom Component n/a 1
18 91772A110 Pan Head Phillips Machine Screw - 4-40 Thread, 1/2" Length 18-8 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#91772a110/=11vst2z 8
19 PCB_Lenoff Assembled PCB FR4 PCB Custom Component n/a 1
20 Tube Exterior Tube 1/8" Cast Acrylic Custom Component n/a 1
21 Top_Wings Connection between Tube, PCB and Top Cover 1/4" Cast Acrylic Custom Component n/a 1
22 Top_Cover Top Cover to protect PCB 1/8" Cast Acrylic Custom Component n/a 1
23 97975A115 Thread Forming Screw for Brittle Plastic - Pan Head, 4-24 Thread, 1/2" Length 410 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#97975a115/=11vstf4 4
24 91831A007 Nylon-Insert Locknut - 6-32 Thread Size, 5/16" Wide, 11/64" High 18-8 Stainless Steel McMaster-Carr http://www.mcmaster.com/mv1459975500/#91831a007/=11vstwk 4
25 Switch_Cover Power Switch Cap PLA Plastic Custom Component n/a 1
26 Battery 1000 mAh Polymer Lithium Ion Battery Sparkfun https://www.sparkfun.com/products/339 1

FCC Notification

Back to Table of Contents

What is this section even for?

This section is a heads up to you, the users, and for our friends over at the FCC. The FCC has a monumental task of monitoring and managing a common resource that we all need, the electromagnetic spectrum. In order to make sure that everyone plays nicely in this area, a series of tests and certifications are necessary to ensure that our device won't negatively impact any other device. Below is some information pertinent to those tests as well as some guidelines if unexpected interference occurs.


FCC Notification

Contains FCC ID: UYI25

This device complies with Part 15 of the FCC Rules. Operation is subject to the following two conditions"

(1) This device may not cause harmful interference and

(2) This device must accept any interference received, including interference that may cause undesired operation.


More in-depth...

This equipment has been tested and found to comply with the limits for a class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures:


  • Reorient or relocate the receiving antenna.
  • Increase the separation between the equipment and receiver.
  • Connect the equipment into an outlet on a circuit different from that to which the receiver is connected.
  • Consult the dealer or an experienced radio/TV technician for help.


In order to maintain compliance with FCC regulations, shielded cables must be used with this equipment. Operation with non-approved equipment or unshielded cables is likely to result in interference to radio and TV reception. The user is cautioned that changes and modifications made to the equipment without the approval of manufacturer could void the user's authority to operate this equipment.

OpenBarbell V1.0 Specs

Back to Table of Contents

OpenBarbell is powered by a Nordic nRF51 series ultra low power SOC. This system is a combination of a 2.4 GHZ Bluetooth transceiver and a low power 32 bit ARM Cortex -M0 core. This package is mounted onto a board developed by RF Digital called the RFduino, which is Arduino compatible and FCC Module Certified for use in consumer electronics.



What we can do with Velocity Data

Back to Table of Contents

We're working hard on this - Come back soon!