Jak naprogramovat TPMS - praktický průvodce pro vývojáře

Jak naprogramovat TPMS - praktický průvodce pro vývojáře

Převod tlaku v pneumatikách

Konvertér tlaku pro TPMS
bar: 0.0
psi: 0.0
kPa: 0.0
Tip: Standardní tlak v pneumatikách automobilu je obvykle 2,2-2,5 bar. Pro TPMS systémy je důležité používat přesné hodnoty.

Potřebujete vytvořit vlastní systém měření tlaku v pneumatikách a nevíte, kde začít? V tomto článku vás provedu od výběru hardware přes nastavení komunikačních protokolů až po funkční ukázkový kód. Vše je napsáno jednoduchou řečí, takže i když jste zatím jen začátečník v automobilové elektronice, po přečtení budete mít hotový prototyp, který můžete otestovat na vlastní autě.

Co je TPMS a jak funguje?

TPMS (Tyre Pressure Monitoring System je elektronický systém, který v reálném čase monitoruje tlak v pneumatikách a informuje řidiče o případných odchylkách). Moderní vozidla používají buď nepřímé systémy (využívají ABS senzory) nebo přímé (každá pneumatika má vlastní čidlo). Přímé systémy jsou přesnější, ale vyžadují komunikaci mezi senzorickým uzlem a jednotkou v kabině.

Potřebný hardware

Nejdříve si připravíme hardware, na kterém bude program běžet. Zde jsou nejčastější volby:

  • Arduino je oblíbená vývojová platforma, která nabízí snadné propojení se senzory i komunikačními sběrnicemi (např. Nano, Uno nebo MKR WiFi 1010).
  • STM32 představuje výkonný mikrokontrolér s vestavěným CAN rozhraním, vhodný pro profesionální řešení.
  • Senzor tlaku - nejčastěji používaný je MS5803 (digitální snímač tlaku a teploty) nebo specifický OEM senzor s bezdrátovým přenosem (typicky 315MHz).
  • Komunikační rozhraní - CAN bus je standardní protokol v automobilovém průmyslu, který umožňuje spolehlivý přenos dat mezi uzly, alternativně lze použít UART nebo Bluetooth Low Energy (BLE) pro jednoduché testování.
  • Napájecí zdroj - 5V nebo 3,3V regulátor podle požadavků senzoru a mikrokontroléru.

Komunikační protokoly: CAN vs UART vs BLE

Porovnání komunikačních rozhraní pro TPMS
ParametrCAN busUARTBLE
Rychlost1Mb/s115kb/s1Mb/s (max)
StabilitaVysoká (error‑checking)StředníStřední (interference)
DosahDo 40m na sběrniciDo 1m (kabel)Do 10m (bez překážek)
ImplementaceVyžaduje transceiver (např. MCP2551)Jednoduchý UART‑to‑USB adaptérModul nRF52 nebo HC-05 (BLE)
SpotřebaStředníNízkáVelmi nízká (sleep‑mode)

Pro sériové testy doma stačí UART, ale pokud cílíte na reálné auto, raději zvolte CAN - je to de‑facto standard a většina ECU jej podporuje.

Krok za krokem: programování TPMS

  1. Instalace vývojového prostředí: Stáhněte Arduino IDE (verze 2.x) nebo STM32CubeIDE. Přidejte knihovny pro CAN (např. mcp_can) a pro váš tlakový senzor (např. MS5803).
  2. Zapojení hardware: Připojte senzor k analogovému vstupu (I2C nebo SPI podle modelu). CAN transceiver propojte s CAN‑H a CAN‑L linkou vozidla. Ujistěte se, že napájení je stabilní a země (GND) je společná.
  3. Čtení surových hodnot: V kódu inicializujte senzor a načtěte tlak (v Pa) i teplotu (°C). Převod na bar nebo psi provádějte pomocí vzorce:
    float pressure_bar = rawPressure / 1000.0; // 1bar = 100kPa
  4. Kalibrace: Změřte skutečný tlak pomocí přesného měřiče a vytvořte korekční koeficient. Uložte jej do EEPROM, aby byl po restartu zachován.
  5. Formát zprávy: CAN zpráva TPMS má typicky 8byte. Navrhněte vlastní ID (např. 0x6A0 + číslo kola) a naplňte pole: {ID, pressure, temperature, checksum}. Kontrolní součet můžete spočítat jednoduchým XOR.
  6. Odeslání dat: Použijte funkci CAN.sendMsgBuf() (Arduino) nebo HAL_CAN_Transmit() (STM32). Ověřte, že zpráva je přijatá na zkušebním terminálu ECU nebo na OBD‑II scanneru.
  7. Upozornění řidiče: Pokud je tlak pod nebo nad limitem (např. 0,8×nom. a 1,2×nom.), pošlete výstrahu na displej (UART → LCD) nebo na mobil přes BLE.
Isometrické zobrazení kódu v Arduino IDE, CAN signálu a BLE/UART ikon kolem desky s komponenty.

Ukázkový kód pro Arduino (CAN + MS5803)

#include <Wire.h>
#include <MS5803.h>          // knihovna pro senzor
#include <SPI.h>
#include <mcp_can.h>        // knihovna pro MCP2551 CAN transceiver

// Pinout definice
const int SPI_CS = 10;      // CS pro CAN kolík
MS5803 sensor;
MCP_CAN CAN(SPI_CS);

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (!sensor.begin()) {
    Serial.println(F("Selhalo připojení k MS5803"));
    while (1);
  }
  if (CAN.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.println(F("CAN inicializován"));
  } else {
    Serial.println(F("Chyba CAN inicializace"));
    while (1);
  }
  CAN.setMode(MCP_NORMAL);
}

void loop() {
  float pressure = sensor.readPressure();   // Pa
  float temperature = sensor.readTemperature(); // °C

  // Převod na bar a připrava zprávy
  uint16_t pres_bar = (uint16_t)(pressure / 1000.0 * 100); // 0.01 bar resolution
  int16_t temp_c = (int16_t)(temperature * 10); // 0.1°C resolution

  // Vytvoření CAN rámce
  uint8_t data[8];
  data[0] = highByte(pres_bar);
  data[1] = lowByte(pres_bar);
  data[2] = highByte(temp_c);
  data[3] = lowByte(temp_c);
  // zbytek dat můžete doplnit o stav batérie, CRC apod.
  data[4] = 0; data[5] = 0; data[6] = 0; data[7] = 0;

  // ID 0x6A0 + číslo kola (příklad: přední levý = 0)
  uint32_t canId = 0x6A0;
  CAN.sendMsgBuf(canId, 0, 8, data);

  // Debug výpis
  Serial.print(F("Tlak: ")); Serial.print(pressure/1000.0);
  Serial.print(F(" bar, Teplota: ")); Serial.println(temperature);

  delay(1000); // aktualizace každou sekundu
}

Tento příklad ukazuje základní smyčku: načtení dat, konverze, vytvoření CAN zprávy a odeslání. Pro reálné nasazení doplňte kontrolu chyb, watchdog a úsporný režim mikrokontroléru.

Testování a kalibrace v praxi

Po naprogramování je potřeba ověřit, že vaše TPMS skutečně funguje na autě. Doporučuji:

  • Zapojit testovací OBD‑II adaptér a sledovat CAN zprávy pomocí aplikace CANalyzer nebo ScanTool.net.
  • Porovnat měřené hodnoty s profesionálním přenosným měřičem tlaku. Menší odchylky do ±0,05bar jsou běžné.
  • Provést test při různých teplotách - senzory jsou citlivé na teplotní kompenzaci. Ideální je kalibrovat při 20°C a 0°C.
  • Vyzkoušet scénář sníženého tlaku (např. nechat pneumatiku odpočinout 30min a pak měřit). Systém by měl vygenerovat výstrahu.

Kalibrační koeficient můžete uložit do EEPROM, aby se po restartu načetl automaticky:

EEPROM.put(0, calibrationFactor);
float factor;
EEPROM.get(0, factor);
pressureCorrected = rawPressure * factor;

Časté chyby a tipy, jak se jim vyhnout

  • Špatná zem (GND) - pokud není společná zem mezi senzorem, CAN transceiver a mikrokontrolérem, vznikají náhodné chyby v datech.
  • Rozbitý CAN terminátor - na konci sběrnice by měly být 120Ω rezistory. Bez nich se data mohou odrazit a ztratit.
  • Ignorování teplotní korekce - tlak v pneumatice klesá o cca 0,01bar/°C. Bez korekce bude výstraha falešná při extrémních teplotách.
  • Neoptimalizovaný cyklus - nečtěte senzor každých 10ms - to zbytečně spotřebuje energii a může přetížit CAN sběrnici.
  • Zapomenutý watchdog - při výpadku kódu by systém mohl zůstat „zavřený“ a neodesílat data. Přidejte watchdog timer.

Dodržení těchto zásad výrazně zvyšuje spolehlivost a prodlužuje životnost systému.

Interiér auta s varovnou ikonou tlaku, smartphonem ukazujícím BLE data a otevřeným SD slotem.

Další kroky a rozšíření

Jakmile máte základní TPMS, můžete ho rozšířit o funkce, které uživatelé oceňují:

  • Integrace s mobilní aplikací přes BLE - zobrazíte tlak na telefonu v reálném čase.
  • Ukládání historie do SD karty - získáte grafy vývoje tlaku během dlouhých výletů.
  • Automatické doplnění dusíku - pokud připojíte regulátor, můžete nastavit cílový tlak a nechat systém doplnit.
  • Diagnostika poruchy senzoru - pomocí kontroly CRC můžete zjistit, zda senzor neodesílá poškozené pakety.

Každé rozšíření však zvýší složitost a požadavky na napájení, takže je dobré nejprve otestovat základní verzi a teprve pak přidávat nové bloky.

Rychlý souhrn kroků

  • Vyberte mikrokontrolér (Arduino, STM32) a senzor tlaku (MS5803 nebo OEM RF senzor).
  • Zapojte CAN transceiver a připojte senzor k I2C/SPI.
  • Nainstalujte knihovny v IDE a napište program: init → čtení → konverze → CAN zpráva → výstraha.
  • Kalibrujte pomocí přesného měřiče a uložte faktor do EEPROM.
  • Otestujte na OBD‑II scanneru, upravte časování a přidejte watchdog.
  • Rozšiřte o BLE, SD nebo automatické doplňování podle potřeb.

Po projití těchto bodů mít funkční TPMS, které můžete nasadit do vlastního vozidla nebo použít jako výukový modul pro další projekty.

Často kladené otázky

Jaký rozdíl je mezi přímým a nepřímým TPMS?

Přímý TPMS má v každé pneumatice samostatný čidlo, které odesílá tlak a teplotu přímo. Nepřímý používá senzor rychlosti (ABS) a kalkuluje tlak z rozdílných otáček kol. Přímý je přesnější, ale dražší a složitější na instalaci.

Lze programovat TPMS pomocí ESP32?

Ano. ESP32 má Wi‑Fi i BLE a podporuje CAN (přes externí transceiver). Díky velkému množství RAM můžete zároveň zaznamenávat data a posílat je do mobilní aplikace.

Jak často by měl TPMS aktualizovat data?

Většina výrobců volí interval 1-2s. To je dostatečné pro rychlé změny tlaku při brzdění nebo zatáčení, ale ne tak časté, aby se zbytečně spotřebovávala baterie.

Co dělat, když CAN zpráva neodejde?

Zkontrolujte terminátory (120Ω), propojení GND a napájení transceiveru. Pomocí diagnostického nástroje sledujte, zda CAN‑kabel vůbec „vidí“ ostatní uzly. Pokud ne, je pravděpodobně špatná fishe.

Lze použít stejné TPMS i pro kola s různou velikostí?

Ano, pokud senzor podporuje rozsah tlaku odpovídající všem velikostem. Jen nezapomeňte nastavit limitní hodnoty (min/max) individuálně pro každé kolo.

Napsal Lukáš Svoboda

Pracuji jako odborník na automobily a rád píšu o pneuservisu. Mám bohaté zkušenosti s řešením problémů aut a zajišťováním jejich bezproblémového provozu.