Inhoudsopgave:

Wifi ingeschakeld OLED ESP32 autometers - Ajarnpa
Wifi ingeschakeld OLED ESP32 autometers - Ajarnpa

Video: Wifi ingeschakeld OLED ESP32 autometers - Ajarnpa

Video: Wifi ingeschakeld OLED ESP32 autometers - Ajarnpa
Video: Вывод картинки на oled дисплей и контроллер Arduino, Esp8266, ESP32 2024, December
Anonim
Image
Image
Wifi ingeschakeld OLED ESP32 autometers
Wifi ingeschakeld OLED ESP32 autometers

Introducties eerst…

Ik bouw autometers als een soort van aan en uit hobby. Zie https://www.instructables.com/id/Remote-Car-Monit… en https://www.instructables.com/id/Remote-Car-Monit… voor twee recentere voorbeelden. Ik hou vooral van degenen die opgaan in de originele onderdelen van de auto. Dus waarom is deze anders en wat inspireerde me om hem te bouwen. Het antwoord is twee dingen:

1) ESP32 - Ik wilde het nieuwe kind op de blokchip uitproberen, vooral omdat de op arduino gebaseerde toolchain daarvoor redelijk volwassen is. Een van de interessante dingen die de ESP32 mogelijk maakt, is IOT met zijn ingebouwde wifi- en bluetooth-mogelijkheden. De community heeft meerdere bibliotheken geschreven om dit enigszins eenvoudig te maken (webservers, AP's, wifi-clients, mDNS, enz.).

2) Goedkope OLED-schermen - In 2007 heb ik een meter gemaakt met een TFT die op de plaats van de klok op een GD (2004-2007) WRX zat. TFT is er in verschillende smaken. Sommige werken 's nachts beter, andere overdag beter, enz. Maar geen van hen werkt onder alle omstandigheden. Ik realiseerde me de fout van mijn wegen pas toen een van de meters die ik gebruikte nutteloos was tijdens de zonnige circuitdag van een forumlid. Voer OLED in, die geweldig is voor autotoepassingen. Ze zijn 's nachts niet te fel en (belangrijker) zijn zichtbaar in de meeste zonlichtomstandigheden.

Dit is een twee voor één instructable omdat ik alles heb geschreven voor twee gewone autometers, oliedruk en turbodruk. Beide zijn in wezen hetzelfde: een kleine vormfactormeter met een levendig OLED-scherm met analoge look met discrete cijfers en maxima. Beide fungeren ook als wifi AP's en webservers. Wanneer men met hen verbinding maakt via een computer of mobiele telefoon, is een bewegende ECG-typekaart zichtbaar (dit is het enigszins innovatieve deel).

Benodigdheden

HELTEC ESP32-module - ontvang de wifi-variant

Oliedruk specifieke onderdelen:

Oliedruksensor - Ik gebruikte een automter 5222 Oliedruksensor aansluitingsonderdelen - dit verschilt per auto en locatie van installatie. Raadpleeg servicehandleidingen, forums, mechanica, enz. en doe dit correct zodat er geen olielekken zijn

Specifieke onderdelen van de boostmeter:

  • Luchtdruksensor (alleen als je een boostmeter wilt maken) -
  • Luchtslang
  • T-fittingen

Bibliotheken die ik gebruikte die onmisbaar waren:

Smoothiecharts - https://smoothiecharts.org/ Uitstekende en lichtgewicht live-update grafieken. Zeer aanpasbaar en is niet afhankelijk van het verwijzen naar een js-bibliotheek ergens anders op internet. Dit zorgt voor een "local-IOT" type setup en de hele bibliotheek past in een enkele string voor de webserver-instructie in code!

ESPAsyncWebServer -https://github.com/me-no-dev/ESPAsyncWebServer- doet wat het zegt op de doos en doet het goed

ThingPulse OLED grafische bibliotheek (ook wel de squix-bibliotheek genoemd) - https://github.com/ThingPulse/esp8266-oled-ssd130… - zeer efficiënte en eenvoudige grafische weergave voor de ESP-chips. Stelde me in staat om wat lui te programmeren en toch overtuigende animaties te krijgen.

Gereedschap/diversen:

soldeerbout - gebruikt om lange kabels voor sensoren te maken, headers aan boord te installeren, krimpfolie te krimpen, enz.

schroevendraaier/doppen/ander autogereedschap - nodig om sensoren op auto te installeren

dubbelzijdige tape - om meters in behuizingen te installeren en behuizing in auto te installeren (hete lijm en andere dingen zouden kunnen werken, maar ik geef de voorkeur aan de dubbelzijdige buitenbekledingstape van 3M. Het houdt goed vast en kan worden verwijderd zonder dingen te beschadigen.)

schaar - voor tape en snijden van buizen en kabelbinders

ritssluitingen - om dingen bij elkaar te houden, draden onder het dashboard en in de motorruimte te bundelen, sensoren op hun plaats te houden, enz.

Stap 1: Code eerst/hardware als tweede

Code eerst/hardware als tweede
Code eerst/hardware als tweede
Code eerst/hardware als tweede
Code eerst/hardware als tweede

Code is hier te downloaden:

Oliedruk -

Boostdruk -

Boostdruk met gezichten in plaats van analoge meters -

Grafische code: de ThingPulse-bibliotheek is zo efficiënt dat u xbms over elkaar heen kunt tekenen en overtuigende resultaten kunt behalen!

De meterafbeeldingen kwamen eigenlijk uit een open source grafische repository (https://thenounproject.com/). De kunstenaar Iconic, CY (https://thenounproject.com/icon/490005/).

Ik gebruikte gimp om 20 verschillende frames te genereren waarbij de naald naar elk maatstreepje wees. De smiley iconen zijn van NOVITA ASTRI, ID en staan hier:

Vervolgens heb ik deze allemaal omgezet in const uint8_t-arrays met behulp van deze techniek (hint: als de kleuren worden omgekeerd wanneer u ze weergeeft, keert u gewoon de kleuren van het origineel om): https://blog.squix.org/2015/05/esp8266- nodemcu-ho…

Live animatiecode is vrij eenvoudig:

  • Ontvang het lezen van de sensor
  • Schaalaflezing (ik heb het 1 op 1 gemaakt voor positieve boost-waarden en verplaats de naald alleen wanneer deze in de boost staat, niet wanneer deze in vacuüm is)
  • Teken xbm en noteer dan cijfertekens voor al het andere.
  • Spoel en herhaal

Sensorcode: ik hergebruik de sensorcode die ik voor deze twee sensoren heb gebruikt voor een paar andere projecten. Ik heb wat middeling toegevoegd om weg te komen van springerige sensoren. Dit omvat het lezen van elke "lezing", een gemiddelde van 5 metingen.

Boostcode (sensor geeft een analoge waarde van 0-5 volt die de ADC omzet in stappen van 0-1024):

int getBoost() { float rboost = ((analogRead(36) + analogRead(36) + analogRead(36) + analogRead(36) + analogRead(36))/5); //float ResultaatPSI = (rboost*(.00488)/(.022)+20)/6.89 - atmo; // verlof van de /6.89 voor kpa float ResultPSI = (((rboost / 4095) + 0.04) / 0.004) * 0.145 - atmo; //met 0,145 tot calc psi //4096 waarden op esp32 /*rBoost = rBoost + 1; if (rBoost >= 20) { rBoost = 0; }*/ retour (Result PSI); }

Oliedrukcode (de sensor varieert zijn weerstand op basis van de druk die hij waarneemt, dus een spanningsdeler is nodig om dit om te zetten in een spanning van 0-5v zie: https://electronics.stackexchange.com/questions/3…https:/ /www.instructables.com/id/Remote-Car-Monito… (naar beneden) voor meer informatie):

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

Webserver- en AP-functionaliteit: AP-functionaliteit is vrij eenvoudig - instantiëren en AP-object met de ESSID die u wilt uitzenden en het wachtwoord en u bent klaar om te gaan.

const char *ssid = "boost_gauge_ap";const char *password = "wachtwoord";

WiFi.softAP (ssid, wachtwoord);

Het heeft zelfs een DHCP-server, dus daar hoef je je geen zorgen over te maken. Standaard is het IP 192.168.1.4 (geen idee waarom, dat is precies wat de keuze is). Het webserver-bit is een beetje lastiger en vereist wat onderzoek. In principe wilt u een asynchrone webserver zodat deze live gegevens kan bijwerken. Gelukkig is daar een bibliotheek voor. Ik ben geen javascript-ontwikkelaar, dus ik sleutelde aan een heleboel diagram- en grafische bibliotheken totdat ik smoothie-diagrammen tegenkwam. De meeste andere kaartbibliotheken zijn zo geschreven dat ze allerlei soorten code erven van andere bibliotheken van het internet die dynamisch worden geladen wanneer een pagina wordt weergegeven. Ik wilde dat dit onafhankelijk van internet zou werken, dus dit was een grote vondst. Ten tweede moest het klein genoeg zijn om op een Arduino te passen en zoals je in de code kunt zien, past het in een enkele char-array.

Webserver-declaraties: #include AsyncTCP.h #include ESPAsyncWebServer.h … AsyncWebServer server(80); //instantieer het en kies poort (80 is standaard voor http) … server.on("/", HTTP_GET, (AsyncWebServerRequest *request){ request->send(200, "text/html", "… // de webpagina + de smoothiecharts-bibliotheek in een enorme char-array }); server.on("/val", HTTP_GET, (AsyncWebServerRequest *request){ //de eerste pagina roept eigenlijk deze zeer kleine pagina aan die alleen het waardeverzoek retourneert ->send(200, "text/html", Sboost); }); server.begin();

Stap 2: Hardware en bedrading

Hardware en bedrading
Hardware en bedrading
Hardware en bedrading
Hardware en bedrading
Hardware en bedrading
Hardware en bedrading

Afgebeeld in de galerij zijn de twee sensoren die ik gebruik. De grote goudkleurige is een Autometer 2242 oliedruksensor. Het lichaam en de draad van deze sensor zijn geaard en de terminal is de weerstandsmeting.

Autometer geeft u een curve van weerstand tegen druk of weerstand tegen temperatuur voor elk van hun sensoren. Deze heb ik met een spanningsdeler omgerekend naar spanning (zie aansluitschema).

De luchtdruksensor MPX4250AP heeft drie actieve pinnen en verschillende ongebruikte pinnen. Dit zijn V in, aarde en sensoruitgang. Het geeft een 0-5v-waarde af die kan worden gelezen door de microcontroller (of in het geval van deze mcu 0-3 volt. Dus de sensorwaarde wordt verkleind met behulp van een spanningsdeler.). Het specificatieblad hiervoor is hier te vinden:

Er zijn verschillende problemen bij het verkleinen van de logica van 5v naar 3v. In mijn geval gebruikte ik voor de eenvoud de spanningsdeler en had ik de onderdelen rond mijn werkbank. U introduceert een klein beetje fout in de metingen op basis van de mogelijke fout van de extra componenten (de twee weerstanden). Dit kan in sommige gevallen 10% korting op uw metingen opleveren. Ik kan hiermee leven. Als je dat niet kunt, wil je misschien een opamp en weerstanden of een logische niveau-omzetter gebruiken (verkrijgbaar bij verschillende elektronicaleveranciers. Sparkfun heeft er hier een: https://www.sparkfun.com/products/12009 Ik kan er naar overschakelen als Ik krijg soms hoge waarden op deze meter (in feite heb ik dit product op mijn bedradingsschema getoond).

Ik voedde de ESP32's via USB. Dit omvatte het bedraden van een directe oplader zoals deze: https://www.amazon.com/gp/product/B00U2DGKOK/ref=p… naar de auto en vervolgens het gebruik van een USB-hub om het uit te splitsen. Je kunt zien dat ik haakse USB-kabels heb gebruikt om ervoor te zorgen dat alles in een klein gebied werkt (https://www.amazon.com/gp/product/B00ENZDFQ4/ref=p…).

Andere foto's tonen plaatsen waar ik gaten heb gesneden of draad heb gelopen. Elke auto zal anders zijn. Wees voorzichtig, messen en scharen zijn scherp, elektriciteit kan gevaarlijk zijn, dus koppel de batterij los voordat u de bedrading aansluit.

Stap 3: 3D-geprinte behuizing

3D-geprinte behuizing
3D-geprinte behuizing

Ik heb hiervoor verschillende 3D geprinte behuizingen gebruikt.

  • Een generieke grote ronde meter met 2 schermen. U kunt dit zien op deze foto's van de eerste pagina. Ik leg het naast mijn klok op mijn dashboard.
  • Een enkelvoudige wigvormige stijl die past in het klokgedeelte van een subaru impreza (wrx, sti, enz.) van ongeveer 2008 tot 2014.
  • Een stuk met dubbele dikte dat past op stuurkolommen en andere licht afgeronde oppervlakken:

U bent van harte welkom om deze te kopiëren en aan te passen aan uw behoeften. Geen van hen is perfect en ze zullen allemaal een beetje moeten worden aangepast.

Enkele opmerkingen:

  • Ik heb de mijne afgewerkt met plastidip; het is de voorkeursmethode van de lui.
  • Het schuren van kunststoffen maakt fijne deeltjes die niet goed voor je zijn, gebruik een geschikt masker.
  • Ik heb PETG gebruikt voor mijn behuizingen. ABS is ook goed. PLA zal kromtrekken in de hete zon op een dashboard.
IoT-uitdaging
IoT-uitdaging
IoT-uitdaging
IoT-uitdaging

Tweede prijs in de IoT Challenge

Aanbevolen: