Indholdsfortegnelse:

Arduino bilskærm: 7 trin (med billeder)
Arduino bilskærm: 7 trin (med billeder)

Video: Arduino bilskærm: 7 trin (med billeder)

Video: Arduino bilskærm: 7 trin (med billeder)
Video: Уроки Ардуино #0 - что такое Arduino, куда подключаются датчики и как питать Ардуино 2024, November
Anonim
Image
Image
Arduino bil display
Arduino bil display
Arduino bil display
Arduino bil display

Jeg byggede en indbygget diagnostik (OBD-II) baseret skærm ved hjælp af en 7 TFT LCD fra Adafruit, en Teensy 3.6, Freematics OBD-II I2C Adapter og nogle billige backup-sensorer, jeg fandt på Amazon. Displayet har to sider: en til når min Honda Accord er i drev og en til når den er i bakgear.

Når min bil kører, vises omdrejningstallet, MPH, motorbelastningsprocent, batterispænding, kabintemperatur og motorkølevæsketemperatur (der er flere andre køretøjsstatistikker til rådighed, hvis man ikke ønsker disse).

Når min bil er i bakgear, læser den Arduino IDE -kompatible Teensy 3.6 et animeret bitmapbillede af min bil, jeg fandt online, viser den og læser derefter backupsensorerne. De fire sensorer har hver deres afstand i fod plus en animation bag bilen, der ændrer farve baseret på, hvor tæt objektet er på bilen (bare grønt betyder <5 fod, grønt og gult betyder <2,6 fod, og grønt, gult, og rød betyder <1 fod).

Endelig tilføjede jeg muligheden for at dæmpe skærmen om natten.

Slutresultatet ser godt ud og fungerer meget godt i min bil. Jeg endte endda med at installere det i midterkonsollen, hvilket var en helt anden proces, som jeg ikke kommer ind på i denne instruerbare. Listen over dele, som jeg brugte til at oprette denne LCD -skærm, er nedenfor.

1) Freematics OBD -II Adapter - $ 35

2) Backup sensorer - $ 15

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

4) SPI -baseret LCD -skærmdriver - $ 35

5) Teensy 3,6 - $ 30

6) Level Shifter - $ 4

7) 74HC125 Tri State Buffer IC -$ 6 for 2 pakker (jeg er sikker på at du kunne finde denne cheeper andre steder)

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

9) Wire, kondensatorer og modstande.

10) LP3470-2.93 Tænd for nulstilling af IC - $ 2

11) (valgfrit): DS18B20 Temperatursensor - $ 8

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

13) (valgfrit): Tilføj en sikringsledning til kreds - $ 8 for 5 stk

Trin 1: Læsning af backupsensorerne

Læsning af sikkerhedskopisensorer
Læsning af sikkerhedskopisensorer
Læsning af backupsensorer
Læsning af backupsensorer
Læsning af backupsensorer
Læsning af backupsensorer
Læsning af sikkerhedskopisensorer
Læsning af sikkerhedskopisensorer

Dette trin er vanskeligt, fordi disse backupsensorer kommunikerer til en transceiver og derefter til en lille LCD som vist på billedet ovenfor. Jeg ville have en måde at slippe af med deres display og bruge mit eget. Ved hjælp af et websted, jeg fandt efter noget googling (Hacking reverse parkeringssensorer), kunne jeg læse den proprietære kommunikationsprotokol, som transceiveren sender til LCD -skærmen. Af en eller anden grund er kommunikationsprotokollen ikke en typisk sådan som I2C, UART, CAN, USB osv., Og protokollen varierer afhængigt af leverandøren. Jeg anbefaler stærkt, at du køber det sæt, jeg linkede ovenfor, hvis du vil bruge min kode, fordi det er specielt skrevet til disse sensorer.

Før jeg afmonterede LCD'et, de leverede, sonderede jeg de tre ledninger, der sluttede sig til transceiveren og LCD'en. Der var +5V rød ledning, slebet sort ledning og en blå ledning. Efter at have tilsluttet mit oscilloskop til den blå ledning og jorden, så jeg et spor svarende til billedet set ovenfor, men ikke ligefrem (jeg brugte billedet fra webstedet linket ovenfor). Mit spor havde en HIGH længere varighed startbit, efterfulgt af 17 flere kortere varighed bits. Bitene 0-5 efter startbitten havde ikke nyttig information. Bit 6-8 svarer til sensor A, B, C eller D. Bit 9-16 svarede til længden i meter. Jeg inkluderede en Arduino IDE -skitse, der læser sensorerne og sender dataene over den serielle konsol.

Trin 2: Oprettelse af bitmap -billedet og læg det på et MicroSD -kort

Oprettelse af bitmap -billedet og lægge det på et MicroSD -kort
Oprettelse af bitmap -billedet og lægge det på et MicroSD -kort
Oprettelse af bitmap -billedet og lægge det på et MicroSD -kort
Oprettelse af bitmap -billedet og lægge det på et MicroSD -kort

Jeg brugte en gratis fotoredigeringssoftware kaldet GIMP til at beskære og ændre størrelsen på et billede af min bil ovenfra. Jeg eksporterede derefter billedet som et 24 bit bitmap -billede med navnet "car.bmp", der er 110 pixels med 250 pixels. Jeg uploadede dette til et microSD -kort og lagde microSD -kortet i min Teensy 3.6 mikrokontroller.

Hovedårsagerne til, at jeg gik med Teensy 3.6 i stedet for en UNO, var den hastighed, hvormed Teensy kunne læse et SD -kort og vise billedet ved hjælp af RA8875 -skærmdriveren. Ved hjælp af en UNO tog processen cirka 8 sekunder, mens en Teensy 3.6 tog 1,8 sekunder.

Trin 3: Tilslutning af hardwaren

Tilslutning af hardware
Tilslutning af hardware

Adafruit har en virkelig flot 7 TFT LCD, der drives af en IC kaldet RA8875. Jeg valgte denne skærm og skærmdriver af to grunde. For det første er der omfattende biblioteker, der er forskrevet til skærmen. For det andet kan skærmdriveren tale med enhver mikrokontroller over SPI, hvilket betyder, at der ikke er så mange ledninger, der forbinder mikrokontrolleren til RA8875.

Der er to ulemper ved denne opsætning. Først er det, at der er en hardwarefejl med RA8875-kortet fra Adafruit, der kræver brug af 74HC125 tri-state buffer IC, hvis du vil bruge en SPI-baseret enhed, f.eks. Et SD-kort. For mere fuldt ud at forstå hardwarefejlen, bedes du læse følgende forum. For det andet er den relativt lange tid, det tager for billeder at blive sendt til LCD -skærmen. Den lange tid, det tager, før et billede sendes til LCD'et, skyldes også SPI -forbindelsen, der er begrænset af mikrontrollernes urhastighed og den store mængde data, der skal sendes til skærmdriveren over meget få ledninger.

Jeg lavede en Fritzing -skematisk, så alle, der gerne vil oprette dette display, let kan læse, hvilke pins på Teensy 3.6 der er forbindelse til. Jeg inkluderede en.frz -fil herunder. De eneste to komponenter, der ikke er mærket, er kondensatorerne, som er en 1F 16V elektrolytkondensator og en 100μF keramisk kondensator. Jeg inkluderede disse for at sikre, at strømmen til Teensy -mikrokontrolleren var stabil DC +5V og ikke indeholdt spændingsspidser (muligvis ikke nødvendigt, men jeg inkluderede dem, fordi en bils spændingsforsyning kan svinge hurtigt afhængigt af belastningen på batteriet).

Et par ting at nævne om komponenterne. Først tager niveauskifteren ethvert 5V signal og forvandler det til en 3,3V Teensy 3.6 sikker spænding. Dette er nødvendigt for OBD I2C -adapteren samt backupsensor -transceiveren. For det andet kræver teenagerens I2C -linjer 4,7 kΩ trækmodstande. For det tredje er de fire modstande, der forbinder "nattidskablet" (dæmpningskablet) og "backup-indkoblingskablet" nødvendige for at fungere som en spændingsdeler for at bringe 12V-13V-signalerne ned til ca. 2,5-3V signaler.

UPDATE 7/22/18: Jeg fandt, at den interne temperatursensor på OBD-I2C-modulet udsendte meget mærkelige tal. Nogle gange ville det fungere, men for det meste udsendte modulet temperaturer over 400 grader F. På grund af dette besluttede jeg at tilføje min egen ds18b20 temperatursensor. Du er mere end velkommen til at bruge enhver form for temperatursensor her, men du bliver nødt til at redigere Arduino -koden.

UPDATE 3/1/19: Teensy 3.6 starter ikke, når det er ekstremt koldt. Jeg tilføjede et tændt nulstillingskredsløb for at sikre, at det starter korrekt.

Trin 4: RA8875 Displaydriver og grafisk design

RA8875 Displaydriver og grafisk design
RA8875 Displaydriver og grafisk design

RA8875 -skærmdriveren har et bibliotek kaldet Adafruit_RA8875, som jeg brugte, da jeg lavede de former, der ses på den første side og anden side. Biblioteket til RA8875 kan kun oprette linjer, rektangler, afrundede rektangler, trekanter, ellipse og cirkler, så grafikken skal designes på en smart måde for at skabe mere komplekse former. For eksempel er den grå ring på den første side faktisk en fuld grå cirkel med en større diameter efterfulgt af en fuld sort cirkel med en mindre diameter. En lille sektion af backupsensorsiden indeholder også 2 trekanter arrangeret på en sådan måde, at de danner en polygonform. Jeg gjorde dette, så jeg kunne ændre farven på en individuel sektion på backupsensorsiden. Arduino -filen til displayet indeholder en række punkter, som jeg brugte til at holde styr på, hvor trekanterne og andre former var.

Jeg brugte dette fantastiske websted til at vælge RGB565 farver og definere dem i skitsen, så jeg kunne bruge ikke-standardfarver, der allerede er foruddefineret i Adafruit_RA8875 biblioteket.

Med hensyn til skrifttyper understøtter Adafruit_RA8875 -biblioteket kun en, medmindre du kommenterer et afsnit af biblioteket, som giver dig mulighed for at bruge skrifttyperne Adafruit_GFX -biblioteket. Jeg inkluderede det modificerede Adafruit_RA8875 bibliotek nedenfor. Jeg kommenterede lige et par linjer med kode og kunne derefter bruge skrifttyperne i Adafruit_GFX biblioteket. Hvis du også vil bruge den 7 -segmenters skrifttype, som jeg brugte i dette projekt, skal du sørge for, at filen "FreeSevenSegNumFont.h" er i skrifttypemappen i Adafruit_GFX -biblioteket.

Trin 5: Upload af skitsen

Upload af skitsen
Upload af skitsen
Upload af skitsen
Upload af skitsen

For at uploade skitsen til en Teensy 3.6 skal du installere Teensyduino. Derefter bliver du nødt til at erstatte Adafruit_RA8875 og Adafruit_GFX bibliotekerne i teenagebibliotekets placering (ikke din typiske placering i dokumenter). På Mac skulle jeg højreklikke på Arduino -applikationsikonet i applikationer og derefter navigere til/Contents/Java/hardware/teensy/avr/libraries. På windows er jeg ret sikker på, at det er under dit C -drev i programfiler x86, Arduino og derefter hardware -mappen derinde. Når du har gjort det, skal du ændre skitsebogens placering i Arduino -applikationen ved at redigere den i præferencer til, hvor dine teenagebiblioteker nogensinde er (dvs. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

OPDATERING 7/22/16: På grund af det interne temperatursensorproblem, jeg talte om tidligere, var jeg nødt til at installere en DS18B20 modul temperatursensor. Du vil se 4 arduino -skitser i zip -filen. Upload venligst display_code-skitsen, hvis du vil bruge den interne temperatursensor i OBD-II I2C-modulet. Upload venligst display_code_with_new_temperature_sensor sketch, hvis du vil bruge DS18B20 -modulet, jeg linkede ovenfor.

OPDATERING 11/17/17: Jeg fik rettet flere fejl i softwaren, herunder DS18B20, der udsendte en temperatur på 185 Fahrenheit, displayet slog slet ikke til i koldt vejr, og pixels satte sig fast i den forkerte farve, når displayet er dæmpet.

Brug derefter det billede, jeg har ovenfor, til at sikre, at dine teenageindstillinger matcher billedet. Jeg fandt, at overclocking af teenageren til 240MHz ikke tillod I2C OBD-II-adapteren at kommunikere med teenageren. Til sidst skal du bare klikke på upload.

Jeg skrev temmelig omfattende kommentarer i arduino sketch -filerne. Se venligst der for en forklaring på, hvordan softwaren fungerer. Du er velkommen til at kontakte mig med spørgsmål. Jeg vil forsøge at besvare dem efter bedste evne. Held og lykke!

Trin 6: 3D -udskrivning af et LCD -etui

3D Udskriv et LCD -etui
3D Udskriv et LCD -etui
3D Udskriv et LCD -etui
3D Udskriv et LCD -etui
3D Udskriv et LCD -etui
3D Udskriv et LCD -etui

Jeg lavede et 3D -printet LCD -top- og bunddæksel for at beskytte 7 -skærmen. Jeg har vedhæftet. IPT -opfinderdelfilerne samt. STL -filerne.

Jeg inkluderede også en del kaldet backup_sensor_ring.ipt, som er en ring, der passer til de backup -sensorer, jeg linkede ovenfor. Min bil havde allerede forborede backup-sensorhuller, der var for store til de backup-sensorer, jeg købte på Amazon, så jeg var nødt til at oprette en ring, der ville passe til backup-sensorerne. Hvis du vil bore i din kofanger med det medfølgende cirkulære boremaskine i sættet, har du ikke brug for denne del.

Trin 7: Opdeling af OBD-II-porten, så Arduino har kun strøm, når bilen kører

Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører
Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører
Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører
Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører
Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører
Opdeling af OBD-II-porten, så Arduino kun har strøm, når bilen kører

Jeg indså kort efter installation af min skærm, at displayet altid var tændt, selv når bilen var slukket. Når jeg kiggede på OBD-II pinout, fandt jeg ud af, at 12V-strømledningen til OBD-II-stikket altid er forbundet direkte til batteriet.

For at komme uden om dette købte jeg en OBD-II splitter, klippede ledningen til pin 16 på en af de to stik på splitteren og sluttede derefter den afskårne ledning til en tilføj en kredsløbstråd.

Derefter gik jeg ved hjælp af mit multimeter til sikringsboksen på førersiden og testede de eksisterende sikringer for at se, hvilken sikring der fik strøm, efter at nøglen blev drejet til tændingen.

Endelig tilsluttede jeg tilføj en kredsløbskablet til sikringen, som jeg fandt, så displayet nu kun tændes, når min bil kører. Undersøg venligst, hvordan du korrekt tilføjer et kredsløb til din bil. Jeg fandt denne youtube -vejledning til at være en god.

Anbefalede: