05Portfolio
led-auto — brama Bluetooth do Golfa IV
Brama na Raspberry Pi Zero 2 W w moim Golfie IV: zapala światło przy wejściu, gdy otwierają się drzwi, i steruje taśmą LED, a z telefonem łączy się szyfrowanym kanałem. Działa w aucie z panelem w Android Auto. Jej logikę sprawdziłem automatycznie we wszystkich możliwych stanach.
W liczbach
- Reguły sprawdzone we wszystkich stanach
- 18
- Testy automatyczne
- 154
- Celowe błędy wyłapane przez testy
- 10/10
Problem
Sterownik taśmy LED w aucie przyjmuje po Bluetooth tylko jedno połączenie, więc telefon i drugi sterownik zaczęłyby się o nie bić. Nic nie mówi światłu, że drzwi właśnie się otwierają — fabryczny zamek daje tylko dwa gołe sygnały: pozycję rygla i stan drzwi. Do tego sterownik taśmy nie ma żadnego szyfrowania i nie zgłasza swojego stanu.
Podejście
Napisałem w C++ program na Pi Zero 2 W, który czyta cztery sygnały z zamków drzwi i jako jedyny steruje taśmą LED, więc nic nie walczy o połączenie. Napięcie z instalacji auta obniża dzielnik, a krótkie zakłócenia są odfiltrowywane. Telefon z aplikacją WireAmbi łączy się z bramą szyfrowanym kanałem WireLink, zgodnym bajt w bajt z wersją w aplikacji. Przy parowaniu porównuje się sześć kolorów na taśmie i w telefonie, a potwierdza się je otwarciem drzwi kierowcy. Logikę bramy oddzieliłem od sprzętu, dzięki czemu mogłem ją sprawdzić automatycznie w każdej możliwej sytuacji: 12,6 mln stanów i 18 reguł. Wśród nich są te, że taśmą steruje tylko jedno urządzenie, że brama oszczędza akumulator i że światło wejścia zawsze się zapali. Zdalny dostęp idzie przez szyfrowany przekaźnik i celowo nie pozwala odryglować auta.
Efekt
W aucie brama robi to, co powinna, a wcześniej sprawdziłem to na stole testowym na prawdziwych wejściach zamka: otwarcie drzwi zapala światło wejścia, zamknięcie przywraca kolor ustawiony w telefonie, a zaryglowanie po wyjściu gasi wszystko. Jest przygotowana na nagłe odcięcie zasilania i po trzech twardych resetach wróciła do pracy bez strat. Zajmuje ok. 11 MB pamięci, a opóźnienia w jej pracy nie przekraczają 1 ms. W aucie działa razem z panelem w Android Auto. Kod do sterowania szybami, zamkiem centralnym i lusterkami jest napisany, ale tych funkcji nie podłączyłem jeszcze w aucie.