Spisu treści:

Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi: 3 kroki (ze zdjęciami)
Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi: 3 kroki (ze zdjęciami)

Wideo: Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi: 3 kroki (ze zdjęciami)

Wideo: Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi: 3 kroki (ze zdjęciami)
Wideo: 01 ATNEL WiFi ESP - połączenia i programowanie sprzętowe - przygotowania do BACKUP'u firmware 2024, Listopad
Anonim
Image
Image
Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi
Wskaźniki samochodowe OLED ESP32 z obsługą Wi-Fi

Przedstaw się najpierw…

Buduję wskaźniki samochodowe jako swego rodzaju hobby. Zobacz https://www.instructables.com/id/Remote-Car-Monit… i https://www.instructables.com/id/Remote-Car-Monit… dla dwóch nowszych przykładów. Szczególnie podobają mi się te, które komponują się z oryginalnymi częściami auta. Dlaczego więc ten jest inny i co zainspirowało mnie do jego zbudowania. Odpowiedź to dwie rzeczy:

1) ESP32 - chciałem wypróbować nowego dzieciaka na chipie blokowym, zwłaszcza że oparty na arduino toolchain jest dosyć dojrzały. Jedną z interesujących rzeczy, które umożliwia ESP32, jest IOT z wbudowanymi funkcjami Wi-Fi i Bluetooth. Społeczność napisała wiele bibliotek, aby to nieco uprościć (serwery internetowe, punkty dostępowe, klienci Wi-Fi, mDNS itp.).

2) Tanie ekrany OLED - W 2007 roku wykonałem miernik przy użyciu TFT, który znajdował się w miejscu zegara na GD (2004-2007) WRX. TFT występują w różnych smakach. Niektóre lepiej pracują w nocy, inne w dzień itd. Ale żaden z nich nie działa w każdych warunkach. Nie zdawałem sobie sprawy z błędu moich sposobów, dopóki jeden ze wskaźników, których użyłem, nie był bezużyteczny podczas słonecznego dnia członka forum. Wprowadź OLED, które są świetne do zastosowań motoryzacyjnych. Nie są zbyt jasne w nocy i (co ważniejsze) są widoczne w większości warunków nasłonecznienia.

To jest instrukcja dwa do jednego, ponieważ napisałem wszystko dla dwóch popularnych wskaźników samochodowych, ciśnienia oleju i ciśnienia turbo. Oba są zasadniczo tym samym: małym wskaźnikiem kształtu z animowanym wyświetlaczem OLED o wyglądzie analogowym z dyskretnymi liczbami i wartościami maksymalnymi. Oba działają również jako Wi-Fi AP i serwery internetowe. Kiedy łączy się z nimi za pomocą komputera lub telefonu komórkowego, widoczny jest ruchomy wykres typu EKG (jest to nieco innowacyjna część).

Kieszonkowe dzieci

Moduł HELTEC ESP32 - pobierz wariant wifi

Części określone dla ciśnienia oleju:

Czujnik ciśnienia oleju - użyłem automter 5222 części do podłączenia czujnika ciśnienia oleju - zależy to od samochodu i miejsca instalacji. Proszę zapoznać się z instrukcjami serwisowymi, forami, mechanikami itp. i rób to poprawnie, aby nie było wycieków oleju

Specyficzne części wskaźnika doładowania:

  • Czujnik ciśnienia powietrza (tylko jeśli chcesz wykonać miernik doładowania) -
  • Wąż powietrzny
  • Łączniki T

Biblioteki, z których korzystałem, były niezbędne:

Smoothiecharts - https://smoothiecharts.org/ Doskonałe i lekkie wykresy aktualizowane na żywo. Bardzo konfigurowalny i nie polega na odwoływaniu się do biblioteki js w innym miejscu w Internecie. Pozwala to na konfigurację typu „local-IOT”, a cała biblioteka mieści się w jednym ciągu dla instrukcji serwera WWW w kodzie!

ESPAsyncWebServer -https://github.com/me-no-dev/ESPAsyncWebServer- robi to, co mówi na pudełku i robi to dobrze

Biblioteka grafiki ThingPulse OLED (czasami nazywana biblioteką squix) - https://github.com/ThingPulse/esp8266-oled-ssd130… - bardzo wydajna i prosta grafika dla układów ESP. Pozwolił mi na leniwe programowanie i wciąż uzyskuję przekonujące animacje.

Narzędzia/różne:

lutownica - służy do wykonywania długich odcinków kabli do czujników, montażu głowic na płycie, folii termokurczliwej itp.

śrubokręt/nasadki/inne narzędzia samochodowe - niezbędne do montażu czujników w samochodzie

taśma dwustronna - do montażu mierników w obudowach i montażu obudowy w samochodzie (może działać klej na gorąco i inne rzeczy, ale wolę dwustronną taśmę zewnętrzną 3M. Dobrze trzyma i można ją ściągnąć bez uszkadzania rzeczy.)

nożyczki - do taśmy i cięcia rurek i zamków błyskawicznych

opaski zaciskowe - do trzymania rzeczy razem, wiązania przewodów pod deską rozdzielczą i w komorze silnika, przytrzymywania czujników itp.

Krok 1: Najpierw kod / drugi sprzęt

Kod pierwszy/sprzęt drugi
Kod pierwszy/sprzęt drugi
Kod pierwszy/sprzęt drugi
Kod pierwszy/sprzęt drugi

Kod można pobrać tutaj:

Ciśnienie oleju -

Ciśnienie doładowania -

Ciśnienie doładowania z twarzami zamiast analogowych wskaźników wyglądu -

Kod graficzny: Biblioteka ThingPulse jest tak bardzo wydajna, że możesz rysować xbm jeden na drugim i uzyskiwać przekonujące wyniki!

Obrazy mierników faktycznie pochodziły z repozytorium graficznego typu open source (https://thenounproject.com/). Artysta Iconic, CY (https://thenounproject.com/icon/490005/).

Użyłem gimpa do wygenerowania 20 różnych ramek z igłą skierowaną do każdego znacznika. Ikony buźki są autorstwa NOVITA ASTRI, ID i są tutaj:

Następnie przekonwertowałem je wszystkie na tablice const uint8_t za pomocą tej techniki (wskazówka: jeśli kolory są odwrócone podczas ich wyświetlania, po prostu odwróć kolory na oryginale): https://blog.squix.org/2015/05/esp8266- nodemcu-ho…

Kod animacji na żywo jest dość prosty:

  • Uzyskaj odczyt z czujnika
  • Odczyt skali (ustawiłem 1 do 1 dla dodatnich wartości doładowania i poruszałem igłą tylko wtedy, gdy jest w doładowaniu, a nie gdy jest w próżni)
  • Narysuj xbm, a następnie umieść znaki liczbowe dla wszystkiego innego.
  • wypłukać i powtórzyć

Kod czujnika: ponownie używam kodu czujnika, którego użyłem dla tych dwóch czujników w kilku innych projektach. Dodałem trochę uśredniania, aby uciec od niespokojnych czujników. Obejmuje to czytanie każdego „odczytu”, czyli średnio 5 odczytów.

Kod doładowania (czujnik podaje wartość analogową od 0-5 woltów, którą ADC zamienia na kroki od 0-1024):

int getBoost() { float rboost = ((analogRead(36) + analogRead(36) +analogRead(36) +analogRead(36) +analogRead(36))/5); //float ResultPSI = (rboost*(.00488)/(.022)+20)/6.89 - atmo; //pozostaw /6,89 dla kpa float WynikPSI = (((rboost / 4095) + 0,04) / 0,004) * 0,145 - atmo; //o 0,145 do obliczenia wartości psi //4096 w esp32 /*rBoost = rBoost + 1; if (rBoost >= 20) { rBoost = 0; }*/ return (ResultPSI); }

Kod ciśnienia oleju (czujnik zmienia swoją rezystancję w zależności od wykrytego ciśnienia, więc wymagany jest dzielnik napięcia, aby zmienić to na napięcie od 0-5v patrz: https://electronics.stackexchange.com/questions/3…https:/ /www.instructables.com/id/Remote-Car-Monito…(w kierunku dołu), aby uzyskać więcej informacji):

int getOilPSI() { float psival = ((odczyt analogowy (36) + odczyt analogowy (36) + odczyt analogowy (36) + odczyt analogowy (36) + odczyt analogowy (36))/5); psiwal = -0,0601*psiwal + 177,04 - 14,5; zwróć psival; }

Funkcjonalność serwera WWW i AP: Funkcjonalność AP jest dość prosta - instancja i obiekt AP z identyfikatorem ESSID, który chcesz rozesłać, oraz hasłem i gotowe.

const char *ssid = "boost_gauge_ap";const char *hasło = "hasło";

WiFi.softAP (SSid, hasło);

Ma nawet serwer DHCP, więc nie musisz się o to martwić. Domyślnie jest to adres IP 192.168.1.4 (nie mam pojęcia dlaczego, właśnie to wybrałem). Bit serwera internetowego jest nieco trudniejszy i wymaga trochę badań. Zasadniczo potrzebujesz asynchronicznego serwera internetowego, aby mógł otrzymywać dane aktualizacyjne na żywo. Na szczęście jest do tego biblioteka. Nie jestem programistą JavaScript, więc majstrowałem przy kilku bibliotekach wykresów i wykresów, dopóki nie natknąłem się na wykresy smoothie. Większość innych bibliotek wykresów jest napisana w taki sposób, że dziedziczą wszystkie rodzaje kodu z innych bibliotek z całej sieci Web, które są dynamicznie ładowane podczas renderowania strony. Chciałem, żeby to działało niezależnie od internetu, więc było to duże odkrycie. Po drugie musiał być na tyle mały, aby zmieścił się na arduino i jak widać w kodzie zmieścił się w jednej tablicy znaków.

Deklaracje serwera WWW: #include AsyncTCP.h #include ESPAsyncWebServer.h … serwer AsyncWebServer(80); //zainicjuj i wybierz port (80 to standard dla http) … server.on("/", HTTP_GET, (AsyncWebServerRequest *request){ request->send(200, "text/html", "… // strona internetowa + biblioteka smoothiecharts w ogromnej tablicy znaków }); server.on("/val", HTTP_GET, (AsyncWebServerRequest *request){ //Pierwsza strona faktycznie wywołuje tę bardzo małą stronę, która po prostu zwraca żądanie wartości ->send(200, "text/html", Sboost);});server.begin();

Krok 2: Sprzęt i okablowanie

Sprzęt i okablowanie
Sprzęt i okablowanie
Sprzęt i okablowanie
Sprzęt i okablowanie
Sprzęt i okablowanie
Sprzęt i okablowanie

Na zdjęciu w galerii są dwa czujniki, których używam. Duży, złoty kolor to czujnik ciśnienia oleju Autometer 2242. Korpus i gwint tego czujnika są uziemione, a zacisk to odczyt rezystancji.

Autometr dostarczy Ci krzywą odporności na ciśnienie lub odporności na temperaturę dla dowolnego ze swoich czujników. Przekształciłem to na napięcie za pomocą dzielnika napięcia (patrz schemat połączeń).

Czujnik ciśnienia powietrza MPX4250AP ma trzy piny pod napięciem i kilka pinów nieużywanych. Są to wejście V, masa i wyjście czujnika. Wyprowadza odczyt 0-5 V, który może być odczytany przez mikrokontroler (lub w przypadku tego mcu 0-3 V. Tak więc odczyt czujnika jest skalowany w dół za pomocą dzielnika napięcia.). Arkusz specyfikacji można znaleźć tutaj:

Istnieje kilka problemów ze skalowaniem w dół z logiki 5V do 3V. W moim przypadku użyłem dzielnika napięcia dla uproszczenia i miałem części wokół mojego stołu warsztatowego. Wprowadzisz trochę błędu do odczytów w oparciu o możliwy błąd dodatkowych elementów (dwóch rezystorów). W niektórych przypadkach może to spowodować 10% zniżki na odczyty. Mogę z tym żyć. Jeśli nie możesz, możesz użyć opampa i rezystorów lub konwertera poziomów logicznych (dostępny u różnych dostawców elektroniki. Sparkfun ma taki tutaj: https://www.sparkfun.com/products/12009 Mogę przełączyć się na to jako Czasami dostaję wysokie odczyty na tym wskaźniku (w rzeczywistości pokazałem ten produkt na moim schemacie elektrycznym).

Zasilałem ESP32 przez USB. Obejmowało to podłączenie bezpośredniej ładowarki, takiej jak ta: https://www.amazon.com/gp/product/B00U2DGKOK/ref=p… do samochodu, a następnie użycie koncentratora USB, aby ją rozdzielić. Widać, że użyłem kabli usb pod kątem prostym, aby zapewnić, że wszystko działa na małym obszarze (https://www.amazon.com/gp/product/B00ENZDFQ4/ref=p…).

Inne zdjęcia pokazują miejsca, w których wycinałem dziury lub prowadziłem drut. Każdy samochód będzie inny. Zachowaj ostrożność, noże i nożyczki są ostre, elektryczność może być niebezpieczna, więc odłącz akumulator przed podłączeniem przewodów.

Krok 3: Obudowa drukowana w 3D

Obudowa z nadrukiem 3D
Obudowa z nadrukiem 3D

Użyłem do tego kilku drukowanych w 3D obudów.

  • Ogólny, duży, okrągły wskaźnik z 2 ekranami. Możesz to zobaczyć na zdjęciach pierwszej strony. Położyłem go obok mojego zegara na desce rozdzielczej.
  • Jednostopniowy klin w stylu, który pasuje do obszaru zegara subaru impreza (wrx, sti, itp.) od ok. 2008 do 2014.
  • Element o dwóch wymiarach, który pasuje do kolumn kierownicy i innych lekko zaokrąglonych powierzchni:

Możesz je kopiować i modyfikować, aby dopasować je do swoich potrzeb. Żaden z nich nie jest doskonały i wszystkie będą wymagały trochę dostosowania.

Kilka uwag:

  • Skończyłem mój z plastidipem; jest to preferowana metoda leniwych.
  • Szlifowanie tworzyw sztucznych powoduje powstawanie drobnych cząstek, które nie są dla ciebie dobre, użyj odpowiedniej maski.
  • Użyłem PETG do moich obudów. ABS też jest dobry. PLA wypaczy się w gorącym słońcu na desce rozdzielczej.
Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT

Druga nagroda w Wyzwaniu IoT

Zalecana: