Skip to content
bFaaaP

Build it yourself

Everything is open source — the iOS app, both devices, the firmware and the docs. Pick a track: build the app (needed for both), then the device that matches your piano. Each step links to the exact files on GitHub.

iOS app

Required for both devices

The app reads your head angle with Face-ID tracking and sends pedal commands over Bluetooth. A free App Store release is currently under review; until it goes live you can build and install it from source with the steps below.

PrereqsOpen the projectSet signingBuild to a devicePermissionsPair & tune
System architecture: head tilt → iOS app → BLE board → Pico → piano pedal
  1. 1

    What you need

    A Mac with Xcode 15+, an iPhone/iPad with a TrueDepth (Face ID) camera (the Simulator can’t do head tracking), and a free Apple ID to install on your own device.

  2. 2

    Get the source & open it

    Clone the repository and open bFaaaPSwitch1.xcodeproj in Xcode.

  3. 3

    Set your signing

    In Signing & Capabilities, choose your Team and change the Bundle Identifier to something unique.

  4. 4

    Build to your device, then pair & tune

    Run on the connected iPhone/iPad and allow Camera and Bluetooth. Then turn on the device, connect, and preset your threshold (offset) and multiplier — together they set your response speed.

bFaaaP Switch

For digital pianos & keyboards

A player at a digital keyboard plays foot-free: a phone on a stand reads their head tilt while a tiny box on the keyboard’s pedal jack switches the sustain

The small, inexpensive version for digital pianos and keyboards. Instead of a motor it switches the sustain electronically through the instrument’s sustain-pedal jack — no motor, no airback. It uses the same iOS app and BLE board as the Pro.

✅ Hardware confirmed by the maker: board = ItsyBitsy nRF52840; a ROHM RU1J002YN logic-level N-MOSFET on GP13 switches the sustain line low-side (no series resistor); power = 2× AA; it starts on RESET.

Get the BLE boardAdd the sustain switchWire to the pedal jackFlashPair & use
  1. 1

    Before you start

    An Adafruit ItsyBitsy nRF52840 board, a ROHM RU1J002YN N-channel MOSFET, 2× AA batteries, a connector for the sustain-pedal jack (commonly 6.3 mm / TS), and an iPhone/iPad with Face ID.

  2. 2

    Flash the BLE board

    Flash the standalone Switch firmware to the nRF52840 (double-tap RESET → UF2 bootloader → upload). Confirm it advertises as bFaaaPSwitch_1…4.

  3. 3

    Add the switch & wire to the jack

    Drive the MOSFET from GP13 to open/close the sustain contact (no series resistor), and wire it across the instrument’s sustain-pedal jack (TS tip/sleeve).

  4. 4

    Pair & use

    Install the iOS app, connect over Bluetooth, match your instrument’s polarity with the on-type / off-type toggle (n / f), preset offset and multiplier, and play.

bFaaaP Pro

For acoustic pianos (grand & upright)

A pianist plays a grand piano foot-free: a phone on the music stand reads their head tilt while a small device and air cushion press the sustain pedal

A small motor presses an acoustic piano’s sustain pedal, anchored by an airback air-cushion — nothing is screwed to the piano. The build is a vertical drive column plus the two boards and the airback pump.

🚧 Draft: the electrical schematic (Taguchi) and the mechanical layout (Narusawa) are confirmed; still being finalised are the stepper successor’s firmware (planned motor = a same-size NEMA17, STEP/DIR; the original is end-of-life) and the final printed-part variant.

Print partsElectronicsAssemble the driveWire the boardsFlashMount + airbackSet force & calibratePair & play
Pro build steps and the repository files each step uses
The Pro drive mechanism — a vertical column with the motor beside the lead screw and a push-rod pressing straight down
The Pro reference system architecture: boards, motor, HX711, the in-box electric pump and air tube to the airback
  1. 1

    Print the parts & get the electronics

    Print the frame, push-rod and boxes in PLA+ (0.1–0.2 mm). Order the electronics: Pico, nRF52840, the motor (NEMA17 successor), a +5 V fan, HX711, a MOSFET, a travel-limit slider and a 24 V PSU; plus the frame stock, GT-2-262 belt, T60 pulleys, T10 lead screw, and the WINBAG + electric pump airback.

  2. 2

    Assemble the vertical drive

    Build a vertical column: the motor sits beside the screw and couples through the GT-2-262 belt over two T60 pulleys (1:1 — it only offsets the motor, not a reduction); a vertical T10 lead screw carries a push-rod that presses straight down. Add the +5 V cooling fan.

  3. 3

    Wire the boards & flash

    Motor serial → Pico GP4/GP5; HX711 → GP2/GP3; air pump on +5 V via MOSFET → GP12; travel slider → ADC0/GP26; BLE ↔ Pico over UART, 24 V to the motor. Then flash both boards (BLE on nRF52, main on the Pico / arduino-pico core).

  4. 4

    Mount on the piano + airback

    Place the drive so the push-rod sits over the sustain pedal. Run the air tube from the box’s electric pump to the WINBAG and inflate it against a neighbouring pedal with the PUMP SW to absorb the reaction force — nothing touches the piano’s finish.

  5. 5

    Set the force, calibrate, pair & play

    Set the DIP switch for pressing force (20–35 W) and lift (5–20 mm); run the self-calibration (Serial Monitor @ 115200; ~50 mm safety cap). Then pair the app, preset offset and multiplier, calibrate the head-angle zero, and play.

Stuck on a step? Ask in AI-assisted Support — a maintainer-reviewed Q&A (not instant; real people check each answer).