baliosOPC - On-board Personl Computer

Po kilku wyprawach w Ameryce Północnej, dojrzała we mnie idea zainstalowania w samochodzie jakiegoś bardziej zaawansowanego odtwarzacza muzyki i nawigację GPS. Po pierwsze, potrzebuję wiele piosenek podczas jazdy na bardzo długich dystansach non-stop. Po drugie, gdy okazuje się, że zagubiony jestem na pustyni lub górach, pomocna może okazać się lokalizacja na mapie przy użyciu GPS. My Jeep Wrangler oryginalnie miał proste radio z odtwarzaczem CD. Nadszedł czas, aby wymienić je na coś trochę bardziej przydatnego.

Stare radio::baliosOPC::
Stare radio

Najbardziej popularne są urządzenia oparte na Androidzie, które często są prostym zamiennikiem dla standardowego radia w samochodzie. Może wydawać się to być dobrym rozwiązaniem, ale ja przede wszystkim, wymagałem od nowego urządzenia jak największej elastyczności. Oznacza to, że gdy narodzi się jakiś nowy pomysł, moje urządzenie powinno być otwarte na rozbudowę, dodanie nowych funkcji i poprawę funkcjonalności. Obawiałem się również ograniczeń w odniesieniu do map w systemach Android. Potrzebowałem absolutnej swobody zainstalowania map dowolnego obszaru przed wyruszeniem w kolejne podróże.

Podjąłem decyzję zbudowania mojego urządzenia na bazie Raspberry Pi, komputera na jednej płycie o wielkości karty kredytowej. Działa on pod kontrolą system operacyjnego Raspbian, opartego na Linuksie. Aby mogła zmaterializować się moja wizja potrzebny był ekran dotykowy, oraz wiele innych części, zobacz pełną listę komponentów sprzętowych poniżej. Oprogramowanie było kolejnym bardzo ważnym elementem. Myślę tu programach użytkowych takich jak odtwarzacz muzyki, nawigacja i oczywiście menu główne, które połączyłoby wszystkie niezależne programy w jedną, spójną aplikację.

Instalacja nowego::baliosOPC::
Instalacja nowego

Byli już inni przede mną, którzy wykorzystali Raspberry Pi w podobnym celu. Patrząc wokoło postanowiłem spróbować najpopularniejsze rozwiązanie oparte o Kodi, otwarte oprogramowanie multimedialne. Kodi posiada wiele funkcji, mnóstwo wtyczek i może być łatwo modyfikowany. Niestety, integracja z systemem nawigacji Navit była dużą przeszkodą. Jest to możliwe, ale występują problemy z obsługą ekranu dotykowego. Zdałem sobie również sprawę, że dodanie zewnętrznych aplikacji do Kodi, takich jak menu główne na przykład nie jest takie proste. Kodi jest świetnym odtwarzaczem multimedialnym, ale ja potrzebowałem czegoś więcej. Chciałem wyjść poza możliwości odtwarzania muzyki i filmów.

Musiałem zrezygnować z Kodi. Program ten sprawiał że cały projekt był zbyt skomplikowany. Z drugiej jednak strony Navit, system nawigacji ze śledzeniem GPS, współpracujący z mapami z kilku źródeł, przede wszystkim OpenStreetMap to aplikacja, która w pełni spełniała moje wymagania. Miałem zatem mapy i nawigację, brakowało jednak odtwarzacza muzyki. Patrząc na listę dostępnych programów na Raspberry Pi, wybrałem i zainstalowałem VLC Media Player, dość dobrą aplikację dostępną na wielu platformach i często używana pod Windowsami. Początkowo VLC sprawował się dość dobrze, lecz po krótkim czasie widoczne były problemy. VLC okazał się być zbyt wolny, czasami nie był w stanie obsłużyć zmian piosenek. Głównym tego powodem było buforowanie odtwarzanych plików i brak przyspieszenia sprzętowego. VLC nie okazał się był odpowiednim komponentem w moim projekcie.

Zdałem sobie sprawę, że jest absolutnie koniecznym jest odtwarzacz muzyki z przyspieszeniem sprzętowym. Nie chcemy przecież mieć żadnych nagłych i niespodziewanych przerw podczas słuchania muzyki w czasie jazdy. Jedyną dostępnym tego typu odtwarzaczem jest omxplayer, napisany specjalnie dla GPU Raspberry Pi. Niestety, jest to program jedynie działający z linii poleceń, nie ma on interfejsu graficznego. Pliki z muzyką uruchamia się poprzez wydawanie komend z linii systemu Linux. Na szczęście, istnieją projekty open-source, które dodają GUI do omxplayer. Zdecydowałem się użyć interfejs noszący nazwę TBOPlayer napisany w języku Python.

Mając zainstalowaną nawigację GPS i dobrze działający odtwarzacz multimedialny, mojemu systemowi brakowało centralnego składnika, który pozwoliłby na łatwe przechodzenie między wszystkimi aplikacjami. W tym celu, postanowiłem napisać proste menu. W pierwszej wersji główny ekran menu miał cztery ikony umożliwiające przełączanie między programami nawigacji, odtwarzaczem, kalkulatorem i pulpitem windows. Ten ostatni dodałem aby mieć dostęp do linii komend terminala, kalendarza, edytora tekstu lub jakiejkolwiek innej aplikacji w zależności od doraźnych potrzeb.

Po wielu miesiącach pracy, narodził się baliosOPC (balios On-Board Personal Computer) czyli personalny komputer pokładowy. Jest to coś więcej niż nawigacja GPS i odtwarzanie muzyki, dlatego zasługuje aby być określany jako komputer samochodowy lub w carputer. Wiem, że jak na razie ma on bardzo ograniczoną liczbę funkcji, ale to dopiero początek. Stworzyłem bardzo elastyczną platformę otwartą do rozbudowy.

Zainstalowany baliosOPC::baliosOPC::
Zainstalowany baliosOPC
Software balios OPC

Zgodnie z założeniem, baliosOPC łączy w sobie wszystkie cechy dostarczane przez uruchamiane przez niego aplikacje. Dodatkowo posiada on wszystkie funkcje, jakie dostarcza środowisko graficzne Raspbian. Niezależne programy połączone są ze sobą i mogą być uruchamiane z ekranu głównego czyli menu baliosOPC. Wszystkie aplikacje zawsze pracują w trybie pełnoekranowym.

Ekran główny

Jest to mój własny mini program, który ma jeden ekran umożliwiający dostęp do kilku niezależnych aplikacji. Gdy dotknie się ikonę na ekranie, wskazany program przejmuje kontrolę. Jeden z przycisków w ramce ekranu LCD jest zakodowany jako kombinacja <Alt-Tab>. W ten sposób można z każdego innego programu wrócić do ekranu głównego. Jest tak naprawdę zwykłe przełączanie miedzy oknami na pulpicie. Zgodnie z założeniem, nie wszystkie aplikacje należące do baliosOPC są uruchamiane w czasie startu systemu. Niektóre z nich, te rzadziej używane są startowane tylko wtedy, gdy są potrzebne. Mój program sprawdza, czy aplikacja istnieje w systemie. Jeżeli nie, to jest startowana. W przypadku przeciwnym sterowanie przekazywane jest do istniejącego w systemie procesu. Istnieje zabezpieczenie zapobiegające uruchamianiu więcej niż jednej kopii tego samego programu.

Nawigacja to Navitt

Aplikację nawigacji samochodowej Navit można kastomizować, moje zmiany obejmują:

  • Własne menu narzędziowe: proste przyciski do przełączania orientacji mapy, wyłączanie nawigacji, itd
  • przyciski na ekranie: powiększenie, zmniejszenie mapy, włączanie zapowiedzi głosowych i konfiguracja
  • informacje na ekranie: bieżąca i następna nazwa ulicy, wysokość n.p.m., prędkość, kompas i czas

Muzyka i wideo to TBOPlayer

Na początku zrobiłem tylko małe zmiany kodu w celu integracji odtwarzacza z baliosOPC. Wszystkie najważniejsze aplikacje starują równolegle w celu uzyskania jak najkrótszego czasu startu systemu. TBOPlayer jest najwolniejszym programem na starcie. Dodałem dodatkowe polecenia systemu w tle, wymuszające przejście do ekranu głównego. Wszystko dlatego, że TBOPlayer pokazuje się na ekranie jako ostatni, a ja chciałem, aby cały system witał użytkownika ekranem głównym.

Kalkulator to galculator

Nie można uruchomić programu galculator w trybie całoekranowym. Aby obejść to ograniczenie, w tle dodałem polecenia systemowe wysyłające naciśnięcie klawisza <F11> natychmiast po uruchomieniu programu. W ten sposób kalkulator wypełnia cały ekran. Nie korzystam z kalkulatora cały czas, dlatego też, nie jest on uruchamiany w momencie startu systemu. galculator staruje dopiero wtedy, gdy jest potrzebny, tzn. jest otwierany z menu głównego.


Computer Desktop is LXDE Desktop (typical Windows style desktop)

Wszystkie aplikacje w obrębie baliosOPC uruchamiane na pierwszym ekranie środowiska graficznego. Gdy przełączymy się na ekran numer dwa mamy zwykły pusty pulpit do pracy. Jest to jak każdy inny, znany nam wszystkim tradycyjny komputer PC. Aby wprowadzić polecenia, hasła itd., można korzystać tu z klawiatury ekranowej lub podłączyć poprzez USB fizyczną klawiaturę.


Downloads balios OPC

Sam możesz spróbować stworzyć podobny system oparty na tej same idei. Przejdź do strony pobierania. Znajdziesz tam programy i skrypty, które napisałem pracując nad moim baliosOPC.

Hardware balios OPC

Główne podzespoły sprzętowe:

  • Raspberry Pi 3 Model B 2016 Quad Core 64 Bit 1GB z radiatorami
  • GPS Module z anteną USB interface LUY VK-162
  • DA7850 HIFI cztero kanałowy wzmacniacz cyfrowy 4 x 50W
  • Car Charger DC moduł konwertera 12V To 5V 3A 15W with Micro USB
  • 2DIN Dash 7" Samsung HDMI monitor ekran dotykowy Mini ITX
  • USB-HID przyciski dla 7" ramki 2DIN
  • Ramka 2DIN dla Jeep JK (oryginalny otwór jest większy)
  • Wiązka przewodów dla Jeepa JK (umożliwia podłączenie bez cięcia istniejących przewodów)
  • Gniazdo bezpiecznika
  • Kabel HDMI High Speed Gold Premium Quality, 25 cm
  • AFENDO USB 3.0 7-Port przenośny koncentrator zasilany 12V
  • 18.5MM HD CCD tylna kamera szeroki kont wodoodporna
  • Wodoodporna kamera przednia CCD
Zasilany koncentrator USB::baliosOPC::
Zasilany koncentrator USB
Wzmacniacz i Raspberry Pi 3::baliosOPC::
Wzmacniacz i Raspberry Pi 3
Skrzynka 2DIN Mini ITX przycięta, aby dopasować do otworu Jeepa JK::baliosOPC::
Skrzynka 2DIN Mini ITX przycięta,
aby dopasować do otworu Jeepa JK
Features balios OPC

Zewnętrzne przechowywanie danych

Ramka ekranu LCD zawiera gniazdo kart SD. Zwykle mam przygotowanych kilka kart z muzyką i filmami. Można je łatwo zmieniać. Po włożeniu nowej karty pamięci SD, montowana jest ona automatycznie i wszystkie pliki dostępne są natychmiast w odtwarzaczu multimedialnym.

Programowalne przyciski

Pięć przycisków w ramce ekranu może być zaprogramowanych jako dowolne klawisze klawiatury. Na razie mam zakodowane je jako strzałki w górę i w dół, Enter, Escape i <Alt-Tab>. Szósty klawisz po lewej to przycisk wyłączania zasilania podłączony do GPIO w Raspberry Pi. Gdy przycisk zasilania jest wciśnięty przez ponad 2 sekundy program działający w tle przejmuje kontrolę i wydaje polecenie ‘halt’ bezpiecznego zamknięcia całego systemu.

Zewnętrzna klawiatura i myszka

Ramka ekranu posiada jedno gniazdo USB. Używając jednak koncentrator USB mogę podłączyć jednocześnie zewnętrzną klawiaturę i myszkę. W ten sposób łatwo mogę wykonywać wszystkie doraźne zmiany w systemie.

Zdalne połączenie z laptopem

Podłączyłem kabel Ethernet na stałe do Raspberry Pi. Drugi koniec kabla znajduje się pod schowkiem z prawej strony. Podłączając kabel Ethernet do laptopa i używając programu Putty jestem w stanie zalogować się do Raspberry Pi. Za pomocą ftp mogę również swobodnie przesyłać pliki między RPi i laptopem.

Potencjometr siły głosu

Umieściłem gałkę w przedniej konsoli pod ekranem LCD. Podłączony jest on bezpośrednio do wzmacniacza. Potencjometr posiada on trzy funkcje: siła głosu, ustawianie tonów wysokich i niskich. Nie ukrywajmy, fizyczny kontroler jest bardzo wygony, dużo lepszy niż podobna funkcja na ekranie. Podczas jazdy, gdy włączone są światła, gałka podświetlona jest w kolorze zielonym, tak jak cała konsola mojego Jeepa

Automatyczne wyłączanie

Komputery wymagają pewnego czasu aby wyłączyć się poprawnie. Jest to poważny problem podczas instalowania ich w samochodach. Chcemy mieć wygodny sposób ich wyłączania i powinno nastąpić to automatycznie, tak jak w przypadku konwencjonalnych odbiorników radiowych. Odcięcie źródła prądu bez odpowiedniego zamknięcia systemu nie jest zdrowe dla komputerów na dłuższą metę. Tak dzieje się gdy kluczyk wyjęty jest ze stacyjki. W tym momencie odcięte jest zasilanie akcesoriów określane jako ACC. Konieczne jest pewne opóźnienie, aby mieć wystarczająco dużo czasu na zamknięcie systemu operacyjnego. W tym celu zaprojektowałem system trzech przekaźników podłączonych do GPIO (General Purpose Input/Output) w Raspberry Pi. Przekaźniki wysyłają sygnał i niestandardowy program działający w tle decyduje, kiedy należy zainicjować proces wyłączania. Zakodowałem dodatkowy czas oczekiwania po wyłączeniu ACC, a przed zamknięciem systemu. To dlatego, że nie chcę zawsze wyłączać komputera w sytuacjach gdy kluczyk wyjęty jest ze stacyjki i w krótkim czasie umieszczony jest tam z powrotem.

Przekaźniki podłączone do GPIO::baliosOPC::
Przekaźniki podłączone do GPIO

© 2016 Maciej Swuliński