Innholdsfortegnelse:

Arduino bilskjerm: 7 trinn (med bilder)
Arduino bilskjerm: 7 trinn (med bilder)

Video: Arduino bilskjerm: 7 trinn (med bilder)

Video: Arduino bilskjerm: 7 trinn (med bilder)
Video: 6 Cult Motorcycles You Need To Ride 2024, Juli
Anonim
Image
Image
Arduino bilskjerm
Arduino bilskjerm
Arduino bilskjerm
Arduino bilskjerm

Jeg bygde en innebygd diagnostikk (OBD-II) basert skjerm ved hjelp av en 7 TFT LCD fra Adafruit, en Teensy 3.6, Freematics OBD-II I2C Adapter, og noen cheep backup-sensorer jeg fant på Amazon. Displayet har to sider: en for når min Honda Accord er i kjøretur og en for når den er i revers.

Når bilen min er i kjøring, vises RPM, MPH, motorbelastningsprosent, batterispenning, kupertemperatur og motorkjølevæsketemperatur (det er flere andre kjøretøystatistikker som kan vises hvis man ikke vil ha disse).

Når bilen min er i revers, leser den Arduino IDE -kompatible Teensy 3.6 et animert bitmap -bilde av bilen jeg fant på nettet, viser den og leser deretter backup -sensorene. De fire sensorene har hver sin avstand i fot pluss en animasjon bak bilen som endrer farge basert på hvor nær objektet er til bilen (bare grønt betyr <5 fot, grønt og gult betyr <2,6 fot, og grønt, gult, og rød betyr <1 fot).

Til slutt la jeg til muligheten til å dempe skjermen om natten.

Sluttresultatet ser bra ut og fungerer veldig bra i bilen min. Jeg endte opp med å installere det i midtkonsollen, som var en helt annen prosess som jeg ikke kommer inn på i denne instruerbare. Listen over deler som jeg brukte til å lage denne LCD -skjermen er nedenfor.

1) Freematics OBD -II -adapter - $ 35

2) Backup -sensorer - $ 15

3) 7 TFT LCD -skjerm - $ 38

4) SPI -basert LCD -skjermdriver - $ 35

5) Teensy 3,6 - $ 30

6) Nivåskifter - $ 4

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

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

9) Ledning, kondensatorer og motstander.

10) LP3470-2.93 Strøm på tilbakestill IC - $ 2

11) (valgfritt): DS18B20 temperatursensor - $ 8

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

13) (valgfritt): Legg til en krets sikringsledning - $ 8 for pakke med 5

Trinn 1: Lese sikkerhetskopisensorene

Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene
Lese sikkerhetskopisensorene

Dette trinnet er vanskelig fordi disse backup -sensorene kommuniserer til en mottaker og deretter til en liten LCD -skjerm som vist på bildet ovenfor. Jeg ville ha en måte å bli kvitt skjermen og bruke min egen. Ved hjelp av et nettsted jeg fant etter litt googling (hacking reverseringssensorer), kunne jeg lese den proprietære kommunikasjonsprotokollen som mottakeren sender til LCD -skjermen. Av en eller annen grunn er kommunikasjonsprotokollen ikke typisk, for eksempel I2C, UART, CAN, USB, etc., og protokollen varierer avhengig av leverandør. Jeg anbefaler på det sterkeste at du kjøper settet jeg koblet til ovenfor hvis du skal bruke koden min fordi den var spesielt skrevet for disse sensorene.

Før jeg koblet fra LCD -skjermen de ga, undersøkte jeg de tre ledningene som ble koblet til transceiveren og LCD -en. Det var +5V rød ledning, malt svart ledning og en blå ledning. Etter å ha koblet til oscilloskopet mitt til den blå ledningen og bakken, så jeg et spor som ligner på bildet ovenfor, men ikke akkurat (jeg brukte bildet fra nettstedet lenket ovenfor). Sporet mitt hadde en HØY lengre startbit, etterfulgt av 17 flere kortere varighetsbiter. Bitene 0-5 etter startbiten hadde ikke nyttig informasjon. Bit 6-8 tilsvarer sensor A, B, C eller D. Bit 9-16 tilsvarer lengden i meter. Jeg inkluderte en Arduino IDE -skisse som leser sensorene og sender ut dataene over seriekonsollen.

Trinn 2: Opprette bitmap -bildet og sette det på et MicroSD -kort

Opprette bitmap -bildet og sette det på et MicroSD -kort
Opprette bitmap -bildet og sette det på et MicroSD -kort
Opprette bitmap -bildet og sette det på et MicroSD -kort
Opprette bitmap -bildet og sette det på et MicroSD -kort

Jeg brukte en gratis fotoredigeringsprogramvare som heter GIMP for å beskjære og endre størrelsen på et bilde av bilen min ovenfra. Jeg eksporterte deretter bildet som et 24 -biters bitmap -bilde med navnet "car.bmp" som er 110 piksler med 250 piksler. Jeg lastet opp dette til et microSD -kort og satte microSD -kortet i min Teensy 3.6 mikrokontroller.

Hovedårsakene til at jeg gikk med Teensy 3.6 i stedet for en UNO var hastigheten som Teensy kunne lese et SD -kort og vise bildet ved hjelp av RA8875 -skjermdriveren. Ved å bruke en UNO tok prosessen omtrent 8 sekunder, mens en Teensy 3.6 tok 1,8 sekunder.

Trinn 3: Koble til maskinvaren

Koble til maskinvaren
Koble til maskinvaren

Adafruit har en virkelig flott 7 TFT LCD som er drevet av en IC kalt RA8875. Jeg valgte denne skjerm- og skjermdriveren av to grunner. For det første er det omfattende biblioteker som er forhåndsskrevet for skjermen. For det andre kan skjermdriveren snakke med hvilken som helst mikrokontroller over SPI, noe som betyr at det ikke er så mange ledninger som kobler mikrokontrolleren til RA8875.

Det er to ulemper ved dette oppsettet. Det første er det faktum at det er en maskinvarefeil med RA8875-kortet fra Adafruit som krever bruk av 74HC125 tri-state buffer IC hvis du vil bruke en SPI-basert enhet, for eksempel et SD-kort. For å forstå maskinvarefeilen mer fullstendig, vennligst les følgende forum. For det andre er det relativt lang tid det tar før bildene sendes til LCD -skjermen. Den lange tiden det tar for et bilde å bli sendt til LCD -skjermen skyldes også SPI -tilkoblingen, som er begrenset av mikronontrollernes klokkehastighet og den store mengden data som må sendes til skjermdriveren. veldig få ledninger.

Jeg laget en Fritzing -skjematisk slik at alle som ønsker å lage denne skjermen enkelt kan lese hvilke pins på Teensy 3.6 kobles til. Jeg inkluderte en.frz -fil nedenfor. De eneste to komponentene som ikke er merket er kondensatorene, som er en 1F 16V elektrolytisk kondensator og en 100μF keramisk kondensator. Jeg inkluderte disse for å sikre at strømmen til Teensy -mikrokontrolleren var jevn DC +5V og ikke inneholdt noen spenningsspisser (kan ikke være nødvendig, men jeg inkluderte dem fordi bilens spenningsforsyning kan svinge raskt avhengig av belastningen på batteriet).

Noen ting å nevne om komponentene. Først tar nivåskifteren ethvert 5V -signal og gjør det til en 3,3V Teensy 3.6 sikker spenning. Dette er nødvendig for OBD I2C -adapteren så vel som backupsensor -mottakeren. For det andre krever I2C -linjene i tenårene 4,7 kΩ opptrekkmotstander. For det tredje er de fire motstandene som forbinder "nattetidskabelen" (dimmekabelen) og "reservekoblingsledningen" nødvendige for å fungere som en spenningsdeler for å bringe 12V-13V-signalene ned til omtrent 2,5-3V signaler.

OPPDATERING 7/22/18: Jeg fant den interne temperatursensoren til OBD-I2C-modulen for å sende ut veldig rare tall. Noen ganger ville det fungere, men mesteparten av tiden sendte modulen ut temperaturer over 400 grader F. På grunn av dette bestemte jeg meg for å legge til min egen ds18b20 temperatursensor. Du er mer enn velkommen til å bruke hvilken som helst type temperatursensor her, men du må redigere Arduino -koden.

OPPDATERING 1/3/19: Teensy 3.6 starter ikke når det er ekstremt kaldt. Jeg la til en strøm på tilbakestillingskrets for å sikre at den starter ordentlig.

Trinn 4: RA8875 Skjermdriver og grafikkdesign

RA8875 Skjermdriver og grafikkdesign
RA8875 Skjermdriver og grafikkdesign

RA8875 -skjermdriveren har et bibliotek kalt Adafruit_RA8875, som jeg brukte når jeg laget figurene som vises på den første siden og den andre siden. Biblioteket for RA8875 kan bare lage linjer, rektangler, avrundede rektangler, trekanter, ellipser og sirkler, så grafikken må utformes på en smart måte for å lage mer komplekse former. For eksempel er den grå ringen på den første siden faktisk en hel grå sirkel med en større diameter etterfulgt av en full svart sirkel med en mindre diameter. En liten del av backupsensorsiden inneholder også to trekanter arrangert på en slik måte at de lager en polygonform. Jeg gjorde dette slik at jeg kunne endre fargen på en individuell del av sikkerhetskopisensorsiden. Arduino -filen for displayet inneholder en rekke punkter som jeg brukte for å holde oversikt over hvor trekanter og andre former var.

Jeg brukte dette flotte nettstedet til å velge RGB565-farger og definere dem i skissen, slik at jeg kunne bruke farger som ikke er forhåndsdefinert i Adafruit_RA8875-biblioteket.

Når det gjelder fonter, støtter Adafruit_RA8875 -biblioteket bare én med mindre du kommenterer en del av biblioteket, som lar deg bruke skriftene Adafruit_GFX -biblioteket. Jeg inkluderte det modifiserte Adafruit_RA8875 -biblioteket nedenfor. Jeg kommenterte bare noen få kodelinjer og kunne deretter bruke skriftene i Adafruit_GFX -biblioteket. For å bruke skriften med 7 segmenter som jeg brukte i dette prosjektet, må du sørge for at "FreeSevenSegNumFont.h" -filen jeg har i fontmappen i Adafruit_GFX -biblioteket.

Trinn 5: Last opp skissen

Laster opp skissen
Laster opp skissen
Laster opp skissen
Laster opp skissen

For å laste opp skissen til en Teensy 3.6, må du installere Teensyduino. Deretter må du erstatte Adafruit_RA8875 og Adafruit_GFX -bibliotekene på biblioteket i tenårene (ikke din typiske plassering i dokumenter). På Mac måtte jeg høyreklikke på Arduino -programikonet i programmer, og deretter navigere til/Contents/Java/hardware/teensy/avr/libraries. På Windows er jeg ganske sikker på at den er under C -stasjonen i Programfiler x86, Arduino og deretter maskinvaremappen der. Når du har gjort det, må du endre skissebokplasseringen i Arduino -applikasjonen ved å redigere den i preferanser til hvor som helst dine tenåringsbiblioteker er (dvs. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

OPPDATERING 22/7/16: På grunn av det interne temperatursensorproblemet jeg snakket om tidligere, måtte jeg installere en DS18B20 modul temperatursensor. Du vil se 4 arduino -skisser i zip -filen. Last opp display_code-skissen hvis du vil bruke den interne temperatursensoren til OBD-II I2C-modulen. Last opp display_code_with_new_temperature_sensor sketch hvis du vil bruke DS18B20 -modulen jeg lenket ovenfor.

OPPDATERING 11/17/17: Jeg fikset flere feil i programvaren, inkludert DS18B20 som sendte en temperatur på 185 Fahrenheit, skjermen slås ikke på i det kalde været og piksler som sitter fast i feil farge når skjermen er nedtonet.

Deretter bruker du bildet jeg har ovenfor for å sikre at tenåringsinnstillingene stemmer overens med bildet. Jeg fant at overklokking av tenåringen til 240 MHz ikke tillot I2C OBD-II-adapteren å kommunisere med tenåringen. Til slutt klikker du bare på opplasting.

Jeg skrev ganske omfattende kommentarer i arduino -skissefilene. Se der for en forklaring på hvordan programvaren fungerer. Ta gjerne kontakt med meg om du har spørsmål. Jeg skal prøve å svare dem etter beste evne. Lykke til!

Trinn 6: 3D -utskrift av et LCD -etui

3D Skriv ut et LCD -etui
3D Skriv ut et LCD -etui
3D Skriv ut et LCD -etui
3D Skriv ut et LCD -etui
3D Skriv ut et LCD -etui
3D Skriv ut et LCD -etui

Jeg laget et 3D -trykt LCD -topp- og bunndeksel for å beskytte 7 -tommers skjerm. Jeg har lagt ved. IPT -oppfinnerdelfilene samt. STL -filene.

Jeg inkluderte også en del som heter backup_sensor_ring.ipt, som er en ring som passer rundt de backup -sensorene jeg koblet ovenfor. Bilen min hadde allerede forborede hull for backupsensorer som var for store for backupsensorene jeg kjøpte på Amazon, så jeg måtte lage en ring som kunne passe inn på backup-sensorene. Hvis du skal bore i støtfangeren din med det medfølgende sirkulære borestykket i settet, trenger du ikke denne delen.

Trinn 7: Splitting OBD-II Port så Arduino bare har strøm når bilen kjører

Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører
Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører
Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører
Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører
Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører
Splitting OBD-II Port Så Arduino har bare strøm når bilen kjører

Jeg skjønte kort tid etter at jeg installerte skjermen at skjermen alltid var på, selv når bilen var slått av. Når jeg ser på OBD-II-pinout, fant jeg ut at 12V-strømledningen til OBD-II-kontakten alltid er koblet direkte til batteriet.

For å komme rundt dette, kjøpte jeg en OBD-II-splitter, kuttet ledningen til pin 16 på en av de to kontaktene på splitteren, og koblet deretter den avskårne ledningen til en tilleggskretsledning.

Deretter, med multimeteret mitt, gikk jeg til sikringsskapet på førersiden og testet de eksisterende sikringene for å se hvilken sikring som fikk strøm etter at nøkkelen ble slått til tenningen.

Til slutt koblet jeg til en kretsledning til sikringen jeg fant, slik at skjermen nå bare slås på når bilen min kjører. Gjør noen undersøkelser om hvordan du riktig kan legge til en krets i bilen din. Jeg syntes denne opplæringen på youtube var en god.

Anbefalt: