Spisu treści:

Wyświetlacz samochodowy Arduino: 7 kroków (ze zdjęciami)
Wyświetlacz samochodowy Arduino: 7 kroków (ze zdjęciami)

Wideo: Wyświetlacz samochodowy Arduino: 7 kroków (ze zdjęciami)

Wideo: Wyświetlacz samochodowy Arduino: 7 kroków (ze zdjęciami)
Wideo: kurs Arduino programowanie - Wyświetlacz OLED - Jak dodać obraz na wyświetlacz? - #24 2024, Lipiec
Anonim
Image
Image
Wyświetlacz samochodowy Arduino
Wyświetlacz samochodowy Arduino
Wyświetlacz samochodowy Arduino
Wyświetlacz samochodowy Arduino

Zbudowałem wyświetlacz oparty na diagnostyce pokładowej (OBD-II) przy użyciu 7-calowego wyświetlacza TFT LCD firmy Adafruit, Teensy 3.6, adaptera Freematics OBD-II I2C i kilku tanich czujników zapasowych, które znalazłem na Amazon. Wyświetlacz ma dwie strony: jeden, gdy moja Honda Accord jest na napędzie, a drugi, gdy jest na biegu wstecznym.

Kiedy mój samochód jest w ruchu, wyświetlane są obroty na minutę, MPH, procent obciążenia silnika, napięcie akumulatora, temperatura w kabinie i temperatura płynu chłodzącego silnik (dostępnych jest kilka innych statystyk pojazdu, jeśli ktoś ich nie chce).

Kiedy mój samochód pracuje do tyłu, Teensy 3.6 zgodny z Arduino IDE odczytuje animowany obraz bitmapy mojego samochodu, który znalazłem w Internecie, wyświetla go, a następnie odczytuje czujniki zapasowe. Każdy z czterech czujników ma swoją odległość w stopach oraz animację za samochodem, która zmienia kolor w zależności od odległości obiektu od samochodu (tylko zielony oznacza <5 stóp, zielony i żółty oznacza <2,6 stopy, a zielony, żółty, a czerwony oznacza < 1 stopę).

Na koniec dodałem możliwość przyciemniania wyświetlacza w nocy.

Efekt końcowy wygląda świetnie i działa bardzo dobrze w moim samochodzie. Skończyło się nawet na zainstalowaniu go w konsoli środkowej, co było zupełnie innym procesem, w którym nie zajmę się tym instruktażem. Lista części, których użyłem do stworzenia tego wyświetlacza LCD, znajduje się poniżej.

1) Adapter Freematics OBD-II - 35 USD

2) Czujniki zapasowe - 15 USD

3) 7-calowy wyświetlacz TFT LCD - 38 USD

4) Sterownik wyświetlacza LCD oparty na SPI - 35 USD

5) Malutka 3,6 - 30 USD

6) Zmieniacz poziomu - 4 USD

7) 74HC125 Tri State Buffer IC - 6 USD za 2 opakowanie (jestem pewien, że można znaleźć ten tańszy gdzie indziej)

8) Karta MicroSD >= 1 GB - 4 USD

9) Drut, kondensatory i rezystory.

10) LP3470-2.93 Układ scalony resetowania zasilania - 2 USD

11) (opcjonalnie): Czujnik temperatury DS18B20 - 8 USD

12) (opcjonalnie): Rozdzielacz OBD-II - 10 USD

13) (opcjonalnie): Dodaj przewód bezpiecznika obwodu - 8 USD za opakowanie 5

Krok 1: Odczytywanie czujników zapasowych

Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych
Odczytywanie czujników zapasowych

Ten krok jest trudny, ponieważ te zapasowe czujniki komunikują się z nadajnikiem-odbiornikiem, a następnie z małym wyświetlaczem LCD, jak widać na powyższym rysunku. Chciałem mieć sposób na pozbycie się ich wyświetlacza i użycie własnego. Za pomocą strony internetowej, którą znalazłem po pewnym googlowaniu (hakowanie czujników parkowania wstecznego), udało mi się odczytać zastrzeżony protokół komunikacyjny, który transceiver wysyła do ekranu LCD. Z jakiegoś powodu protokół komunikacyjny nie jest typowy jak I2C, UART, CAN, USB itp. i różni się w zależności od dostawcy. Gorąco polecam zakup zestawu, który połączyłem powyżej, jeśli zamierzasz użyć mojego kodu, ponieważ został on napisany specjalnie dla tych czujników.

Przed odłączeniem dostarczonego przez nich wyświetlacza LCD sprawdziłem trzy przewody łączące transceiver i wyświetlacz LCD. Był czerwony przewód +5V, czarny przewód uziemiający i przewód niebieski. Po podłączeniu mojego oscyloskopu do niebieskiego przewodu i masy, zobaczyłem ślad podobny do tego na powyższym obrazku, ale nie do końca (użyłem zdjęcia ze strony linkowanej powyżej). Mój ślad miał WYSOKI bit startowy o dłuższym czasie trwania, a następnie 17 bitów o krótszym czasie trwania. Bity 0-5 po bicie startu nie zawierały użytecznych informacji. Bity 6-8 odpowiadają czujnikowi A, B, C lub D. Bity 9-16 odpowiadają długości w metrach. Dołączyłem szkic Arduino IDE, który odczytuje czujniki i wysyła dane przez konsolę szeregową.

Krok 2: Tworzenie obrazu bitmapowego i umieszczanie go na karcie MicroSD

Tworzenie obrazu bitmapowego i umieszczanie go na karcie MicroSD
Tworzenie obrazu bitmapowego i umieszczanie go na karcie MicroSD
Tworzenie obrazu bitmapowego i umieszczanie go na karcie MicroSD
Tworzenie obrazu bitmapowego i umieszczanie go na karcie MicroSD

Użyłem bezpłatnego oprogramowania do edycji zdjęć o nazwie GIMP, aby przyciąć i zmienić rozmiar obrazu mojego samochodu z widoku z góry. Następnie wyeksportowałem obraz jako 24-bitowy obraz bitmapowy o nazwie „car.bmp”, który ma wymiary 110 na 250 pikseli. Wrzuciłem to na kartę microSD i włożyłem kartę microSD do mojego mikrokontrolera Teensy 3.6.

Głównym powodem, dla którego wybrałem Teensy 3.6 zamiast UNO, była prędkość, z jaką Teensy mógł czytać kartę SD i wyświetlać obraz za pomocą sterownika ekranu RA8875. Przy użyciu UNO proces trwał około 8 sekund, podczas gdy Teensy 3.6 zajęło mu 1,8 sekundy.

Krok 3: Podłączanie sprzętu

Podłączanie sprzętu
Podłączanie sprzętu

Adafruit ma naprawdę dobrze wyglądający 7-calowy wyświetlacz TFT LCD, który jest napędzany przez układ scalony o nazwie RA8875. Wybrałem ten wyświetlacz i sterownik wyświetlacza z dwóch powodów. Po pierwsze, istnieją obszerne biblioteki wstępnie napisane dla wyświetlacza. Po drugie, sterownik wyświetlacza może rozmawiać z dowolny mikrokontroler przez SPI, co oznacza, że nie ma tak wielu przewodów łączących mikrokontroler z RA8875.

Ta konfiguracja ma dwie wady. Po pierwsze, istnieje błąd sprzętowy z płytą RA8875 firmy Adafruit, wymagający użycia układu bufora trójstanowego 74HC125, jeśli chcesz użyć dowolnego urządzenia opartego na SPI, takiego jak karta SD. Aby lepiej zrozumieć błąd sprzętowy, przeczytaj poniższe forum. Po drugie, to stosunkowo długi czas potrzebny na przesłanie obrazów na wyświetlacz LCD. Ponadto długi czas potrzebny na przesłanie obrazu do wyświetlacza LCD wynika z połączenia SPI, które jest ograniczone przez szybkość zegara mikrokontrolerów i dużą ilość danych, które muszą zostać przesłane do sterownika ekranu bardzo mało przewodów.

Stworzyłem schemat Fritzing, aby każdy, kto chciałby stworzyć ten wyświetlacz, mógł łatwo odczytać, do których pinów podłącza się Teensy 3.6. Poniżej zamieściłem plik.frz. Jedyne dwa elementy, które nie są oznaczone, to kondensatory, które są kondensatorem elektrolitycznym 1F 16V i kondensatorem ceramicznym 100μF. Dołączyłem je, aby upewnić się, że zasilanie mikrokontrolera Teensy jest stałe +5V DC i nie zawiera żadnych skoków napięcia (może nie być konieczne, ale dołączyłem je, ponieważ napięcie zasilania samochodu może się szybko zmieniać w zależności od obciążenia akumulatora).

Kilka rzeczy, o których warto wspomnieć o komponentach. Po pierwsze, przełącznik poziomu pobiera dowolny sygnał 5 V i zamienia go w bezpieczne napięcie 3,3 V Teensy 3,6. Jest to niezbędne dla adaptera OBD I2C oraz nadajnika-odbiornika czujnika zapasowego. Po drugie, linie I2C nastolatków wymagają rezystorów podciągających 4,7 kΩ. Po trzecie, cztery rezystory łączące „przewód nocny” (przewód ściemniający) i „zapasowy przewód sprzęgający” są niezbędne, aby służyć jako dzielnik napięcia, aby sprowadzić sygnały 12V-13V do około 2,5-3V.

AKTUALIZACJA 22.07.18: Zauważyłem, że wewnętrzny czujnik temperatury modułu OBD-I2C wyświetla bardzo dziwne liczby. Czasem by to zadziałało, ale przez większość czasu moduł wyprowadzał temperatury powyżej 400 stopni F. Z tego powodu zdecydowałem się na dodanie własnego czujnika temperatury ds18b20. Możesz tutaj użyć dowolnego czujnika temperatury, ale będziesz musiał edytować kod Arduino.

AKTUALIZACJA 19.03.: Teensy 3.6 nie uruchamia się, gdy jest bardzo zimno. Dodałem obwód resetowania zasilania, aby upewnić się, że uruchamia się poprawnie.

Krok 4: Sterownik ekranu RA8875 i projekt graficzny

RA8875 Sterownik ekranu i projekt graficzny
RA8875 Sterownik ekranu i projekt graficzny

Sterownik ekranu RA8875 posiada bibliotekę o nazwie Adafruit_RA8875, którą wykorzystałem podczas tworzenia kształtów widocznych na pierwszej i drugiej stronie. Biblioteka dla RA8875 może tworzyć tylko linie, prostokąty, zaokrąglone prostokąty, trójkąty, elipsy i okręgi, więc grafika musi być zaprojektowana w sprytny sposób, aby tworzyć bardziej złożone kształty. Na przykład szary pierścień na pierwszej stronie jest w rzeczywistości pełnym szarym kołem o większej średnicy, po którym następuje pełne czarne koło o mniejszej średnicy. Ponadto jedna mała sekcja strony czujnika zapasowego zawiera 2 trójkąty ułożone w taki sposób, że tworzą wielokąt. Zrobiłem to, aby móc zmienić kolor poszczególnych sekcji strony czujnika zapasowego. Plik Arduino dla wyświetlacza zawiera tablicę punktów, których użyłem do śledzenia, gdzie znajdowały się trójkąty i inne kształty.

Użyłem tej świetnej strony internetowej, aby wybrać kolory RGB565 i zdefiniować je w szkicu, aby móc użyć kolorów niestandardowych, wstępnie zdefiniowanych w bibliotece Adafruit_RA8875.

Jeśli chodzi o czcionki, biblioteka Adafruit_RA8875 obsługuje tylko jedną, chyba że skomentujesz sekcję biblioteki, co pozwala na używanie czcionek z biblioteki Adafruit_GFX. Poniżej zamieściłem zmodyfikowaną bibliotekę Adafruit_RA8875. Właśnie skomentowałem kilka linijek kodu i mogłem użyć czcionek z biblioteki Adafruit_GFX. Ponadto, aby użyć 7-segmentowej czcionki, której użyłem w tym projekcie, upewnij się, że plik "FreeSevenSegNumFont.h" znajduje się w folderze czcionek w bibliotece Adafruit_GFX.

Krok 5: Przesyłanie szkicu

Przesyłanie szkicu
Przesyłanie szkicu
Przesyłanie szkicu
Przesyłanie szkicu

Aby przesłać szkic do Teensy 3.6, musisz zainstalować Teensyduino. Następnie będziesz musiał zastąpić biblioteki Adafruit_RA8875 i Adafruit_GFX w lokalizacji biblioteki teensy (nie jest to typowa lokalizacja w dokumentach). Na Macu musiałem kliknąć prawym przyciskiem myszy ikonę aplikacji Arduino w aplikacjach, a następnie przejść do /Contents/Java/hardware/teensy/avr/libraries. W systemie Windows jestem prawie pewien, że znajduje się on pod twoim dyskiem C w plikach programu x86, Arduino, a następnie w folderze sprzętu. Gdy to zrobisz, będziesz musiał zmienić lokalizację szkicownika w aplikacji Arduino, edytując go w preferencjach, gdziekolwiek są twoje biblioteki nastolatków (tj. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

AKTUALIZACJA 22.07.16: Z powodu problemu z wewnętrznym czujnikiem temperatury, o którym mówiłem wcześniej, musiałem zainstalować czujnik temperatury modułu DS18B20. Zobaczysz 4 szkice arduino w pliku zip. Prześlij szkic display_code, jeśli chcesz użyć wewnętrznego czujnika temperatury modułu OBD-II I2C. Prześlij szkic display_code_with_new_temperature_sensor, jeśli chcesz użyć modułu DS18B20, który połączyłem powyżej.

AKTUALIZACJA 17.11.17: Naprawiłem kilka błędów w oprogramowaniu, w tym DS18B20 wyświetlający temperaturę 185 Fahrenheita, wyświetlacz w ogóle się nie włącza w chłodne dni i piksele zacinają się w niewłaściwym kolorze, gdy wyświetlacz jest przyciemniony.

Następnie użyj zdjęcia, które mam powyżej, aby upewnić się, że twoje ustawienia malusieńki pasują do obrazu. Stwierdziłem, że przetaktowanie malutkiego do 240 MHz nie pozwala adapterowi I2C OBD-II na komunikację z malutkim. Na koniec po prostu kliknij prześlij.

Napisałem dość obszerne komentarze w plikach szkiców arduino. Zajrzyj tam, aby dowiedzieć się, jak działa oprogramowanie. W przypadku jakichkolwiek pytań proszę o kontakt. Postaram się na nie odpowiedzieć najlepiej jak potrafię. Powodzenia!

Krok 6: Wydrukuj obudowę LCD w 3D

Drukowanie 3D obudowy LCD
Drukowanie 3D obudowy LCD
Drukowanie 3D obudowy LCD
Drukowanie 3D obudowy LCD
Drukowanie 3D obudowy LCD
Drukowanie 3D obudowy LCD

Stworzyłem wydrukowaną w 3D górną i dolną pokrywę LCD, aby chronić 7-calowy wyświetlacz. Załączyłem pliki części wynalazcy. IPT oraz pliki. STL.

Dołączyłem również część o nazwie backup_sensor_ring.ipt, która jest pierścieniem pasującym do tych zapasowych czujników, które połączyłem powyżej. Mój samochód miał już wstępnie wywiercone otwory na czujniki zapasowe, które były zbyt duże dla czujników zapasowych, które kupiłem na Amazon, więc musiałem stworzyć pierścień, który pasowałby do czujników zapasowych. Jeśli zamierzasz wiercić w zderzaku za pomocą dołączonego okrągłego wiertła w zestawie, nie będziesz potrzebować tej części.

Krok 7: Podział portu OBD-II, aby Arduino miał zasilanie tylko podczas jazdy samochodu

Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu
Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu
Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu
Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu
Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu
Podział portu OBD-II, dzięki czemu Arduino ma zasilanie tylko podczas jazdy samochodu

Wkrótce po zainstalowaniu wyświetlacza zdałem sobie sprawę, że wyświetlacz był zawsze włączony, nawet gdy samochód był wyłączony. Patrząc na wyprowadzenia OBD-II stwierdziłem, że linia zasilania 12V do złącza OBD-II jest zawsze podłączona bezpośrednio do akumulatora.

Aby obejść ten problem, kupiłem rozdzielacz OBD-II, przeciąłem przewód biegnący do styku 16 na jednym z dwóch złączy na rozdzielaczu, a następnie podłączyłem ten przecięty przewód, aby dodać przewód obwodu.

Następnie za pomocą multimetru podszedłem do skrzynki bezpieczników po stronie kierowcy i przetestowałem istniejące bezpieczniki, aby zobaczyć, który bezpiecznik dostał zasilanie po przekręceniu kluczyka w stacyjkę.

Na koniec podłączyłem przewód dodawania obwodu do bezpiecznika, który znalazłem, aby wyświetlacz włączał się teraz tylko wtedy, gdy mój samochód jest uruchomiony. Sprawdź, jak prawidłowo dodać obwód do swojego samochodu. Uważam, że ten samouczek na youtube jest dobry.

Zalecana: