Open Hardware for
Open Fitness

We build fitness hardware in the open. Every schematic, every line of firmware, every CAD file, published under open source licenses.


Have an open source fitness project? Click here to access our API & developer portal and get your project listed here.

DEVELOPMENTGitHub →
Digital Weight

Digital Weight

Motorized resistance in a portable package

A compact, motorized resistance device that replaces an entire rack of dumbbells. Uses a brushless DC motor with closed-loop force control to deliver precise, programmable resistance from 5 to 250 lbs across concentric, eccentric, and isometric modes.

  • Replace a full dumbbell rack with one 11 lb device
  • Real-time force feedback via BLE
  • Open source firmware + hardware designs
  • Compatible with standard tool batteries
Specs
Max Force::250 lbs
Weight::11 lbs
Connectivity::BLE 5.0
Modes::Concentric, Eccentric, Isometric
Motor::Brushless DC, 48V
Control Loop::1kHz PID
Battery::16S LiPO4 with BMS (+ tool battery compatible)
Enclosure::3D printed + aluminum frame
Version History
v3prototype
v4prototype
v5development
v6concept
firmware/src/ble_force.cppView on GitHub →
#define FORCE_PIN A0
#define CALIBRATION_FACTOR 0.489f

float readForce() {
  int raw = analogRead(FORCE_PIN);
  float voltage = raw * (3.3f / 4095.0f);
  float lbs = voltage * CALIBRATION_FACTOR * 250.0f;
  return lbs;
}

void onBleForceRequest(BLECharacteristic& c) {
  float force = readForce();
  c.writeValue(force);
}
CONCEPTGitHub →

Balance Brick -- Shh! It's also a Scale

Open source smart ultra compact scale disguised as a fun balance brick

A single-foot precision body weight that doubles as a balance pose challege device. Daily balance challenges. Streams readings over wifi to the Open Workout System app for automatic logging and trend tracking.

  • Sub-0.1 lb accuracy with proper calibration
  • Auto-sync weight to your training log
  • No cloud account required — your data stays local
Specs
Max Weight::400 lbs / 180 kg
Resolution::0.05 lb / 0.02 kg
Sensors::4x strain gauge load cells
Connectivity::WiFi
Power::LiFePO4 + USB-C charging
Platform::Composite wood (TBD), 3" x 6"
Version History
v1concept
tools/calibrate_scale.pyView on GitHub →
import serial
import numpy as np

def calibrate(port="/dev/ttyUSB0", known_weight=25.0):
    """Two-point calibration: zero + known weight."""
    ser = serial.Serial(port, 115200)

    input("Remove all weight. Press Enter...")
    zero = np.mean([int(ser.readline()) for _ in range(50)])

    input(f"Place {known_weight} lb weight. Press Enter...")
    loaded = np.mean([int(ser.readline()) for _ in range(50)])

    factor = known_weight / (loaded - zero)
    print(f"Zero offset: {zero:.1f}")
    print(f"Cal factor:  {factor:.6f}")
    return zero, factor