
Początkiem tego roku kupiłem sobie nowy ostatni normalny samochód pozbawiony większości nowoczesnych wynalazków – Opel Corsa E. Niestety Unia Jewropejska zadbała o moje bezpieczeństwo i wyposażyła to auto w potrzebne w aucie miejskim jak bielizna profesjonalistce czujniki ciśnienia powietrza w kołach.
Cóż było robić, zima się zbliżała, a koła zimowe, które już miałem, były czujników pozbawione. Natknąłem się wtedy na opracowanie kolegi daro_kp.
https://www.elektroda.pl/rtvforum/viewtopic.php?p=17928074#17928074
Po wykonaniu prób z odbiornikiem RDS stwierdziłem, że mając oscyloskop cyfrowy łatwiej pozyskam dane z czujników za pomocą odbiornika radiowego 433,92 MHz pracującego z modulacją amplitudy. Kupiłem go w komplecie z nadajnikiem za małe pieniądze. Częstotliwość i modulacja zgodna jest z danymi zawartymi w instrukcji Corsy.

No i zaczęło się. Zakładałem pojedynczo koła z mojej Corsy na oś napędową podniesionego na podnośniku starego Punto i kręciłem nimi nasłuchując sygnałów z czujników. (Wyłączcie sobie ASR w aucie!). W tym celu do odbiornika za pomocą jednego tranzystora miałem podłączony malutki głośniczek. Jak uznałem, że sygnał jest dość mocny to podłączyłem do odbiornika oscyloskop, który zarejestrował mi dane w postaci plików .csv, które obrobiłem (odszumiłem) w arkuszu kalkulacyjnym tworząc wykres. Z wykresu oczytałem sekwencję zer i jedynek, którą wystarczyło teraz wpisać do uC z odpowiednim programem sterującym nadajnikiem.
W skrócie wyglądało to tak:

Po zaprogramowaniu Attiny13 i odczytaniu efektu na wyświetlaczu Opla okazało się, że jedno z kół miało dużo mniejsze ciśnienie niż pozostałe (sic) więc wyglądało to „nieprofesjonalnie”. Z lenistwa chciałem ominąć podnoszenie auta i podmianę koła, wyciąganie oscyloskopu i takie tam, więc postanowiłem poprawić dane ręcznie. W opracowaniu daro_kp znalazłem dane na temat jak czytać ramkę czyli to:
TPMS Model: Schrader Electronics EG53MA4.
Contributed by: Leonardo Hamada (hkazu).
Also Schrader PA66-GF35 (OPEL OEM 13348393) TPMS Sensor.
Probable packet payload:
SSSSSSSSSS ???????? IIIIII TT PP CC = 15 bajtów.
- S: sync
- ?: might contain the preamble, status and battery flags
- I: id (24 bits), could extend into flag bits (?)
- P: pressure, 25 mbar per bit
- T: temperature, degrees Fahrenheit
- C: checksum, sum of byte data modulo 256.
Jako, że ilość bajtów z ramki powyżej zgadzała się z ramką odebraną uznałem, że opis pasuje. Teraz mozolnie bit po bicie przetłumaczyłem odebrane bity zapisane w kodzie MANCHESTER na potrzebne dane. Sprawa jest prosta. Impulsy w kodzie MANCHESTER mogą się składać z impulsów krótkich i długich (dwa razy dłuższych). Po tym można na oko poznać prawidłowość odebranych danych. Przy okazji ustaliłem, że czas pomiędzy zboczem narastającym i opadającym impulsu krótkiego wynosi ok. 120us. Impuls długi to automatycznie 240us.

Wyszukałem długie impulsy na otrzymanych wykresach z arkusza kalkulacyjnego ustaliłem gdzie znajdują się znaczące zbocza. Dalej idzie już prosto. Rosnące znaczące zbocze to zero, malejące to jedynka. Po odczytaniu danych i policzeniu sumy kontrolnej w postaci sumy modulo z ustalonych danych oraz porównania z odebraną sumą kontrolną wszystko się zgadzało. Podmiana danych ciśnienia na podglądnięte w innym kole i obliczenie sumy kontrolnej dawało już dane zmodyfikowane.
Pozostało napisać program. Ustaliłem na podstawie oscylogramów, że każdy czujnik wysyła tą samą informację ok. 5 – 6 razy z odstępami ok. 120ms i częstotliwością 1 raz na minutę. Dla prostoty postanowiłem wysyłać pięć razy powtórzoną ramkę z poszczególnych kół co 15s.
Powstał więc następujący program:
Code: vbnet
Częstotliwość oscylatora uC podregulowałem wpisując odpowiednią wartość do rejestru - Osccal = &H56, ustaloną doświadczalnie oscyloskopem, choć pewnie jest to niepotrzebne dla kodu MANCHESTER.
Całość zapakowałem do obudowy ładowarki samochodowej używając odnalezionej w środku przetwornicy.

Możecie tu zaobserwować (dzięki mojemu lenistwu) nowatorski sposób montażu Attiny13 (applause). Przyjrzyjcie się jednak uważnie bo na pierwszym planie prezentuje się układ scalony przetwornicy. Schemat podłączenia? NIE MA! Schemat musicie wyczytać z programu (Portb.3 <-> Data nadajnika, Portb.4 <-> anoda diody LED przez rezystor dajmy na to 330Ohm, a katoda do masy.
Ostatecznie ćwierka to tak:
Jak komuś się przyda to dobrze, jak nie to trudno.
Z przyjacielskim pozdrowieniem M. S.
P. S.
Mało jest danych odnośnie działania systemu TPMS. Ja zauważyłem podczas prób, że moja Corsa stojąca w garażu, oczywiście z wyłączonym silnikiem, w odległości ok 6m od stanowiska prób zarejestrowała sygnały z kół gdy zbierałem dane, przez co po włożeniu emulatora do gniazda zapalniczki i włączeniu zasilania dane na wyświetlaczu nie zmieniły się! Pomyślałem – nie działa! Jednak jazda z emulatorem bez czujników w kołach nie powodowała wygenerowania błędu. Znaczy działa! Dla pewności wyjąłem emulator z gniazda i już po kilku kilometrach wyświetlił się błąd TPMS. Po włożeniu emulatora do gniazda zapalniczki w takt migania diody emulatora zaprogramowane dane powróciły koło po kole na wyświetlacz Corsy. Ujawniła się w tym doświadczeniu droga wnikania danych z czujników do Corsy. Dane prawdopodobnie wnikają przez stale działający odbiornik sygnałów z pilota centralnego zamka. Daje to możliwość przygotowania sprzętu rejestrującego używając kluczyka z pilotem, aczkolwiek sygnał z pilota wydaje się być mocniejszy.
Próbowałem rozpracować jeszcze TPMS Hondy, ale poległem bo prawdopodobnie czujniki Hondy nadają sygnał dużo szybciej i być może z modulacją częstotliwości. Mój odbiornik nie zarejestrował danych poprawnie. Co kraj to obyczaj.
Cool? Ranking DIY