Panel Klimatyzacji LEXUS IS300
PROJEKT wykonałem jakieś 4lata temu.
Mój dobry kolega Paweł zakupił kilka lat temu auto jak w tytule, samochód pochodzi z USA i niestety posiada prędkościomierz i licznik wyskalowany w milach a panel klimatyzacji pokazuje temperaturę w farenchejtach, dodatkowo zegarek na panelu jest tylko dwunastogodzinny (AM-PM).
Auto dostało instalację LPG w związku z tym, że silnik to 2JZ, czyli trzylitrowa rzędowa szóstka lubiąca wypić sporo benzyny. Po założeniu LPG okazało się, że jadąc na samym gazie wskaźnik poziomu paliwa na fabrycznych zegarach opada (pomimo braku ubytku benzyny).
Ja akurat przeczytałem Bluebook-a, więc przyszedł mi do głowy pewien pomysł aby spróbować swoich sił w programowaniu i wymienić fabryczny wyświetlacz w panelu klimatyzacji i zastąpić go własnym podłączonym do atmegi.
Oglądając dziesiątki razy poradnik Mirka wziąłem się za robotę.
Tak prezentował się oryginalny wyświetlacz
Co zawiera ten mini komputer:
Procesor Atmega1284P
Wyświetlacz RAYSTAR RX2402A-FHW (FSTN Positive Transflective).
Zegar DS3231
EEPROM AT24c04
F-RAM FM24C04B - 4K bit Ferroelectric Nonvolatile RAM
Buzer wlutowany w płytkę
Przekaźnik do resetowania poziomu paliwa
Gniazdo dla ATNEL WiFi
Gniazdo do podłączenia interfejsu ELM327
Dwa czujniki temperatury DS18B20 (temp. Wewnętrzna i zewnętrzna)
Wejścia zewnętrzne:
1 analogowe z dzielnikiem napięcia (0 – 24V)
2 obroty silnika
3 sygnał czujnika prędkości samochodu (do zliczania kilometrów)
Wejścia separowane transoptorami:
4 sygnał z cewki elektrozaworu załączającego LPG
Te cztery na transoptorach z możliwością wyboru sterowania +12V lub masą (do wyboru zworkami)
5 sygnał z podświetlenia zegarów (realizacja przyciemniania podświetlenia)
6 sygnał po przekręceniu stacyjki
7 dodatkowe wolne wejście na przyszłość
8 dodatkowe wolne wejście na przyszłość
Wyjścia zewnętrzne:
3 Wyjścia PNP sterowanie +12V (na ULN2003)
Fabryczny wyświetlacz był bardzo wąski więc miałem nie lada wyzwanie aby znaleźć taki który się zmieści w jego miejsce.
I znalazłem w TME dwa małe wyświetlacze COG firmy RAYSTAR obsługiwane magistralą I2C.
RX2002A-FHW-TS alfanumeryczny 2 wiersze po 20 znaków z kontrolerem ST7036i.
Ten okazał się zbyt krótki bo Okienko w panelu było dość długie, więc wybrałem ten 2x24znaki.
RX2402 alfanumeryczny 2 wiersze po 24 znaki z kontrolerem RW1062.
Dość łatwo było napisać do niego bibliotekę oczywiście bazując na Mirkowej bibliotece od LCD.
Dużym plusem tego wyświetlacza jest to, że jest czytelny nawet bez podświetlenia, a samo podświetlenie przerobiłem, wymieniając diodę LED z białej na pomarańczową bo wszystko w samochodzie jest podświetlane właśnie tym kolorem.
Początkowo zaprojektowałem w Altiumie małą płytkę prototypową z samym wyświetlaczem abym mógł włożyć go w zestaw ATB i napisać do niego bibliotekę.
Trochę kiepsko wygląda ta płytka bo nie ma soldermaski ale w celach testowych jest spoko.
Raster pinów tego wyświetlacza to 1,27mm czyli dość gęsto.
Nie chciałem się bawić żelazkiem z takimi wąskimi ścieżkami, a z pomocą przyszedł mi inny kolega który wyfrezował ją na mini CNC w pracy.
Bardzo miłym zaskoczeniem okazało się, że ten wyświetlacz ma możliwość wyświetlać duże fonty, czyli zamiast dwóch linii jest jedna ale za to duże znaki. Na poniższym zdjęciu wyświetlacz jest w innej wersji niż docelowy, czyli negatywowy z oryginalnym białym podświetleniem. Cały program pisałem bazując na zestawie ATB. Można powiedzieć, że 90% programu napisałem będąc w delegacjach we Włoszech zdecydowanie lepiej tam było pisać bo nikt mi nie przeszkadzał.
Procek wybrałem trochę na wyrost bo Atmega1284 ale nie był drogi i wiedziałem, że nawet jak kiepsko napiszę program to nie zabraknie mi ani flesha ani RAM-u.
Finalnie program po kompilacji zajął około 20KB Flash i około 1KB RAM.
Zegar czasu zrobiłem na DS3231 ponieważ w samochodzie panują duże różnice temperatury a zależało mi aby nie trzeba było często go korygować.
Zamontowałem także złącze dla modułu ATNEL_WiFi bo w planie miała być komunikacja ze smartfonem (ale nie została zrobiona).
Drugi UART wyprowadziłem na złącze zewnętrzne bo chciałem podłączyć się do OBD samochodu przez interfejs ELM327.
Temperatury mierzone są czujnikami DS18B20 na kablach.
A ten od temp. zewnętrznej ma kabel prawie 1,5m.
Zastosowałem przewód Liycy 3x0,25mm2 a same czujniki zalane są żywicą epoksydową w nierdzewnych gilzach.
A tak prezentują się pojedyncze strony na wyświetlaczu:
Kiedy wsiadamy do samochodu ekran prezentuje się następująco.
Oczywiście podświetlenie jest wtedy wyłączone ale naciśnięcie któregokolwiek przycisku zapala to podświetlenie na 10s. (gdyby ktoś po ciemku chciał podejrzeć godzinę czy temperaturę).
Wyświetlane są także naprzemiennie Godzina.
I temperatura zewnętrzna.
Kiedy przekręcimy kluczyk w stacyjce przechodzimy do pierwszej strony.
Same strony przełączamy przyciskami „H i M” przycisk „:00” służy za swego rodzaju „Enter”.
Na tej pierwszej stronie mamy tylko datę, godzinę oraz obie temperatury wewnętrzną i zewnętrzną.
U góry po lewej ilość przejechanych kilometrów na samym gazie „g” lub na benzynie „b” gdzie rodzaj paliwa sygnalizowany jest literką na końcu. Przełączanie między „b” i „g” dokonywane jest automatycznie kiedy załączy się elektrozawór od LPG ewentualnie można zmienić wskazanie przyciskiem po lewej „:00”. Licznik ten można resetować przytrzymując przycisk „:00” przez 3s. zresetowanie sygnalizowane jest piknięciem buzzera.
Na dole po lewej jest licznik wszystkich przejechanych kilometrów i nie można go zresetować.
Po prawej temperatury: „z zewnętrzna” i „w wewnętrzna”.
Na tej stronie jest dodatkowy licznik dzienny oznaczony „d” który zlicza kilometry bez znaczenia na rodzaj paliwa i także można go resetować.
Tu ma my kontrolę napięcia akumulatora.
Czasem może się jednak zdarzyć, że zechcemy wiedzieć tak naprawdę ile jest benzyny.
Jednym z zadań komputerka jest resetowanie wskazania poziomu paliwa przez fabryczne zegary samochodu.
Rezystor 100 omów włączony szeregowo w obwód czujnika poziomu paliwa ma za zadanie oszukanie komputera w aucie tak aby myślał on, że jest pusto całkowicie w zbiorniku.
Przekaźnik zwiera ten rezystor od razu po włączeniu stacyjki a po wyłączeniu jej jest rozwarty.
W internecie sprzedają to rozwiązanie nazwane jako uwaga „Emulator Poziomu Paliwa – Tank Fopper”. A to zwykły przekaźnik z jednym rezystorem podłączany pod stacyjkę.
Będąc na pierwszej stronie gdzie wyświetlana jest data zegarek i temperatury, kiedy przytrzymamy przycisk „:00” przez 5s piknie buzzer i jesteśmy w „menu serwisowym”:
Tu ustawiamy czas
Tu ustawiamy datę łącznie z dniem tygodnia
Możemy ustawić kontrast wyświetlacza ponieważ jest on regulowany za pomocą jednego kanału PWM a także jasność podświetlenia wyświetlacza kiedy załączone są światła do jazdy nocnej, tak zwany „Dimmer”.
Podglądamy temperaturę wewnątrz układu RTC DS3231 czyli mniej-więcej jaka panuje na płytce PCB.
Tu widać wartości rejestrów ADC przy pomiarze napięcia akumulatora i poziomu paliwa w zbiorniku.
Tu można sprawdzić ID czujników DS18B20.
Tu można zmienić wartość dzielnika dla obliczania przejechanych metrów.
Przydało mi się podczas kalibracji bo nie musiałem wgrywać całego programu za każdym razem od nowa.
A tu jest bardzo przydatna opcja bo można przypisać odpowiedni czujnik DS18B20 do wyświetlania temperatury zewnętrznej lub wewnętrznej. Gdyby uszkodził się któryś czujnik to podłączamy nowy i w razie potrzeby zamieniamy miejscami wskazania.
I tu ostatnia strona gdzie można wyjść z menu serwisowego.
Docelowa płytka drukowana została zaprojektowana w AD17 dzięki poradnikom Pawła Kardaśa.
a wykonana w firmie TechnoSerwis i kosztowała 100zł. Jeszcze wtedy nie wiedziałem, że w chinach można zamówić dużo taniej.
Zaznaczam, że to mój pierwszy projekt na którym uczyłem się programować AVR-y w C i to dzięki poradnikom Mirka.
Panel działa już z czwarty rok i do tej pory nie było z nim żadnych kłopotów.
Pozdrawiam Paweł „P3ndz3l3k”.