Pokazywanie postów oznaczonych etykietą użytkowy. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą użytkowy. Pokaż wszystkie posty

7 maja 2026

Smartwatch motocyklowy


Zegarek na motocyklu jest bardzo przydatnym urządzeniem. Korzystając z tego środka transportu nie można w prosty sposób sprawdzić czasu spoglądając na zegarek naręczny czy telefon. 8 lat temu zbudowałem do swojego motocykla zegarek, który posiadał dodatkowo pomiar napięcia akumulatora i temperatury powietrza. Tamten projekt, dopasowany wizualnie do licznika motocykla, można zobaczyć tutaj:


Od ponad roku mam nowy motocykl. Jego licznik ma co prawda wbudowany zegarek, ale korzystanie z niego jest niewygodne. Dlatego postanowiłem zbudować nowy zegarek, dopasowany do konsoli nowego pojazdu. Zegarek ten miał mieć sprawdzone już i przydatne funkcje:
  • wyświetlanie bieżącego czasu,
  • wyświetlanie napięcia akumulatora,
  • wyświetlanie temperatury powietrza,
  • alarm o niskiej temperaturze (ślisko),
  • alarm o niskim napięciu (brak ładowania).
Plansza z alarmu o niskim napięciu

Postanowiłem jednak znacznie poszerzyć funkcjonalność nowego urządzenia o obsługę telefonu. Dla niezorientowanych - korzystanie z telefonu na motocyklu jest wybitnie niewygodne. Problemu nie stanowi rozmowa bo do tego używa się wbudowanego w kask zestawu słuchawkowego lub interkomu. Natomiast wyzwaniem jest odebranie/odrzucenie rozmowy czy inicjowanie nowej. Niektórzy motocykliści montują telefon do uchwytu na kierownicy lub baku lecz obsługa dotykowego ekranu w rękawicach to już wyższa ekwilibrystyka. Postanowiłem podejść do tematu inaczej.

Interfejs użytkownika

W moim zegarku do prezentacji informacji zastosowałem okrągły, kolorowy wyświetlacz graficzny, stylistycznie dopasowany do okrągłego licznika głównego. Na ekranie głównym, w centralnym miejscu wyświetlany jest aktualny czas. Powyżej z lewej strony wyświetlana jest temperatura a z prawej napięcie akumulatora. Powyżej wyświetlana jest ikona prezentująca stan baterii telefonu. Na każdym innym ekranie część centralna ekranu wyświetla informacje kontekstowe ale czas pojawia się w górnej jego części. Do obsługi urządzenia służą dwa fizyczne przyciski umieszczone na kierownicy - dostępne kciukiem, dzięki czemu do obsługi nie potrzeba odrywać rąk od kierownicy. Mój smartwatch łączy się za pośrednictwem Bluetooth Low Energy ze smartfonem, dzięki czemu zapewnia dodatkowe przydatne funkcje:
  • odbieranie/odrzucanie przychodzących połączeń telefonicznych,
  • rozłączanie trwającej rozmowy,
  • inicjowanie połączeń poprzez wybór spośród 4 ulubionych/ostatnich numerów telefonów,
  • odczyt przychodzących wiadomości sms/komunikator i nagłówków e-mail.
  • informuje o stanie baterii telefonu i zestawu słuchawkowego
Dodatkowe przyciskami (czerwony i zielony) na kierownicy

Obsługa polega na dłuższym lub krótszym naciskaniu przycisków a ikonki na wyświetlaczu podpowiadają co i jak. W dolnej części ekranu wyświetlają się elementy symbolizujące przyciski i funkcje przez nie obsługiwane. Każdy z dwu przycisków może mieć dwie funkcje dostępne przez krótkie naciśniecie (mała ikonka) i duże naciśnięcie (duża ikonka).

Dla przykładu na ekranie głównym:
  • czerwony krótko - wiadomości tekstowe (liczba określa ile ich czeka na przeczytanie),
  • czerwony długo - ekran nawigacji,
  • zielony krótko - lista ulubionych kontaktów telefonicznych,
  • zielony długo - lista ostatnich połączeń telefonicznych.
Dla przykładu na liście połączeń:
  • czerwony krótko - kursor do góry,
  • zielony krótko - kursor do dołu,
  • czerwony długo - wyjdź do ekranu głównego,
  • zielony długo - wybierz numer.
W trakcie przychodzącego połączenia:
  • zielony - odbierz połączenie,
  • czerwony - odrzuć i powróć do ekranu głównego.
Jeśli jest tylko duża ikonka w obszarze podpowiedzi czas naciśnięcia jest nieistotny.


    

Zaimplementowałem też rozbudowane menu ustawień, które jest dostępne z ekranu głównego - wyjątkowo poprzez jednoczesne naciśnięcie obu przycisków. W menu tym można m.in.:
  • ustawić czas (czas aktualizuje się też z automatycznie ze smartfona),
  • ustawić progi alarmów (napięcie/temperatura),
  • aktywować przypomnienie o braku połączenia z zestawem słuchawkowym.

    


Nawigacja

Dodatkową extra przydatną funkcją jest nawigacja. Telefon można mieć w kieszeni a na ekranie smartwatcha będą się wyświetlać wskazówki nawigacyjne. Nawigację Google należy nastawić i uruchomić na telefonie przed jazdą. Na ekranie wyświetlane są wskazówki nawigacyjne w formie ikonki pod którą wyświetla się dystans. Obok jest wyświetlana krótka wskazówka tekstowa a pod nią informacja ile zostało czasu / dystansu do celu. Jednocześnie na słuchawkach dostajemy wskazówki głosowe nawigacji. Działanie nawigacji można też zakończyć w trakcie. Ale aby ją ustawić lub ponownie aktywować trzeba już użyć ekranu smartfona.

    
Konstrukcja

W konstrukcji urządzenia wykorzystałem 3 gotowe moduły:
  • okrągły wyświetlacz LCD TFT 240x240 sterowany poprzez interfejs SPI ze sterownikiem GC9A01,
  • płytkę rozwojową ESP32-S3 SuperMini,
  • moduł przetwornicy/ładowarki USB (12/24>>5V).
Schemat urządzenia

Aby połączyć te moduły w zwartą całość zaprojektowałem płytkę drukowaną (a raczej 3 płytki), która została wykonana w chińskiej fabryce. Po pocięciu trzy płytki tworzą razem pudełkową konstrukcję w której na górze znajduje się wyświetlacz. Na jednej ściance znajduje się zasilacz/ładowarka a na drugiej moduł procesora ESP32. Dodatkowo na płytce procesora umieściłem też zegar czasu rzeczywistego PCF8563 wraz z bateryjką podtrzymującą oraz czujnik temperatury DS18B20. Na płytce tej znajduje się też 5-pinowe gniazdo służące do podłączenia zasilania (12V z instalacji motocykla "po stacyjce") oraz przyłącze modułu przycisków (zamontowanego dogodnie na kierownicy).

Płytka urządzenia (przed podziałem na 3 części) 
Te trzy płytki są ze sobą połączone (zlutowane na stałe) za pośrednictwem kątowych złącz pinowych. Dodatkowe połączenie stanowi 4 płytka z miedziowanego laminatu, która jest ścianką dolną i jednocześnie pokrywą.

   

Urządzenie zostało zaprojektowane tak, aby pasowało do okrągłej obudowy wykonanej z czarnego plastikowego dekla od farby w sprayu. W dekielku tym wycięto okrągły otwór/okienko w który wkleiłem od środka szybkę wykonaną z pleksi. Użyłem elastycznego, czarnego kleju do naprawy GSM. Obudowa ma przykręcony metalowy wspornik który służy do przymocowania smartwatcha do licznika motocykla. W dolnym deklu przez otwory dostępne jest nie tylko gniazdo przyłączeniowe do zasilania i przycisków ale również gniazdo USB modułu zasilacza, które można wykorzystać do zasilania np. kamerki sportowej zamontowanej na kierownicy (włącza się wtedy automatycznie po przekręceniu stacyjki - jak rejestrator w aucie).

  

  

Oprogramowanie

Oprogramowanie składa się z dwóch części. Zasadniczy program na procesor ESP32-S3 został napisany w środowisku Arduino z wykorzystaniem dedykowanych bibliotek:
  • "RTClib.h" - Real Time Clock PCF8563
  • <OneWire.h> - One Wire Bus
  • <DallasTemperature.h> - DS18B20 temperature sensor
  • <BLEDevice.h> -BLE device lib
  • <BLEUtils.h> - BLE utils lib
  • <BLEServer.h> - BLE server lib
  • "SPI.h" - SPI Bus
  • "Adafruit_GFX.h" - Adafruit Display lib
  • "Adafruit_GC9A01A.h" - Adafruit GC9A01A lib
Dużo czasu zajęło testowanie oprogramowania nawigacji w warunkach bojowych, urządzenie było jeszcze w fazie prototypu zbudowanego na płytce stykowej.


Program musi jednocześnie obsługiwać:
  • wyświetlacz (interfejs ISP)
  • zegar czasu rzeczywistego PCF8563 (interfejs I2C)
  • czujnik temperatury DS18B20 (interfejs 1-wire)
  • pomiar napięcia pokładowego 12V (ADC poprzez dzielnik napięcia)
  • klawiaturę (dwa przyciski na osobnych pinach)
  • komunikację Bluetooth Low Energy
Obsługa wyświetlacza jest dość prosta, chociaż zaprojektowanie przejrzystego i funkcjonalnego interfejsu użytkownika zajęło trochę czasu. Prezentowane informacje są stylistycznie i kolorystycznie dopasowane do licznika motocykla. Wspomogłem się gotowymi symbolami graficznymi oraz cyferkami, które przygotowałem w programie graficznym i wkompilowałem do kodu. Jestem zadowolony z uzyskanego efektu. Wisienką na torcie jest animacja z logo, która wyświetla się po uruchomieniu systemu :-)


Sporym wyzwaniem była komunikacja z telefonem. Do tego powstała osobna apka na smartfona, której napisanie zleciłem znajomemu programiście urządzeń mobilnych. Niestety dopracowanie szczegółów i ustabilizowanie komunikacji zajęło najwięcej czasu. Komunikacja BT-LE polega bowiem na wystawianiu ograniczonych ilościowo i czasowo porcji danych. Sporym wyzwaniem było przysyłanie ze smartfona ikonek nawigacyjnych - opracowany został specjalny autorski algorytm kompresji, który grafiki 96x96 (1152 bajtów) kompresuje kilkukrotnie.

Testy urządzenia wykazały jego ogromną użyteczność. Nie trzeba się zatrzymywać aby sprawdzić: czy sms który nadszedł jest istotny, czy odbierać przychodzące połączenie. Do tego nawigacja, która nie jest aż tak wygodna jak mapa, ale jest naprawdę użyteczna. Niestety prace nad urządzeniem trwały z dużymi przerwami ponad rok. Koszty wykonania nie były wysokie ale wymagały sporej części pracy mechanicznych. Obecnie zabrałbym się za to inaczej są już bowiem dostępne gotowe i przystępne cenowo moduły wyświetlacza z wbudowanym procesorem. Zastosowanie takiego gotowego modułu zminimalizowało by prace mechaniczne a w pracach programistycznych można się znacznie wspomóc AI - ja większość kodu pisałem samodzielnie...

Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl


7 kwietnia 2026

Sterownik (fotokomórka) do automatycznego kosza na śmieci

Na portalach zakupowych można nabyć urządzenie określane jako "Automatyczny kosz na śmieci". Na czym ta "automatyczność" polega? Otóż kosz taki można otworzyć na trzy sposoby:
  • czujnikiem zbliżeniowym - po wykryciu obiektu 10-15 cm nad pokrywą otwiera ją na 5 sekund,
  • czujnikiem wstrząsowym - po "delikatnym" trąceniu kosza ten otwiera się na 5 sekund,
  • przyciskiem - po naciśnięciu którego kosz otwiera się i pozostaje otwarty aż do ponownego naciśnięcia przycisku.


Jak wiadomo w polskiej kuchni kosz znajduje się zwykle w szafce pod zlewozmywakiem. Niestety do takiego umiejscowienia kosz ten zupełnie się nie sprawdził. W założeniach kosz miał sobie stać w szufladzie pod zlewozmywakiem i otwierać się po jej wysunięciu - reagując na ruch (wstrząs). Niestety aby zadziałał czujnik wstrząsowy kosz musiał dostać sporego kopniaka - na lekkie wstrząsy przy wysuwaniu szuflady nie reagował. Zatem klapa musiała być wyzwalana bezdotykowo ale to też było upierdliwe - 5 sekund to często za krótko aby coś wrzucić, zatem często śmieć lądował na pokrywie zamiast w koszu. Na dodatek po wsunięciu szuflady kosza czujnik reagował na zlewozmywak znajdujący się ponad nim i kosz pozostawał otwarty w zamkniętej szufladzie. Ponadto odniosłem wrażenie że szybko wyczerpują się baterie (2 x AA), a raczej kosz przestaje działać pomimo jeszcze znośnego napięcia...

Reasumując - nietrafiony zakup. Czy aby na pewno? Sam kosz pasował wizualnie i gabarytowo. Mechanizm otwierający klapę też działał szybko i pewnie. Jedynie sterownik był nieadekwatny do potrzeb. Postanowiłem to zmienić i wykonać nowy.

Założenia:
  • reagowanie na światło a nie ruch - w zamkniętej szufladzie jest ciemno,
  • klapa powinna otwierać się przy otwarciu szuflady i pozostawać otwarta do jej zamknięcia,
  • możliwe także zamknięcie lub otwarcie klapy przy użyciu przycisku na obudowie.
Płytka starego sterownika była dość prosta. Na górze posiadała przycisk ręcznego otwierania, czujnik zbliżeniowy, diodę LED (wskazującą tryb pracy), sterownik silnika w postaci układu SA8301 w obudowie SOP8 oraz niezidentyfikowany mikrokontroler w obudowie SOP16. Z drugiej strony płytki znajdowały się dwa gniazda przyłączeniowe (baterii i silnika), kondensator elektrolityczny oraz prymitywny przełącznik wstrząsowy.


Moja płytka miała mieć te same gabaryty oraz elementy umiejscowione w tych samych miejscach - tak aby mogła być zamontowana w miejscu starej (którą pozostawiłem nienaruszoną aby możliwy był powrót do oryginału). Nowa płytka drukowana została zaprojektowana w programie Eagle, wykonana metodą termotransferu i pocynowana bezprądowo. W miejscu diody LED umiejscowiony został fotorezystor, pełniący rolę czujnika światła. Ponieważ nie mogłem szybko zakupić sterownika SA8301 zastosowałem inny - dwukanałowy MX1508 (w obudowie SOP16) - kanały zostały połączone równolegle co powinno zwiększyć obciążalność prądową. Jako mikrokontroler zastosowałem stary, poczciwy ATtiny13A.

Fotorezystor FR pracuje w dzielniku z rezystorem R, który jest załączany tylko na czas pomiaru - co obniża znacznie zużycie prądu. Ponadto sam procesor pozostaje cały czas w uśpieniu (SLEEP_MODE_PWR_DOWN) wybudzany watchdogiem co ok. 0,25 sek. tylko na czas pomiaru lub przyciskiem (podłączonym pod pin PB1 - INT0). Program został napisany w języku C i skompilowany w darmowym środowisku AVR-GCC.


Początkowo planowałem wlutować się z programatorem tylko na czas programowania ale podczas montażu przeprowadziłem modyfikację i wmontowałem 6pinowe gniazdo programowania, co umożliwia szybką zmianę programu w razie potrzeby. Stąd na stronie wierzchniej jest kilka krosów i rezystor przewlekany zamiast smd. Gniazdo się przydało gdyż w trakcie testów poprawiłem jeszcze jedną upierdliwą cechę. Otóż zarówno w oryginale jak i w pierwszej wersji programu przycisk uruchamiał silnik klapy natychmiast po jego naciśnięciu, co powodowało przytrzaskiwanie palca przez klapę. Po modyfikacji programu klapa zaczyna ruch dopiero po zwolnieniu przycisku i odczekaniu chwilki na zabranie ręki.


Ostatecznie mogę uznać moją modyfikację za udaną i w pełni spełniającą oczekiwania. Mała rzecz a cieszy :-)


Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl

3 stycznia 2025

Jak przerobić radio Taraban na... głośnik bluetooth

Wnętrze odbiornika z wbudowanym modułem bluetooth

W mojej kuchni od zawsze stoi na lodówce stare radio Unitra Diora Taraban 2 DMP-602. Słuchałem go zarówno rano, jak i wieczorem, a w weekendy również przez cały dzień. Niestety treści emitowane w radiu w ostatnim czasie (a szczególnie od roku) odstręczają mnie od słuchania. Już od dawna zbyt dużo czasu antenowego zajmują krzykliwe, prostackie reklamy, ale teraz do tego doszła prymitywna, ideologiczna indoktrynacja. Nie mogę dłużej tego znieść. Instytucja Polskie Radio upadła. Zresztą od roku i tak znajduje się w stanie likwidacji...

Zatem nie ma na co czekać. Skoro już ciężko tego słuchać, a niebawem fizycznie może się nie da, to czas na zmiany

Wspomniany odbiornik Taraban ma dla mnie wartość sentymentalną. Składają się nie tylko wysłuchane audycje (w starych dobrych czasach), ale również klimat to warzyszący ich słuchaniu. Meblowa obudowa odbiornika i podświetlana żarówkami skala tworzą niepowtarzalny nastrój. Istotne jest również oryginalne brzmienie odbiornika, za które odpowiada drewniana skrzynka i papierowy, eliptyczny głośnik. Niech się schowają tandetne kuchenne radiobudziki czy płaskobrzmiące głośniczki Bluetooth.

Więcej o budowie tego odbiornika można poczytać w wątku (na forum elektroda.pl):

Moduł z adapterem do zasilania zamontowany we wnetrzu odbiornika obok głośnika

Zatem radio w kuchni musi zostać, ale skoro w mojej wiosce na falach eteru nic rozsądnego nie ma, to trzeba słuchać z neta. Postanowiłem "przestroić" odbiornik tak, aby odbierał "pasmo Bluetooth"  Modyfikację postanowiłem zrobić w jak najmniej inwazyjny sposób. Użyłem gotowego modułu Bluetooth, jaki można zakupić za kilka złotych. Jakość jego dźwięku jest wystarczająco dobra. Taraban ma wejście - gniazdo DIN (a nawet dwa), na które można podać sygnał z zewnętrznego źródła. Jednak źródło to podłączone jest poprzez rezystor. Postanowiłem sygnał podać bezpośrednio na przełącznik isostat. Oba kanały (L i R) zwarłem - radio jest wszak monofoniczne.

Fragment schematu ideowego odbiornika zzaznaczonym miejscem podłączenia sygnału i zasilania

Do zasilania modułu użyłem napięcia "podkradzionego" z żaróweczek podświetlających skalę. Jest to napięcie przemienne 6,3 V i co ważne, pochodzi z osobnego uzwojenia transformatora, zatem jest galwanicznie oddzielone od masy odbiornika radiowego - a to jeden z warunków poprawnego działania modułu Bluetooth (masy zasilania i wyjścia nie mogą się łączyć).

Schemat adaptera zasilania

Oczywiście do jego zasilania napięcie przemienne trzeba wyprostować i poddać stabilizacji. Układ zasilania zmontowałem na małej płytce, która stanowi też bazę dla samego modułu Bluetooth.

Moduł na płytce adaptera zasilania

Moduł ten zamontowałem we wnętrzu odbiornika, a sygnały wyjściowe są podłączone za pomocą złączek wsuwanych na pin isostatu oraz kołka masowego płyty głównej radioodbiornika, zatem bez żadnej ingerencji w budowę radioodbiornika.

Miejsce przyłączenia sygnału do obwodu radioodbiornika 

Radio w roli głośnika funkcjonuje znakomicie. Mogę słuchać ze smartfona zarówno muzyki, jak i audycji radia internetowego, które w odróżnieniu od tego z eteru, wolne są od nachalnych reklam i mdłej politycznej poprawności.


Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl

7 listopada 2024

Solarna lampa do drewutni



Znów zmieniono czas i znów musiałem chodzić po drewno po ciemku. Tym razem zmobilizowałem się i "wystrugałem" sobie lampkę solarną z przydasi znalezionych "w szufladzie". Jako właściwa lampka służy samochodowe, ledowe światło dzienne z demontażu (drugie sie przepaliło). Lampka ta jest zasilana z trzech ogniw LiIon 18650 pochodzących z odzysku. Załączanie światła następuje za pomocą wyłącznika łańcuszkowego.


Ciekawostką jest układ ładowania słonecznego z panelu solarnego (kiedyś był w komplecie z pompką - fontanną oczka wodnego, ale pompka się popsuła). Napięcie wytwarzane przez ten panel 7-12V jest podnoszone przetwornicą step-up do wartości 12,3V, która to ma za zadanie ładować ogniwa LiIon umieszczone w koszyczku. Ogniwa maja podłączony balanser równoważący proces ładowania.


Dodatkowo równolegle z ledową lampą podłączony jest mały woltomierz pełniący funkcję wskaźnika naładowania. Wszystkie elementy (z wyjątkiem panelu solarnego) zostały wbudowane do plastikowej obudowy, dzięki czemu urządzenie stanowi kompaktową całość (łatwo demontowalną z krokwi na której zostało zawieszone). Sam panel solarny jest przyłączany kablem z wtykiem DC 5,5 ale zamiast niego celem podładowania ogniw można podłączyć zasilacz sieciowy (5-12V).


Lampa została zmontowana w dwa wieczory z elementów znalezionych w szufladzie (z odzysku lub zakupionych u "majfrenda" na zapas). Tylko dwie części kupiłem extra - wyłacznik łańcuszkowy i... hydrauliczny uchwyt rury, który trzyma panel solarny. Oświetlenie działa znakomicie. Ogniwom może zaszkodzić mróz ale na zimę zostanie zdemontowane bo drewna opałowego używam tylko w okresach przejściowych (wiosna-jesień).



Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl

4 września 2023

[Caraudio] Opel CAN-BOX TV-OUT


Odkąd radioodbiorniki zagościły w samochodach pewien problem stanowiło podłączenie ich do instalacji samochodowej - nie było bowiem jednolitego sposobu. Dopiero w latach 90-tych opracowano standard złącz tzw. kostki ISO oraz rozmiar radioodbiornika tzw. DIN. Co prawda producenci aut często go ignorowali stosując własne rozwiązania ale dostępne były przejściówki umożliwiające podłączenie innego radia w miejsce firmowego. Problem pojawił się dekadę później kiedy do łączności z radiem użyto magistrali CAN-BUS a radioodbiorniki zaczęły być silnie zintegrowane z deską pojazdu i niekompatybilne wymiarowo.


W samochodach Opel Astra H (Corsa D, Zafira B) fabrycznie montowano radioodbiorniki o rozmiarze 2-DIN (z nietypowym - trapezowym frontem). Jednak funkcjonalność firmowego radioodbiornika jest dość uboga jak na obecne czasy (chociażby brak w nim odtwarzacza plików czy Bluetooth). Aż prosi się aby zmienić go na coś nowocześniejszego. Niestety zadanie jest utrudnione z uwagi na wspomnianą magistralę CAN. Trzeba się zatem liczyć z ograniczeniem funkcjonalności nowego radia albo dokupić specjalne urządzenie odczytujące dane z w/w magistrali i udostępniające je na złączu ISO czyli tzw. CAN-BOX. Jednak CAN-BOX to wydatek kilkuset PLN i nie ma pewności czy będzie do końca kompatybilny z radioodbiornikiem...




Z uwagi na to iż mój fabryczny radioodbiornik niedomagał postanowiłem go wymienić na tanie, chińskie radyjko samochodowe z Windows CE. Zakupiłem zatem tylko niezbędne okablowanie oraz ramki dopasowujące radio do trapezowatego otworu w Oplu, a adapter CAN-BOX postanowiłem zbudować samodzielnie. Powstało urządzenie, które umożliwia to samo co fabryczny adapter CAN-BOX czyli:
  • odczytuje z magistrali CAN informacje o przekręconym kluczyku stacyjki i ustawia ten stan na pinie ACC kostki ISO radia,
  • odczytuje z magistrali CAN informacje o włączonych światłach i ustawia ten stan na pinie ILL kostki ISO radia,
  • odczytuje z kierownicy informacje o naciśniętych przyciskach i ustawia odpowiednią rezystancję na złączu KEY kostki ISO radia.

Ponadto moje urządzenie umożliwia też:
  • włączenie radia bez kluczyka (dodatkowym przyciskiem),
  • reset radia (które sporadycznie potrafi się zawiesić) oraz adaptera (dłuższe przytrzymania w/w przycisku),
  • wywołanie ekranu ustawień komputera samochodu przyciskiem na kierownicy (oryginalnie wywołanie tej funkcji odbywało się tylko z poziomu fabrycznego radioodbiornika),
  • szybki powrót do głównego ekranu komputera przyciskiem na kierownicy (oryginalnie wywołanie tej funkcji było możliwe z poziomu fabrycznego radioodbiornika),
  • odczyt napięcia akumulatora oraz temperatury silnika z magistrali CAN i prezentacja tych informacji na planszy wyświetlanej na ekranie radioodbiornika z pomocą wejścia TV-AUX. To extra funkcja - nie spotykałem się z takim wykorzystaniem wejścia TV w radioodbiorniku!
(Oryginalnie w samochodzie nie ma wskaźnika temperatury. Za pomocą klawiszologii oryginalnego radia jest możliwe wywołanie nieprzejrzystej planszy - tzw. trybu diagnostycznego, gdzie informacje te są obecne).

Jak to działa?

W wiązce kablowej oryginalnego radioodbiornika występują sygnały czterech głośników auta, permanentny plus akumulatora (B+), masa oraz dwie linie magistrali CAN (L i H). Można zakupić gotową przejściówkę ze złącza OPEL do ISO wraz z niezbędnym separatorem instalacji antenowej. Niestety podłączenie innego radia utrudnia brak sygnału kluczyka stacyjki ACC (tzw. accessory), który jest wymagany przez radioodbiornik z kostką ISO. Podłączenie tej linii do B+ skutkuje zwiększonym poborem prądu na postoju i szybkim rozładowaniem akumulatora. Należy zatem użyć dodatkowego wyłącznika. Najkorzystniej podłączyć go jednak nie do B+ a do... lampki podświetlenia schowka. Napięcie tam pojawia się tuż po otwarciu drzwi i zanika po 20 minutach (lub 20 minutach po zgaszeniu silnika). Dzięki temu radio samo wyłączy się i nie będzie pobierać prądu na postoju. Do zasilania mojego urządzenia również użyłem napięcia z lampki schowka, dzięki czemu nie musiałem implementować trybów zmniejszonego poboru prądu (usypianie) oraz kłopotliwego wybudzania.


W konstrukcji urządzenia wykorzystałem dwa gotowe moduły. Pierwszym jest - znany wszystkim - Arduino Nano. Zwykle w swoich urządzeniach unikałem stosowania Arduino, tym razem zbudowałem w pająku prototyp i a że oprogramowanie działało sprawnie postanowiłem pozostać z tą platformą. Drugim modułem jest MCP2515 CANBUS i wymaga on osobnego omówienia.

Magistrala CAN jest specjalnym rodzajem interfejsu odpornego na zakłócenia i cechującego się dużą niezawodnością. Od strony fizycznej jest to dwuprzewodowa skrętka z liniami oznaczanymi LOW i HIGH zakończona terminatorami 120R - transmisja jest różnicowa. CAN jest interfejsem szeregowym i ma charakter rozgłoszeniowy. Każda ramka danych rozpoczyna się identyfikatorem nadawcy - w jednej magistrali nie powinny się znajdować dwa urządzenia nadające z tym samym identyfikatorem. Magistrala CAN od lat 90-tych jest stosowana w motoryzacji do łączenia poszczególnych podzespołów elektronicznych auta.

W samochodach Opel Astra H (oraz Zafira B i Corsa D) produkowanych w latach 2004-2014 zastosowano 3 równoległe, niezależne magistrale CAN pracujące z różnymi prędkościami i mające różne zastosowania:
  • SW-CAN (SingleWire) 33.3 kbps - steruje światłami, centralnym zamkiem, szybami, lusterkami itp.
  • MS-CAN (MidSpeed) 95.0 kbps - nawiewy, klimatyzacja, komputer pokładowy, radioodbiornik, wyświetlacz itd.
  • HS-CAN (HighSpeed) 500 kbps - moduł sterowania silnikiem, zespół wskaźników, ABS itp.
Na złączu radioodbiornika występuje tylko magistrala MS-CAN. Dostęp do wszystkich trzech magistral jest możliwy poprzez gniazdo diagnostyczne OBD2 (wykorzystywałem je w wersji prototypowej).

Głównymi elementami modułu MCP2515 CANBUS są dwa układy scalone. Pierwszy TJA1050 jest odbiornikiem/nadajnikiem CAN zamieniającym poziomy sygnałów z różnicowego panującego w magistrali CAN na klasyczne TX i RX z poziomem TTL. Drugi z chipów MCP2515 (tak jak nazwa modułu) to sprzętowy dekoder magistrali CAN, który dekoduje pełne ramki i odrzuca te niewłaściwe. Z mikrokontrolerem porozumiewa się on za pomocą sprzętowej magistrali SPI. Układ MCP2515 potrafi także filtrować identyfikatory - o wystąpieniu oczekiwanego komunikatu procesor jest informowany za pomocą osobnej linii przerwania INT. Moduł fabrycznie miał wlutowany kwarc 8MHz - niestety nie udało mi się go skonfigurować do pracy z nietypową prędkością 95kbps jaka obowiązuje na linii MS-CAN w Oplu. Stało się to możliwe dopiero po wymianie kwarcu na 16MHz.


Oprócz obu wymienionych modułów (Arduino i MCP2515) mój układ CAN-BOX zawiera jeszcze kilka bloków funkcjonalnych:

Zasilacz

Napięcie zasilania może dochodzić do 14V a stabilizator Arduino ma podany zakres napięć 9-12V. Dlatego zastosowałem własny zasilacz oparty o scaloną przetwornicę MC34063 (US1), która wraz z elementami towarzyszącymi R1-R3, C1-C3, L1 i D1 wytwarza napięcie 5V do zasilania modułów Arduino i MCP2515.

Układy wyjściowe IGN i LIG

Ich zadaniem jest wystawianie napięcia 12V na piny złacza ISO radioodbiornika. Służą do tego tranzystory MOSFET-P (T2,T4) wraz z driverami (T1,T3) i elementami towarzyszącymi R4-R7.

Układ wyjściowy KEY

Układ symuluje działanie klawiatury rezystancyjnej. Obciążenie to realizowane jest przez kombinację 3 rezystorów (R13-R15) połączonych szeregowo z R16 oraz tranzystory sterujące T5-T7 za pośrednictwem rezystorów R10-R12.

Układ pomiaru napięcia

Układ ten stanowi dzielnik napięcia R17/R18 oraz zabezpieczająca dioda Zenera D2.

Złącze przycisku dodatkowego BTN

Opcjonalny przycisk (4->3) umożliwia załączenie radioodbiornika bez kluczyka w stacyjce oraz reset układu. Rezystor R19 zasila informacyjną diodę LED przycisku (2->1)



Złącze TV-OUT

Jest to dodatkowa funkcjonalność mojego modułu CAN-BOX. Dzięki wejściu TV-AUX radioodbiornika możliwe jest wyświetlenie na jego ekranie planszy prezentującej napięcie akumulatora oraz temperaturę silnika. Analogowy sygnał video ma tutaj tylko 3 stany - biały (ok. 1V) / czarny (ok. 0,3V) oraz impuls synchronizacji (OV). Poziomy sygnału są generowane przy pomocy dzielników jakie stanowią rezystory R8 i R9 z wewnętrzną rezystancją wejścia TV-IN radioodbiornika. Rozdzielczość i stabilność tak generowanego obrazu jest ograniczona osiągami procesora ale w tym zastosowaniu jest wystarczająca.


Płytkę drukowaną wykonano metodą termotransferu. Po wytrawieniu ścieżki zostały pocynowane metodą bezprądową a po zlutowaniu zabezpieczone lakierem bezbarwnym. W konstrukcji urządzenia zastosowano elementy SMD, które znajdują sie na spodniej stronie płytki drukowanej (druku). Na wierzchniej stronie znajdują się nieliczne elementy przewlekane oraz gniazda przyłączeniowe: CAN, ISO oraz BTN. Płytka ta stanowi również bazę (płytę główną) dla osadzonych na niej w gniazdach pinhead modułów: Arduino oraz MCP2515.


Płytka została zaprojektowana tak aby się zmieścić w obudowie KM-82. Aby się w niej zmieścić moduł MCP2515 został w narożach przyszlifowany (znajdowały się tam tylko otwory montażowe. Wymontowano z niego również zbędne gniazda jumpera terminatora oraz śrubowe zaciski magistrali CAN (wykorzystano alternatywne złącze pinhead). Moduł Arduino został pozbawiony złącza ISP dzięki czemu jest niższy. W wieczku obudowy umieszczono gąbkę, dzięki czemu po skręceniu moduły są dociskane do płytki. Do podłączenia wiązki kablowej (ISO i CAN) wykorzystano złącza tzw. terminal blocks.


Oprogramowanie

Program napisano oczywiście w środowisku Arduino wykorzystując dwie zewnętrzne biblioteki:
  • mcp_can - do obsługi modułu MCP2515 CANBUS,
  • TVout - do generowania analogowego sygnału VIDEO.
Dzięki ustawieniu filtrów układu MCP2515 procesor Arduino ma wystarczającą wydajność do ciągłego generowania obrazu (zdarzają jedynie sporadyczne szarpnięcia, które dodają specyficznego uroku). O nadejściu interesujących komunikatów moduł MCP2515 informuje osobną linią przerwania. Dla funkcjonowania układu niezbędny jest odczyt jedynie 3 komunikatów z magistrali CAN:
  • 405# - informujący o pozycji kluczyka stacyjki oraz poziomie oświetlenia,
  • 206# - informujący o naciśnięciu przycisków na kierownicy,
  • 4EC# - informujący o bieżącej temperaturze silnika.
Ponadto do magistrali CAN wysyłam dwa komunikaty, które wysyłało oryginalne radio. Używam w tym celu jeden z przycisków kierownicy (odpowiednio krótkie i długie naciśnięcie):
  • 201#01FF00 - wywołanie menu ustawień komputera pokładowego,
  • 201#01C000 - powrót do ekranu głównego komputera pokładowego.
Oryginalnie przycisk ten obsługiwał moduł BT samochodu, który wyłączyłem z racji na BT wbudowany w nowy radioodbiornik.

Specyfikacja komunikatów nie jest oficjalnie dostępna, ale w sieci (również na forum elektroda.pl) jest sporo informacji na ich temat zdobytych przez hobbystów metodą "reverse engineering". Część komunikatów jest opisana w repozytorium na stronie: Car-CAN-Message-DB


Podczas uruchamiania finalnej wersji napotkałem dwa problemy. Pierwszy to niewłaściwie działający watchdog na płytce Arduino NANO- rozwiązałem go wgrywając bootloader od wersji UNO. Drugi poważniejszy problem wymusił zmiany na płytce. W pierwotnej wersji bowiem do symulacji klawiszy chciałem użyć PWM - AnalogWrite(). Niestety radioodbiornik miał problemy z rozróżnieniem przycisków dlatego zastosowałem płytkę pomocniczą z dodatkowymi 6 elementami.

Zamiast opisywać działanie układu CAN-BOX pozwolę sobie wkleić krótką prezentację filmową:


Do pobrania:
Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl