산업 분야

자동차

항공/우주

금융

게임

메디테크 (MedTech)

IoT

디지털 제품

활용 사례

기업용

개인용

팀용

교육용

주요 특징

하드웨어 및 시스템 통합

Beta

ProtoPie MCP

멀티 디바이스 프로토타이핑을 위한 ProtoPie

인터랙션 로직을 위한 ProtoPie

개발자 인수인계

ProtoPie AI

New

User Testing

플러그인

Figma

Sketch

Adobe XD

인사이트 & 영감

블로그

eBook

고객 성공 사례

이벤트 및 웨비나

ProtoPie 갤러리

제품 학습 및 지원

프로토파이 스쿨

ProtoPie 다운로드

프로덕트 도큐멘테이션

커뮤니티

산업 분야

자동차

항공/우주

금융

게임

메디테크 (MedTech)

IoT

디지털 제품

활용 사례

기업용

개인용

팀용

교육용

주요 특징

하드웨어 및 시스템 통합

Beta

ProtoPie MCP

멀티 디바이스 프로토타이핑을 위한 ProtoPie

인터랙션 로직을 위한 ProtoPie

개발자 인수인계

ProtoPie AI

New

User Testing

플러그인

Figma

Sketch

Adobe XD

인사이트 & 영감

블로그

eBook

고객 성공 사례

이벤트 및 웨비나

ProtoPie 갤러리

제품 학습 및 지원

프로토파이 스쿨

ProtoPie 다운로드

프로덕트 도큐멘테이션

커뮤니티

튜토리얼
•

8

분 소요

How to Add Real Wheel Force Feedback to ProtoPie

Driving Fanatec Wheel Force Feedback from ProtoPie for Autonomous-Driving Experience Prototypes

Bella.Liu, Marketing Manager at ProtoPie

This tutorial is based on the open-source project fanatec-ffb-bridge. It walks you step by step through setting up a "ProtoPie prototype → real Fanatec wheel force feedback" demo environment. No racing game and no SimHub required — once it's set up, you can control the wheel's steering force, vibration, and angle directly from a Send Message trigger in ProtoPie Studio.

By the end of this tutorial you'll be able to:

  • Make the wheel produce real-time steering force and vibration alerts driven by your ProtoPie scenario

  • Kick off the whole demo with a physical push-button (wired to an Arduino) for extra realism

  • Troubleshoot the most common connection and permission issues

Estimated time: 30–45 minutes (not counting hardware procurement).

1. Prerequisites

Before you start, make sure you have:

  1. A Windows PC — the bridge talks to the wheel via DirectInput, so it only supports Windows

  2. A Fanatec wheelbase, connected via USB and powered on

  3. Python 3.9 or newer, available from python.org

  4. ProtoPie Connect, running locally and reachable on port 9981

  5. FanaLab and Fanatec Control Panel closed — both of these can grab an exclusive FFB lock and block the bridge from opening the wheel

  6. (Optional) An Arduino board (Uno, Nano, Leonardo, etc.) and a push-button, for physical button triggering

2. Step One: Download and Install the Bridge

  1. Clone or download the repository:
    git clone https://github.com/JubzMajulee/fanatec-ffb-bridge.gi
    cd fanatec-ffb-bridge

  2. (Recommended) Create a virtual environment to keep things isolated from your system Python:
    python -m venv .venv
    .venv\Scripts\activate

  3. Install dependencies:pip install -r requirements.txt

3. Step Two: Power On the Wheel and Run the Bridge

  1. Plug in and power on your Fanatec wheel.

  2. Start ProtoPie Connect and confirm it's listening on http://localhost:9981.

  3. From the project folder, run:

    python main.py

If everything is working, you should see output similar to this:

=== ProtoPie -> Fanatec FFB Bridge ===
ProtoPie Connect: http://localhost:9981
Wheel keyword:    fanatec

—————————————————————————————

[FFB] 2 joystick(s) detected:
       [0] Fanatec ...
       [1] Fanatec ...
[FFB] Haptic opened on [1] Fanatec ...
[FFB] Constant force armed (signed -1..+1, ramp 1.00/sec)
[FFB] Sine vibration armed (0..1, period=50ms)
[FFB] Centering wheel (1500ms)...
[FFB] Wheel centered
[SocketIO] Connected to http://localhost:9981

The wheel will briefly self-center, then sit idle waiting for messages. Press Ctrl + C at any time to stop the program.

  • Seeing "No joysticks detected"? Windows isn't seeing the wheel. Check the USB cable and power, and confirm the device shows up under Windows' "Set up USB game controllers."

  • Seeing "None of the candidates would open for haptic"? This is almost always FanaLab or Fanatec Control Panel holding an exclusive FFB lock — close them and try again. Also make sure no racing game is running in the background.

4. Step Three: Send Control Messages from ProtoPie Studio

Once the bridge is running, it continuously listens for messages broadcast by ProtoPie Connect. In your ProtoPie Studio prototype, add a Send Message trigger and set the Message ID and Value according to the table below:

Message ID

Value Range

Effect

set_ffb

-1.0 to +1.0

Pulls the wheel left (negative) or right (positive). 0 = no force. Smoothly ramps toward the target.

set_ffb_speed

e.g. 0.5, 1.0, 5.0

How fast set_ffb ramps toward its target — higher values feel closer to instant. Default 1.0.

set_vibration

0.0 to 1.0

Wheelbase vibration intensity, applied immediately.

set_angle

degrees, e.g. -90, 45

Parks the wheel at a specific angle and holds it there.

set_angle_strength

0.0 to 1.0

How firmly set_angle holds the wheel. 0 releases it.

A Few Common Combinations
  • Simulate the system correcting to the right: send set_ffb = 1.0

  • Make the correction feel gentler: send set_ffb_speed = 0.3 first, then set_ffb = 0.0 (a slow drift back to center)

  • Simulate an urgent turn-in: send set_ffb_speed = 8.0 first, then set_ffb = 0.7 (near-instant)

  • Lane-departure vibration alert: send set_vibration = 0.6, then set_vibration = 0.0 to stop

  • Autonomous takeover, wheel turns to 30° and locks: send set_angle = 30 first, then set_angle_strength = 0.7

As long as your ProtoPie prototype is connected to ProtoPie Connect, any message it sends will be picked up by the bridge and translated into real force feedback on the wheel.

5. (Optional) Step Four: Wire Up a Physical Button with Arduino

If you want the demo to feel more immersive — for example, using a real button to kick off an "autonomous takeover" scenario — you can add an Arduino as follows.

Wiring

Just two wires:

Arduino Pin

Connect To

A0

One leg of a momentary push-button

GND

The other leg of the button

A0 uses the chip's internal pull-up resistor, so no external resistor is needed. Any Arduino board with a USB serial connection works (Uno, Nano, Leonardo, Pro Micro, etc.).

Flashing the Sketch
  1. Install the Arduino IDE.

  2. Open Arduino/pushButtonDemo.ino from the repository.

  3. Tools → Board — select your board.

  4. Tools → Port — select the COM port your board enumerated as.

  5. Click Upload (the right-arrow icon).

  6. Open Tools → Serial Monitor at 9600 baud and press the button — you should see Arduino||1 on press and Arduino||0 on release. Close the Serial Monitor afterward, since it holds the COM port open.

Connecting It to ProtoPie Connect
  1. In ProtoPie Connect, open Add Device → Serial (naming may vary slightly by version).

  2. Select the Arduino's COM port and set the baud rate to 9600.

  3. In your ProtoPie Studio prototype, add a Receive Message trigger with Message ID = Arduino. Use the message's value (1 = pressed, 0 = released) to kick off your autonomous-driving simulation scenario.

Once wired up, the full chain looks like this: press the physical button → Arduino sends Arduino||1 → ProtoPie Connect forwards it → the ProtoPie prototype starts the scenario → the scenario sends set_ffb, set_vibration, etc. → the bridge translates those into real force feedback on the wheel.

6. Adjusting the Defaults

If the default feel doesn't match what your demo needs, you can edit the top of main.py:

PROTOPIE_URL = "http://localhost:9981"   # ProtoPie Connect URL
WHEEL_KEYWORD = "fanatec"                # substring match for the wheel device name
And in ffb_driver.py, FanatecFFB exposes these constructor parameters:

  • force_ramp_rate=1.0 — default ramp rate for set_ffb

  • center_on_start=True — whether to auto-center the wheel at startup

  • center_duration_ms=1500 — how long the centering spring runs

  • wheel_range_deg=900 — full lock-to-lock range; this must match your Fanatec driver's setting, or set_angle will map incorrectly

7. Troubleshooting Quick Reference

Symptom

Likely Cause

Fix

No joysticks detected

Windows doesn't see the wheel

Check the USB cable and power; confirm the device appears under "Set up USB game controllers"

None of the candidates would open for haptic

FanaLab / Fanatec Control Panel holding an exclusive lock

Close both programs and make sure no racing game is running

[SocketIO] Failed to connect to http://localhost:9981

ProtoPie Connect isn't running, or is on a different port

Open Connect and confirm the port; if different, edit PROTOPIE_URL in main.py

Wheel doesn't react to messages

Message isn't reaching the bridge, or the wheel/driver itself has an issue

Check whether the terminal logs a line like [ProtoPie] set_ffb -> 0.5. If it does, the issue is on the wheel/driver side; if not, check your ProtoPie connection and messageId spelling

Wrong device gets picked

Multiple Fanatec devices, or a non-standard device name

Change WHEEL_KEYWORD in main.py to a more specific substring of the device name (case-insensitive)

Summary

The whole setup boils down to three lightweight layers: Arduino (optional physical trigger) → ProtoPie (scenario logic and message orchestration) → the bridge (translating messages into wheel force feedback). Each layer is simple on its own, and the cost to set it all up is low — but put together, they let a reviewer or test participant feel, within minutes, what "the wheel taking over during autonomous driving" actually feels like. That's exactly the kind of persuasive power a prototype needs.

👉 Want to see it in action? Book a session and watch how real hardware and prototypes work together in real time.