Innehållsförteckning:

Arduino bilskärm: 7 steg (med bilder)
Arduino bilskärm: 7 steg (med bilder)

Video: Arduino bilskärm: 7 steg (med bilder)

Video: Arduino bilskärm: 7 steg (med bilder)
Video: Build Seven Segment LED clock with Arduino and DS3231 - Robojax 2024, Juli
Anonim
Image
Image
Arduino bilskärm
Arduino bilskärm
Arduino bilskärm
Arduino bilskärm

Jag byggde en inbyggd diagnostik (OBD-II) baserad skärm med hjälp av en 7 TFT LCD från Adafruit, en Teensy 3.6, Freematics OBD-II I2C Adapter och några billiga backupsensorer som jag hittade på Amazon. Displayen har två sidor: en för när min Honda Accord är i drivning och en för när den är i back.

När min bil är i körning visas varvtalet, MPH, motorbelastningsprocent, batterispänning, hyttemperatur och motorkylvätsketemperatur (det finns flera andra fordonsstatistiker att visa om man inte vill ha dessa).

När min bil är i back läser den Arduino IDE -kompatibla Teensy 3.6 en animerad bitmappsbild av min bil jag hittade online, visar den och läser sedan backupsensorerna. De fyra sensorerna har varsitt avstånd i fot plus en animation bakom bilen som ändrar färg baserat på hur nära föremålet är till bilen (bara grönt betyder <5 fot, grönt och gult betyder <2,6 fot och grönt, gult, och rött betyder <1 fot).

Slutligen lade jag till möjligheten att dimma skärmen på natten.

Slutresultatet ser bra ut och fungerar mycket bra i min bil. Jag slutade till och med att installera det i mittkonsolen, vilket var en helt annan process som jag inte kommer in på i denna instruerbara. Listan över delar som jag använde för att skapa denna LCD -skärm är nedan.

1) Freematics OBD -II -adapter - $ 35

2) Backup -sensorer - $ 15

3) 7 TFT LCD -skärm - $ 38

4) SPI -baserad LCD -skärmdrivrutin - $ 35

5) Teensy 3,6 - $ 30

6) Nivåreglage - $ 4

7) 74HC125 Tri State Buffer IC -$ 6 för 2 -pack (jag är säker på att du kan hitta denna cheeper någon annanstans)

8) MicroSD -kort> = 1 GB - $ 4

9) Tråd, kondensatorer och motstånd.

10) LP3470-2.93 Ström på Återställ IC - $ 2

11) (tillval): DS18B20 temperatursensor - $ 8

12) (valfritt): OBD -II Splitter - $ 10

13) (valfritt): Lägg till en krets säkring - 8 dollar för 5 -pack

Steg 1: Läs säkerhetskopieringssensorer

Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer
Läser säkerhetskopieringssensorer

Det här steget är svårt eftersom dessa reservsensorer kommunicerar till en sändtagare och sedan till en liten LCD -skärm som visas på bilden ovan. Jag ville ha ett sätt att bli av med deras display och använda min egen. Med hjälp av en webbplats som jag hittade efter lite googling (Hacking reverse parking sensors) kunde jag läsa det proprietära kommunikationsprotokollet som transceivern skickar till LCD -skärmen. Av någon anledning är kommunikationsprotokollet inte typiskt, såsom I2C, UART, CAN, USB, etc. och protokollet varierar beroende på leverantör. Jag rekommenderar starkt att du köper den uppsättning jag länkade ovan om du ska använda min kod eftersom den var speciellt skriven för dessa sensorer.

Innan jag kopplade bort LCD -skärmen som de gav, undersökte jag de tre ledningarna som gick med i transceivern och LCD -skärmen. Det fanns +5V röd tråd, slipad svart tråd och en blå tråd. Efter att ha anslutit mitt oscilloskop till den blå tråden och marken såg jag ett spår som liknade bilden ovan men inte exakt (jag använde bilden från webbplatsen länkad ovan). Mitt spår hade en HIGH längre startbit, följt av 17 fler kortare durationsbitar. Bitarna 0-5 efter startbiten hade inte användbar information. Bit 6-8 motsvarar sensorn A, B, C eller D. Bit 9-16 motsvarade längden i meter. Jag inkluderade en Arduino IDE -skiss som läser sensorerna och matar ut data över seriekonsolen.

Steg 2: Skapa bitmappsbilden och lägg den på ett MicroSD -kort

Skapa bitmappsbilden och sätt den på ett MicroSD -kort
Skapa bitmappsbilden och sätt den på ett MicroSD -kort
Skapa bitmappsbilden och sätt den på ett MicroSD -kort
Skapa bitmappsbilden och sätt den på ett MicroSD -kort

Jag använde ett gratis fotoredigeringsprogram som heter GIMP för att beskära och ändra storlek på en bild av min bil uppifrån. Jag exporterade sedan bilden som en 24 bitars bitmappsbild med namnet "car.bmp" som är 110 pixlar med 250 pixlar. Jag laddade upp detta till ett microSD -kort och lade microSD -kortet i min Teensy 3.6 mikrokontroller.

De främsta anledningarna till att jag gick med Teensy 3.6 istället för en UNO var den hastighet med vilken Teensy kunde läsa ett SD -kort och visa bilden med RA8875 -skärmdrivrutinen. Med hjälp av en UNO tog processen cirka 8 sekunder, medan en Teensy 3.6 tog 1,8 sekunder.

Steg 3: Ansluta hårdvaran

Ansluta hårdvaran
Ansluta hårdvaran

Adafruit har en riktigt snygg 7 TFT LCD som drivs av en IC som kallas RA8875. Jag valde denna bildskärms- och bildskärmsdrivrutin av två skäl. För det första finns det omfattande bibliotek förskrivna för displayen. För det andra kan bildskärmsdrivrutinen prata med någon mikrokontroller över SPI, vilket betyder att det inte är så många ledningar som ansluter mikrokontrollern till RA8875.

Det finns två nackdelar med denna inställning. Först är det faktum att det finns en hårdvarufel med RA8875-kortet från Adafruit som kräver användning av 74HC125 tri-state buffer IC om du vill använda någon SPI-baserad enhet, till exempel ett SD-kort. För att mer fullständigt förstå maskinvarubuggen, läs följande forum. För det andra är den relativt långa tid det tar för bilder att skickas till LCD -skärmen. Den långa tid det tar för en bild att skickas till LCD -skärmen beror också på SPI -anslutningen, som är begränsad av mikroterminalernas klockhastighet och den stora mängden data som måste skickas till bildskärmsdrivrutinen över väldigt få ledningar.

Jag skapade en Fritzing -schema så att alla som vill skapa den här skärmen enkelt kan läsa vilka stift på Teensy 3.6 ansluter till. Jag inkluderade en.frz -fil nedan. De enda två komponenterna som inte är märkta är kondensatorerna, som är en 1F 16V elektrolytkondensator och en 100μF keramisk kondensator. Jag inkluderade dessa för att se till att strömmen till Teensy -mikrokontrollern var stabil DC +5V och inte innehöll några spänningspikar (kan inte vara nödvändigt men jag inkluderade dem eftersom en bils spänningsförsörjning kan fluktuera snabbt beroende på belastningen på batteriet).

Några saker att nämna om komponenterna. Först tar nivågivaren någon 5V -signal och gör den till en 3,3V Teensy 3.6 säker spänning. Detta är nödvändigt för både OBD I2C -adaptern och backupsensorn. För det andra kräver I2C -linjerna i tonåren 4,7 kΩ uppdragningsmotstånd. För det tredje är de fyra motstånden som förbinder "nattidstråden" (dimningstråden) och "reservkopplingsledningen" nödvändiga för att fungera som en spänningsdelare för att få ner 12V-13V-signalerna till cirka 2,5-3V signaler.

UPPDATERING 7/22/18: Jag fann att den interna temperatursensorn på OBD-I2C-modulen gav mycket konstiga siffror. Ibland skulle det fungera, men för det mesta gav modulen ut temperaturer över 400 grader F. På grund av detta bestämde jag mig för att lägga till min egen ds18b20 temperaturgivare. Du är mer än välkommen att använda någon typ av temperatursensor här, men du måste redigera Arduino -koden.

UPPDATERING 3/1/19: Teensy 3.6 startar inte när det är extremt kallt. Jag lade till en återställningskrets för att se till att den startar ordentligt.

Steg 4: RA8875 Display -drivrutin och grafisk design

RA8875 Display -drivrutin och grafisk design
RA8875 Display -drivrutin och grafisk design

RA8875 -bildskärmsdrivrutinen har ett bibliotek som heter Adafruit_RA8875, som jag använde när jag skapade de former som visas på första sidan och andra sidan. Biblioteket för RA8875 kan bara skapa linjer, rektanglar, rundade rektanglar, trianglar, ellipser och cirklar, så grafiken måste utformas på ett smart sätt för att skapa mer komplexa former. Till exempel är den grå ringen på första sidan faktiskt en hel grå cirkel med större diameter följt av en hel svart cirkel med mindre diameter. En liten del av backupsensorsidan innehåller också två trianglar arrangerade på ett sådant sätt att de får en polygonform. Jag gjorde detta så att jag kunde ändra färgen på en enskild del av backupsensorsidan. Arduino -filen för displayen innehåller en rad punkter som jag använde för att hålla reda på var trianglarna och andra former var.

Jag använde denna fantastiska webbplats för att välja RGB565-färger och definiera dem i skissen så att jag kunde använda icke-standardfärger som redan är fördefinierade i Adafruit_RA8875-biblioteket.

När det gäller teckensnitt stöder Adafruit_RA8875 -biblioteket bara en såvida du inte kommenterar en del av biblioteket, som gör att du kan använda teckensnittet Adafruit_GFX -biblioteket. Jag inkluderade det modifierade Adafruit_RA8875 -biblioteket nedan. Jag kommenterade bara några rader med kod och kunde sedan använda teckensnitt i Adafruit_GFX -biblioteket. För att använda det 7 -segmentiga teckensnitt som jag använde i detta projekt, se till att filen "FreeSevenSegNumFont.h" finns i teckensnittsmappen i Adafruit_GFX -biblioteket.

Steg 5: Ladda upp skissen

Ladda upp skissen
Ladda upp skissen
Ladda upp skissen
Ladda upp skissen

För att ladda upp skissen till en Teensy 3.6 måste du installera Teensyduino. Då måste du byta ut Adafruit_RA8875- och Adafruit_GFX -biblioteken på biblioteksplatsen för tonåringar (inte din typiska plats i dokument). På Mac var jag tvungen att högerklicka på Arduino -programikonen i applikationer och sedan navigera till/Contents/Java/hardware/teensy/avr/libraries. På Windows är jag ganska säker på att det är under din C -enhet i programfiler x86, Arduino och sedan maskinvarumappen där. När du har gjort det måste du ändra skissbokens plats i Arduino -applikationen genom att redigera den i inställningar till var dina tonåriga bibliotek någonsin är (dvs. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

UPPDATERING 7/22/16: På grund av det interna temperaturgivarproblemet jag pratade om tidigare, var jag tvungen att installera en DS18B20 -modul temperatursensor. Du kommer att se 4 arduino -skisser i zip -filen. Vänligen ladda upp display_code-skissen om du vill använda den interna temperatursensorn på OBD-II I2C-modulen. Ladda upp display_code_with_new_temperature_sensor sketch om du vill använda DS18B20 -modulen som jag länkade ovan.

UPPDATERING 11/17/17: Jag fixade flera buggar i programvaran, inklusive DS18B20 som matade en temperatur på 185 Fahrenheit, skärmen slog inte på alls i kallt väder och pixlar fastnade i fel färg när skärmen är nedtonad.

Använd sedan bilden jag har ovan för att se till att dina tonåriga inställningar matchar bilden. Jag tyckte att överklockning av tonåren till 240MHz tillät inte I2C OBD-II-adaptern att kommunicera med tonåringen. Slutligen klickar du bara på uppladdning.

Jag skrev ganska omfattande kommentarer i arduino -skissfilerna. Titta där för en förklaring av hur programvaran fungerar. Kontakta mig gärna vid frågor. Jag ska försöka besvara dem efter bästa förmåga. Lycka till!

Steg 6: 3D -skriv ut ett LCD -fodral

3D Skriv ut ett LCD -fodral
3D Skriv ut ett LCD -fodral
3D Skriv ut ett LCD -fodral
3D Skriv ut ett LCD -fodral
3D Skriv ut ett LCD -fodral
3D Skriv ut ett LCD -fodral

Jag skapade en 3D -tryckt LCD -ovansida och undersida för att skydda 7 -tumsskärmen. Jag har bifogat. IPT -uppfinnarens delfiler samt. STL -filerna.

Jag inkluderade också en del som heter backup_sensor_ring.ipt, som är en ring som passar runt de backupsensorer som jag länkade ovan. Min bil hade redan förborrade säkerhetskopieringshål som var för stora för reservsensorerna jag köpte på Amazon, så jag var tvungen att skapa en ring som skulle passa på reservsensorerna. Om du ska borra in din stötfångare med det medföljande cirkulära borrstycket i setet behöver du inte denna del.

Steg 7: Dela OBD-II-porten så att Arduino bara har ström när bilen körs

Splittring av OBD-II-porten så att Arduino bara har ström när bilen körs
Splittring av OBD-II-porten så att Arduino bara har ström när bilen körs
Dela OBD-II-porten så att Arduino bara har ström när bilen körs
Dela OBD-II-porten så att Arduino bara har ström när bilen körs
Splittring av OBD-II-porten så att Arduino bara har ström när bilen körs
Splittring av OBD-II-porten så att Arduino bara har ström när bilen körs

Jag insåg kort efter installationen av min skärm att displayen alltid var på, även när bilen var avstängd. När jag tittade på OBD-II-pinout fann jag att 12V-strömledningen till OBD-II-kontakten alltid är ansluten direkt till batteriet.

För att komma runt detta köpte jag en OBD-II-splitter, klippte tråden till stift 16 på en av de två kontakterna på splitteren och kopplade sedan den kapade tråden till en add a circuit wire.

Sedan, med min multimeter, gick jag till säkringen på förarsidan och testade de befintliga säkringarna för att se vilken säkring som fick ström efter att nyckeln vridits till tändningen.

Slutligen kopplade jag till en kretsledning till säkringen som jag hittade så att displayen nu bara slås på när min bil är igång. Vänligen undersök hur du korrekt lägger till en krets i din bil. Jag tyckte att den här YouTube -handledningen var bra.

Rekommenderad: