Innehållsförteckning:

Wifi -aktiverad OLED ESP32 -bilmätare: 3 steg (med bilder)
Wifi -aktiverad OLED ESP32 -bilmätare: 3 steg (med bilder)

Video: Wifi -aktiverad OLED ESP32 -bilmätare: 3 steg (med bilder)

Video: Wifi -aktiverad OLED ESP32 -bilmätare: 3 steg (med bilder)
Video: Scan nearby WiFi networks using ESP32! 2024, November
Anonim
Image
Image
Wifi -aktiverad OLED ESP32 -bilmätare
Wifi -aktiverad OLED ESP32 -bilmätare

Introduktioner först …

Jag bygger bilmätare som ett slags på och av igen hobby. Se https://www.instructables.com/id/Remote-Car-Monit… och https://www.instructables.com/id/Remote-Car-Monit… för två nya exempel. Jag gillar särskilt sådana som smälter in i bilens originaldelar. Så varför är den här annorlunda och vad inspirerade mig att bygga den. Svaret är två saker:

1) ESP32 - Jag ville testa det nya barnet på blockchippet, särskilt eftersom den arduino -baserade verktygskedjan för den är ganska mogen. En av de intressanta sakerna som ESP32 möjliggör är IOT med dess inbyggda wifi- och bluetooth -funktioner. Samhället har skrivit flera bibliotek för att göra detta något okomplicerat (webbserver, AP: er, wifi -klienter, mDNS, etc., etc.).

2) Billiga OLED -skärmar - Tillbaka 2007 gjorde jag en mätare med en TFT som satt på klockans plats på en GD (2004-2007) WRX. TFT finns i olika smaker. Vissa fungerar bättre på natten, vissa fungerar bättre på dagen, etc. Men ingen av dem fungerar under alla förhållanden. Jag insåg inte felet i mina vägar förrän en av mätarna som jag använde var värdelös under en forummedlems soliga spårdag. Ange OLED, som är fantastiska för fordonsapplikationer. De är inte för ljusa på natten och (ännu viktigare) är synliga i de flesta solljusförhållanden.

Detta är en två för en instruerbar eftersom jag skrev allt för två vanliga bilmätare, oljetryck och turbotryck. Båda är i huvudsak samma sak: en liten formfaktormätare med en animerad OLED-skärm med analogt utseende med diskreta siffror och maxvärden som visas. Båda fungerar också som wifi AP: er och webservrar. När man ansluter till dem via en dator eller mobiltelefon kan man se ett rörligt EKG -typdiagram (detta är den lite innovativa delen).

Tillbehör

HELTEC ESP32-modul-få wifi-varianten

Oljetrycksspecifika delar:

Oljetryckssensor - Jag använde en automter 5222 Oljetrycksensors anslutningsdelar - detta varierar beroende på bil och plats för installation. Se servicehandböcker, forum, tekniker etc. och gör detta korrekt så att det inte finns några oljeläckage

Boost gauge specifika delar:

  • Lufttryckssensor (endast om du vill göra en boost -mätare) -
  • Luftslang
  • T -beslag

Bibliotek jag använde som var oumbärliga:

Smoothiecharts - https://smoothiecharts.org/ Utmärkta och lätta liveuppdateringsscheman. Mycket anpassningsbar och förlitar sig inte på att referera till ett js -bibliotek någon annanstans på internet. Detta möjliggör en installation av "lokal-IOT" -typ och hela biblioteket passar i en enda sträng för webbserverutdraget i kod!

ESPAsyncWebServer -https://github.com/me-no-dev/ESPAsyncWebServer- gör vad det står på rutan och gör det bra

ThingPulse OLED -grafikbibliotek (kallar ibland squix -biblioteket) - https://github.com/ThingPulse/esp8266-oled-ssd130… - mycket effektiv och enkel grafik för ESP -chipsen. Tillät mig att göra lite lat programmering och ändå få övertygande animationer.

Verktyg/diverse:

lödkolv - används för att göra långa kabeldragningar för sensorer, installera sidhuvuden ombord, krympa krympomslag etc.

skruvmejsel/uttag/andra bilverktyg - nödvändigt för att installera sensorer på bilen

dubbelsidig tejp - för att installera mätare i höljen och installera hölje i bil (varmt lim och annat kan fungera, men jag föredrar 3M dubbelsidig yttre trimtejp. Den håller bra och kan dras av utan att skada saker.)

sax - för tejp och skärning av rör och dragkedjor

dragkedjor - för att hålla ihop saker, bunta ihop trådar under instrumentbrädan och i motorrummet, hålla sensorer på plats, etc.

Steg 1: Kod först/hårdvara andra

Kod först/hårdvara andra
Kod först/hårdvara andra
Kod först/hårdvara andra
Kod först/hårdvara andra

Koden kan laddas ner här:

Oljetryck -

Öka trycket -

Öka trycket med ansikten istället för analoga lookmätare -

Grafikkod: ThingPulse -biblioteket är så mycket effektivt att du kan rita xbms direkt ovanpå varandra och få övertygande resultat!

Mätarbilderna kom faktiskt från ett grafikförråd med öppen källkod (https://thenounproject.com/). Konstnären Iconic, CY (https://thenounproject.com/icon/490005/).

Jag använde gimp för att generera 20 olika ramar med nålen som pekade på varje bockmarkering. Smiley -ikonerna är av NOVITA ASTRI, ID och finns här:

Sedan konverterade jag allt till const uint8_t-arrays med denna teknik (tips: om färgerna är inverterade när du visar dem, vänd bara färgerna på originalet): https://blog.squix.org/2015/05/esp8266- nodemcu-ho …

Levande animationskod är ganska enkel:

  • Få läsning från sensorn
  • Skalavläsning (jag gjorde det 1 till 1 för positiva boostvärden och rör bara nålen när den är i boost inte när den är i vakuum)
  • Rita xbm och lägg sedan ner tecken för allt annat.
  • skölj och upprepa

Sensorkod: Jag återanvänder sensorkod som jag har använt för dessa två sensorer för några andra projekt. Jag lade till lite medelvärde för att komma bort från hoppiga sensorer. Detta inkluderar att läsa varje "läsning" är i genomsnitt 5 avläsningar.

Boostkod (sensorn ger en analog värde från 0-5 volt som ADC förvandlas till steg från 0-1024):

int getBoost () {float rboost = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); // float ResultatPSI = (rboost*(. 00488)/(. 022) +20) /6,89 - atmo; // lämna /6,89 för kpa float ResultatPSI = (((rboost /4095) + 0,04) /0,004) * 0,145 - atmo; // med 0,145 för att beräkna psi // 4096 värden på esp32 /*rBoost = rBoost + 1; om (rBoost> = 20) {rBoost = 0; }*/ retur (ResultatPSI); }

Oljetryckskod (sensorn varierar dess motstånd baserat på det tryck den känner av, så en spänningsdelare krävs för att omvandla detta till en spänning från 0-5v se: https://electronics.stackexchange.com/questions/3…https:/ /www.instructables.com/id/Remote-Car-Monito … (mot botten) för mer information):

int getOilPSI () {float psival = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); psival = -0,0601*psival + 177,04 - 14,5; retur psival; }

Webbserver och AP -funktionalitet: AP -funktionen är ganska enkel - instantiera och AP -objekt med ESSID du vill sända och lösenordet och du är bra att gå.

const char *ssid = "boost_gauge_ap"; const char *password = "lösenord";

WiFi.softAP (ssid, lösenord);

Den har till och med en DHCP -server så du behöver inte oroa dig för det. Som standard är IP: n 192.168.1.4 (ingen aning om varför, det är precis vad man valde). Webbserverbiten är lite knepigare och krävde lite research. I princip vill du ha en asynkisk webbserver så att den kan få liveuppdateringsdata. Lyckligtvis finns det ett bibliotek för det. Jag är inte en javascript -utvecklare, så jag pysslade med ett gäng kartläggnings- och grafbibliotek tills jag snubblade på smoothie -diagram. De flesta andra kartbibliotek är skrivna så att de ärver alla typer av kod från andra bibliotek från hela webben som laddas dynamiskt när en sida återges. Jag ville att detta skulle fungera oberoende av internet så det här var ett stort fynd. För det andra måste den vara tillräckligt liten för att den ska passa på en arduino och som du kan se i koden passar den i en enda char array.

Webserverdeklarationer: #include AsyncTCP.h #include ESPAsyncWebServer.h… AsyncWebServer server (80); // instansiera det och välj port (80 är standard för http) … server.on ("/", HTTP_GET, (AsyncWebServerRequest *begäran) {request-> send (200, "text/html", "… // webbsidan + smoothiecharts -biblioteket i en enorm char array}); server.on ("/val", HTTP_GET, (AsyncWebServerRequest *begäran) {// den första sidan kallar faktiskt denna mycket lilla sida som bara returnerar värdeförfrågan -> skicka (200, "text/html", Sboost);}); server.begin ();

Steg 2: Hårdvara och ledningar

Hårdvara och ledningar
Hårdvara och ledningar
Hårdvara och ledningar
Hårdvara och ledningar
Hårdvara och ledningar
Hårdvara och ledningar

På bilden i galleriet är de två sensorerna jag använder. Den stora guldfärgade är en Autometer 2242 oljetryckssensor. Denna givares kropp och tråd är slipad och terminalen är avläsning i motstånd.

Autometern ger dig en kurva av motstånd mot tryck eller motstånd mot temperatur för någon av deras sensorer. Jag har konverterat detta till spänning med en spänningsdelare (se kopplingsschema).

MPX4250AP lufttryckssensor har tre spänningsnålar och flera oanvända stift. De är V in, mark och sensorutgång. Den matar ut en 0-5v avläsning som kan läsas av mikrokontrollern (eller i fallet med denna mcu 0-3 volt. Så, sensoravläsningen skalas ner med en spänningsdelare.). Specifikationsbladet för det finns här:

Det finns flera problem med att skala ner från 5v till 3v logik. I mitt fall använde jag spänningsdelaren för enkelhetens skull och jag hade delarna runt min arbetsbänk. Du kommer att införa lite fel i avläsningarna baserat på det eventuella felet hos de ytterligare komponenterna (de två motstånden). Detta kan göra din avläsning 10% rabatt i vissa fall. Jag kan leva med det här. Om du inte kan du kanske vill använda en opamp och motstånd eller en logisk nivåomvandlare (tillgänglig från olika elektronikleverantörer. Sparkfun har en här: https://www.sparkfun.com/products/12009 Jag kan byta till den som Jag får höga avläsningar ibland på denna mätare (jag har faktiskt visat den här produkten på mitt kopplingsschema).

Jag drev ESP32 via USB. Detta inkluderade att ansluta en direktladdare som den här: https://www.amazon.com/gp/product/B00U2DGKOK/ref=p… till bilen och sedan använda en USB -hub för att dela upp den. Du kan se att jag använde rätvinkliga usb -kablar för att se till att allt fungerar i ett litet område (https://www.amazon.com/gp/product/B00ENZDFQ4/ref=p…).

Andra foton visar platser där jag skar hål eller drog tråd. Varje bil kommer att vara annorlunda. Var försiktig, knivar och saxar är vassa, elektricitet kan vara farligt så koppla ur batteriet innan du kopplar ihop saker.

Steg 3: 3D -tryckt hus

3D -tryckt hus
3D -tryckt hus

Jag har använt flera 3D -tryckta höljen för detta.

  • En generisk stor 2 skärm rundmätare. Du kan se detta på dessa bilder på den första sidan. Jag satte den bredvid min klocka på mitt streck.
  • En kilkil-stil som passar i klockområdet på en subaru impreza (wrx, sti, etc.) från cirka 2008 till 2014.
  • En dubbelmätare som passar på rattpelare och andra lätt rundade ytor:

Du är välkommen att kopiera och ändra dessa för att passa dina behov. Ingen av dem är perfekta och de kommer alla att kräva lite justeringar.

Några anteckningar:

  • Jag avslutade mitt med plastidip; det är den föredragna metoden för lata.
  • Slipning av plast gör fina partiklar som inte är bra för dig, använd en lämplig mask.
  • Jag använde PETG för mina höljen. ABS är också bra. PLA kommer att skeva i den heta solen på en instrumentbräda.
IoT -utmaning
IoT -utmaning
IoT -utmaning
IoT -utmaning

Andra pris i IoT Challenge

Rekommenderad: