Skip to the content
PCBKitNew board
2 layers74.2 × 80 mmForZero, the printed circuit board in 3D

Sterownik fizycznego zestawu wskaźników Audi A4 B6, pozwalający wyświetlać telemetrię z Forza Horizon 6 przy użyciu STM32, CAN, USB i autorskiej aplikacji Qt.

Size
74.2 × 80 mm
Copper layers
2
Thickness
1.6 mm
Parts
109
Nets
111
Pads
366
Tracks, vias
743, 168
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
23 Jun 2026
Updated
11 Sep 2026

Overview

ForZero is an open-source printed circuit board by MikolajDIY, from the MikolajDIY/ForZero repository on GitHub. It is a 2-layer board of 74.2 × 80 mm with 109 parts on 111 nets, routed with 743 tracks and 168 vias.

It is built around the STM32F105RBT6, AO3400A and SS23, with the USBLC6-2SC6Y among its other parts. Its parts include 52 resistors, 26 capacitors, 11 transistors, 5 ICs and 5 connectors. It belongs with the STM32 boards of this library.

Main components

4

README

README.md

ForZero

Sterownik fizycznego zestawu wskaźników Audi A4 B6, pozwalający wyświetlać telemetrię z Forza Horizon 6 przy użyciu STM32, CAN, USB i autorskiej aplikacji Qt.

ForZero powstał jako próba wykorzystania fizycznego zestawu wskaźników jako elementu stanowiska simracingowego. Projekt obejmuje rozpoznanie sposobów sterowania licznikiem, zaprojektowanie i uruchomienie własnej PCB, firmware mikrokontrolera oraz aplikację komputerową.

Film prezentujący projekt

ForZero – prezentacja projektu

Obejrzyj film na YouTube

Możliwości

  • Wyświetlanie prędkości i obrotów silnika na fizycznym liczniku.
  • Sterowanie wskazaniami poziomu paliwa i temperatury płynu chłodzącego.
  • Obsługa wybranych kontrolek i komunikatów ostrzegawczych.
  • Przybliżona symulacja stanów ABS, TCS i AIRBAG oraz temperatury płynu chłodzącego na podstawie dostępnej telemetrii.
  • Odbiór danych UDP z gry i przesyłanie przetworzonych wartości do sterownika przez USB VCP.
  • Pomiar opóźnień komunikacji na podstawie potwierdzeń wykonania ramek.
  • Zerowanie prędkości i obrotów po 500 ms bez poprawnej ramki danych.

Gra nie udostępnia bezpośrednio wszystkich odwzorowywanych stanów. Algorytmy symulacji kontrolek i temperatury służą do przybliżonego odtworzenia ich zachowania; nie są modelami fizycznymi układów pojazdu.

Jak to działa

Gra wysyła telemetrię przez UDP. Aplikacja Qt odbiera i parsuje pakiety, wykonuje dodatkową logikę oraz przesyła dane przez USB VCP do STM32F105. Mikrokontroler generuje sygnały elektryczne wymagane przez zestaw wskaźników.

Badany licznik wykorzystuje kilka różnych sposobów sterowania:

FunkcjaSposób sterowania
ObrotomierzRamki CAN
PrędkościomierzSygnał impulsowy o regulowanej częstotliwości
Poziom paliwa i temperaturaEmulacja rezystancji czujników
Wybrane kontrolki i ostrzeżeniaSygnały logiczne 12 V

Wskazania paliwa i temperatury skalibrowano eksperymentalnie. Zmierzone charakterystyki opracowano z wykorzystaniem interpolacji PCHIP w MATLAB-ie.

Sprzęt

Płytka sterownika ForZero

  • Autorska dwuwarstwowa PCB zaprojektowana w KiCad.
  • Mikrokontroler STM32F105 z jednoczesną obsługą USB i CAN.
  • Transceiver CAN MCP2562 z osobnym zasilaniem interfejsu logicznego.
  • Układy emulacji rezystancji oparte na potencjometrze cyfrowym MCP4661, wzmacniaczach operacyjnych i tranzystorach MOSFET.
  • Tranzystorowe stopnie sterujące wejściami 12 V licznika.
  • Złącze USB-C, zewnętrzne zasilanie 12 V i złącza Molex Micro-Fit 3.0.
  • Zabezpieczenie ESD linii USB oraz bezpieczniki polimerowe na liniach zasilania.

Oprogramowanie

Aplikacja PC — C++ / Qt

Interfejs aplikacji ForZero

Aplikacja ma trzy wątki: GUI, odbiór UDP oraz komunikację USB. Oddzielenie komunikacji od interfejsu użytkownika pozwala odbierać telemetrię i obsługiwać sterownik bez wykonywania tych operacji w wątku GUI.

Aplikacja odpowiada za parsowanie telemetrii, symulację wybranych wskazań, przygotowanie ramek dla sterownika i wyznaczanie statystyk opóźnień.

Firmware — C / STM32 HAL

Firmware powstał w STM32CubeIDE z wykorzystaniem bibliotek HAL. Zadania w pętli głównej są wyzwalane zdarzeniowo lub w ustalonych interwałach:

SygnałAktualizacja
Prędkość i kontrolkiPo otrzymaniu nowych danych, gdy wartość się zmieni
Obroty silnikaRamka CAN co 20 ms
TemperaturaCo 2 s
Poziom paliwaCo 5 s, jeżeli odebrano nowe dane

Własny protokół przesyłany przez USB VCP wykorzystuje znaczniki ramki, CRC8, numer sekwencyjny i potwierdzenie wykonania Exec Ack. Parser posiada timeout odbioru, a brak poprawnych danych przez 500 ms powoduje wyzerowanie prędkości i obrotów.

Opóźnienia

Aplikacja mierzy czas przejścia danych w pętli PC–sterownik–PC (RTT), wykorzystując numery ramek i odpowiadające im potwierdzenia. Statystyki obejmują ostatnie 20 000 pomiarów.

W zestawach pomiarowych opisanych w dokumentacji średnie RTT zazwyczaj wynosiło poniżej 1 ms, a P99 poniżej 4 ms. W najbardziej skrajnym zarejestrowanym zestawie P99 osiągnął 17 ms. Są to wyniki przeprowadzonych testów, a nie gwarantowane limity czasowe.

RTT nie jest pomiarem czasu od zdarzenia w grze do mechanicznego wychylenia wskazówki. Poszczególne wyjścia mają własne okresy odświeżania, a licznik dodatkowo filtruje wskazania. Projekt pracuje jako system soft real-time.

Zawartość repozytorium

FolderZawartość
Aplikacja QtKod źródłowy aplikacji komputerowej
Oprogramowanie sterownikaProjekt firmware mikrokontrolera STM32
SchematyMateriały dotyczące części sprzętowej
ObrazyZdjęcia i grafiki wykorzystywane w README
DokumentacjaSzczegółowa dokumentacja projektu

Uruchomienie

Wymagania

  • Zestaw wskaźników zgodny z egzemplarzem wykorzystanym w projekcie.
  • Zmontowany sterownik ForZero, przewody połączeniowe i zasilanie 12 V.
  • Przewód USB obsługujący transmisję danych.
  • Komputer z aplikacją ForZero oraz Forza Horizon 6.
  • Do samodzielnego zbudowania oprogramowania: środowisko Qt z kompilatorem C++ oraz STM32CubeIDE.

Kolejność czynności

  1. Przy odłączonym zasilaniu połącz sterownik z licznikiem zgodnie ze schematem połączeń w dokumentacji. Uwzględnij numerację pinów obu złączy licznika.
  2. Zbuduj firmware z folderu Oprogramowanie sterownika i wgraj go do STM32. Programowanie jest możliwe przez USB z wykorzystaniem wbudowanego bootloadera.
  3. Aby wejść w tryb bootloadera: naciśnij RESET, przytrzymując go naciśnij BOOT, zwolnij RESET, a następnie BOOT.
  4. Po zaprogramowaniu uruchom sterownik w zwykłym trybie pracy i podłącz zasilanie zestawu.
  5. Zbuduj i uruchom aplikację z folderu Aplikacja Qt, a następnie wybierz port COM sterownika.
  6. Włącz wysyłanie telemetrii UDP w grze. Ustaw adres IP komputera odbierającego dane oraz port zgodny z konfiguracją aplikacji.
  7. Uruchom jazdę i sprawdź odbiór danych oraz działanie wskazań.

Zgodność i ograniczenia

  • Projekt sprawdzono z licznikiem Audi A4 B6 RB4 o oznaczeniu 8E0920900H, z monochromatycznym wyświetlaczem FIS. Zgodność z innymi wersjami licznika nie została potwierdzona.
  • W badanym egzemplarzu po rozpoczęciu jazdy wskazanie paliwa zmieniało się wyłącznie w dół, z tempem około jednej czwartej skali w ciągu 7–10 minut. Ograniczenie to utrudnia szybkie odwzorowanie zmian poziomu paliwa w grze.
  • Kontrolki i komunikaty mają zachowanie wynikające z wewnętrznej logiki licznika. Symulacja ABS nie oznacza pełnej emulacji sterownika ABS ani niezależnego sterowania samą lampką ABS.
  • Poziom 12 V dla wybranych wejść kontrolek przyjęto na podstawie testów używanego egzemplarza; nie potwierdzono go dokumentacją producenta.

Dokumentacja

Dokumentacja projektu opisuje pinout licznika, schemat połączeń ze sterownikiem, układy elektroniczne, kalibrację wskazań, protokół USB oraz przeprowadzone testy.

Autor

M.Ratajczak — MikolajDIY

Parts

109
QtyValueFootprintReferences
249.1kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR10, R11, R17, R20, R22, R24, R26, R28, R30, R32, R34, R35, R41, R43, R44, R45 +8
18100nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC3, C4, C11, C12, C13, C14, C15, C16, C17, C20, C21, C22, C23, C24, C25, C26 +2
11100RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R4, R18, R19, R21, R23, R25, R27, R29, R31, R42
11AO3400APackage_TO_SOT_SMD:SOT-23Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11
45.1kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR7, R8, R14, R15
310uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5, C6, C7
3270RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR36, R37, R38
3LEDLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderERROR, OK, POWER
210nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2
210pCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC18, C19
21kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R5
222RResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR3, R6
222RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR12, R13
2SW_PushButton_Switch_SMD:SW_SPST_PTS645Sx43SMTR92BOOT, RESET
10RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR33
11.25AFuse:Fuse_1812_4532Metric_Pad1.30x3.40mm_HandSolderF2
1120RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16
11nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC10
125MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
133kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR39
143045-0400SamacSys_Parts:43045-04_00,01,02,10_J4
143045-0621SamacSys_Parts:43045-06YY_212223J3
143045-0800SamacSys_Parts:43045-08_00,01,02,10_J2
1500mAFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF1
182kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR40
1AP7347DQ-33W5-7SamacSys_Parts:SOT95P280X145-5NIC4
1Barrel_Jack_SwitchConnector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_HorizontalJ5
1MCP2562-E_SNSamacSys_Parts:SOIC127P600X175-8NIC5
1MCP4661-103E_STSamacSys_Parts:SOP65P640X120-14NIC2
1NCV21872DMR2GSamacSys_Parts:SOP65P490X110-8NIC1
1SS23Diode_SMD:D_SMAD2
1STM32F105RBT6SamacSys_Parts:QFP50P1200X1200X160-64NIC3
1USBLC6-2SC6YSamacSys_Parts:SOT95P280X145-6ND1
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1

Questions

How big is the ForZero PCB?

It measures 74.2 × 80 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ForZero use?

109 parts, built around the STM32F105RBT6, AO3400A, SS23 and USBLC6-2SC6Y. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ForZero KiCad files?

From the MikolajDIY/ForZero repository on GitHub, at the commit this page was made from: the board is Schematy/forZero_schematy_1v0/forZero.kicad_pcb and its schematic Schematy/forZero_schematy_1v0/Speed_and_tell-tales.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ForZero design in my own project?

Its repository states no licence, so its author keeps all rights: ask MikolajDIY before reusing the design.

Similar boards

  • 4 layers77.7 × 41 mmAM32 100A ESC, the printed circuit board in 3D

    AM32 100A ESC

    aviralshastri/AM32_100A_ESC

    88 parts
  • 2 layers104 × 76 mmSuntracker, the printed circuit board in 3D

    Suntracker

    Wudker/Suntracker

    Solar tracker powerbank with MPPT prototype

    115 parts
  • 4 layers145.2 × 141.2 mmCLANKERS ROVER V1, the printed circuit board in 3D

    CLANKERS ROVER V1

    yergefoltz/-Rover-PCB-for-XRC-Xplore-rover-challenge-

    My first PCB made for rover challenge at my university was designed to connect all electronics for out rover.

    57 parts
  • 2 layers90 × 90 mmYkts power, the printed circuit board in 3D

    Ykts power

    cansat-ptl/cubesat-boards

    YKTSAT Kicad board files - mirror of https://git.yktaero.space/yktaero-dev/cubesat-boards

    132 parts
  • 2 layers95 × 116 mmOpenFlops, the printed circuit board in 3D

    OpenFlops

    silvervest/OpenFlops-W1D

    Modified OpenFlops specifically to replace Citizen W1D drives

    63 parts26
  • 2 layers111.6 × 59.4 mmHenryFlops, the printed circuit board in 3D

    HenryFlops

    hmerrett/HenryFlops

    OpenFlops is an Open Hardware implementation of such an emulator, inspired from the ubiquitous Gotek hardware. It is designed to run the FlashFloppy firmware, which gives it several improvements over the original Gotek…

    89 parts16
  • 4 layers51 × 42 mmNano Tek, the printed circuit board in 3D

    Nano Tek

    stefanskotte/Nano-Tek

    A tiny, modern reimagining of the classic Gotek floppy-disk-drive emulator. Nano-Tek keeps the full feature set of a Gotek-style FDD emulator but packs it onto a board that is a fraction of the size, hence the name…

    58 parts7
  • 4 layers60 × 60 mmLMS8001 Companion, the printed circuit board in 3D

    LMS8001 Companion

    myriadrf/reference-development-kit

    The Myriad-RF Reference Hardware design files and firmware

    628 parts49