Cuprins:

Afișaj auto Arduino: 7 pași (cu imagini)
Afișaj auto Arduino: 7 pași (cu imagini)

Video: Afișaj auto Arduino: 7 pași (cu imagini)

Video: Afișaj auto Arduino: 7 pași (cu imagini)
Video: How to make Smart Dustbin with Arduino | Arduino Project 2024, Noiembrie
Anonim
Image
Image
Afișaj auto Arduino
Afișaj auto Arduino
Afișaj auto Arduino
Afișaj auto Arduino

Am construit un afișaj bazat pe diagnosticare la bord (OBD-II) folosind un LCD TFT de 7 de la Adafruit, un Teensy 3.6, adaptorul Freematics OBD-II I2C și câțiva senzori de rezervă pe care l-am găsit pe Amazon. Afișajul are două pagini: unul pentru când Honda Accord este în mers și unul pentru când este invers.

Când mașina mea este în mișcare, sunt afișate RPM, MPH, procentul de încărcare al motorului, tensiunea bateriei, temperatura cabinei și temperatura lichidului de răcire a motorului (există mai multe alte statistici despre vehicul disponibile pentru a fi afișate dacă nu le doriți).

Când mașina mea este inversă, compatibilul Arduino IDE Teensy 3.6 citește o imagine animată bitmap a mașinii mele pe care am găsit-o online, o afișează și apoi citește senzorii de rezervă. Cei patru senzori au fiecare distanță în picioare plus o animație în spatele mașinii care schimbă culoarea în funcție de cât de aproape este obiectul de mașină (doar verde înseamnă <5 picioare, verde și galben înseamnă <2,6 picioare și verde, galben, iar roșu înseamnă <1 picior).

În cele din urmă, am adăugat capacitatea de a estompa afișajul pe timp de noapte.

Rezultatul final arată minunat și funcționează foarte bine în mașina mea. Am ajuns chiar să-l instalez în consola centrală, care a fost un alt proces în care nu voi intra în acest instructable. Lista pieselor pe care le-am folosit pentru a crea acest ecran LCD sunt mai jos.

1) Adaptor Freematics OBD-II - 35 USD

2) Senzori de rezervă - 15 USD

3) Afișaj LCD TFT de 7 - 38 USD

4) Driver de afișaj LCD bazat pe SPI - 35 USD

5) Teensy 3,6 - 30 USD

6) Level Shifter - 4 $

7) 74HC125 Tri State Buffer IC - 6 USD pentru 2 pachete (sunt sigur că ați putea găsi acest cheeper în altă parte)

8) Card MicroSD> = 1 GB - 4 USD

9) Sârmă, condensatori și rezistențe.

10) LP3470-2.93 IC de resetare la pornire - 2 USD

11) (opțional): senzor de temperatură DS18B20 - 8 USD

12) (opțional): Splitter OBD-II - 10 USD

13) (opțional): adăugați un cablu de siguranță pentru circuit - 8 USD pentru pachetul de 5

Pasul 1: Citirea senzorilor de rezervă

Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă
Citirea senzorilor de rezervă

Acest pas este dificil, deoarece acești senzori de rezervă comunică cu un transceiver și apoi cu un LCD mic, așa cum se vede în imaginea de mai sus. Am vrut o modalitate de a scăpa de ecranul lor și de a-l folosi pe al meu. Cu ajutorul unui site web pe care l-am găsit după câteva googlinguri (piratarea senzorilor de parcare inversă), am reușit să citesc protocolul de comunicare propriu pe care transmițătorul îl trimite pe ecranul LCD. Din anumite motive, protocolul de comunicație nu este unul tipic, cum ar fi I2C, UART, CAN, USB etc., iar protocolul diferă în funcție de furnizor. Vă recomand cu tărie să achiziționați setul pe care l-am legat mai sus dacă doriți să utilizați codul meu, deoarece a fost scris special pentru acei senzori.

Înainte de a deconecta LCD-ul pe care l-au furnizat, am sondat cele trei fire care se uneau la transceiver și LCD. Erau + 5V sârmă roșie, sârmă neagră la sol și sârmă albastră. După ce mi-am conectat osciloscopul la firul albastru și la masă, am văzut o urmă similară cu imaginea de mai sus, dar nu exact (am folosit imaginea de pe site-ul legat mai sus). Urmarea mea a avut un bit de început cu durată mai mare, urmat de 17 biți cu durată mai scurtă. Biții 0-5 după bitul de start nu au avut informații utile. Biții 6-8 corespund senzorului A, B, C sau D. Biții 9-16 corespund lungimii în metri. Am inclus o schiță Arduino IDE care citește senzorii și transmite datele prin consola serială.

Pasul 2: Crearea imaginii Bitmap și punerea ei pe un card MicroSD

Crearea imaginii Bitmap și plasarea acesteia pe un card MicroSD
Crearea imaginii Bitmap și plasarea acesteia pe un card MicroSD
Crearea imaginii Bitmap și plasarea acesteia pe un card MicroSD
Crearea imaginii Bitmap și plasarea acesteia pe un card MicroSD

Am folosit un software gratuit de editare a fotografiilor numit GIMP pentru a decupa și redimensiona o imagine a mașinii mele din vizualizarea de sus. Am exportat apoi imaginea ca o imagine bitmap pe 24 de biți numită „car.bmp”, adică 110 pixeli pe 250 pixeli. Am încărcat acest lucru pe un card microSD și am pus cardul microSD în microcontrolerul Teensy 3.6.

Principalele motive pentru care am mers cu Teensy 3.6 în loc de UNO a fost viteza cu care Teensy putea citi un card SD și afișa imaginea folosind driverul de afișaj RA8875. Folosind un UNO, procesul a durat aproximativ 8 secunde, în timp ce un Teensy 3.6 a durat 1,8 secunde.

Pasul 3: Conectarea hardware-ului

Conectarea hardware-ului
Conectarea hardware-ului

Adafruit are un LCD TFT de 7 foarte frumos, care este condus de un IC numit RA8875. Am ales acest afișaj și driverul de afișare din două motive. În primul rând, există biblioteci extinse prescrise pentru afișaj. În al doilea rând, driverul de afișare poate vorbi cu orice microcontroler peste SPI, adică nu sunt atât de multe fire care să conecteze microcontrolerul la RA8875.

Această configurație are două dezavantaje. Mai întâi este faptul că există o eroare hardware cu placa RA8875 de la Adafruit care necesită utilizarea unui buffer IC tri-stare 74HC125 dacă doriți să utilizați orice dispozitiv bazat pe SPI, cum ar fi un card SD. Pentru a înțelege mai bine eroarea hardware, citiți următorul forum. În al doilea rând, este timpul relativ lung necesar pentru trimiterea imaginilor pe ecranul LCD. De asemenea, cantitatea mare de timp necesară pentru trimiterea unei imagini pe LCD se datorează conexiunii SPI, care este limitată de viteza de ceas a microcontrolerelor și de cantitatea mare de date care trebuie trimise către driverul de afișare foarte puține fire.

Am creat o schemă Fritzing, astfel încât oricine ar dori să creeze acest afișaj poate citi cu ușurință la ce se conectează pinii de pe Teensy 3.6. Am inclus mai jos un fișier.frz. Singurele două componente care nu sunt etichetate sunt condensatoarele, care sunt un condensator electrolitic 1F 16V și un condensator ceramic 100μF. Le-am inclus pentru a mă asigura că puterea microcontrolerului Teensy a fost constantă DC + 5V și nu conținea niciun vârf de tensiune (poate că nu este necesar, dar le-am inclus deoarece alimentarea cu tensiune a unei mașini poate fluctua rapid în funcție de sarcina bateriei).

Câteva lucruri de menționat despre componente. În primul rând, schimbătorul de nivel ia orice semnal de 5V și îl transformă într-o tensiune de siguranță Teensy 3.6 de 3,3V. Acest lucru este necesar atât pentru adaptorul OBD I2C, cât și pentru transceptorul senzorului de rezervă. În al doilea rând, liniile I2C ale adolescenței necesită rezistențe de tragere de 4,7 kΩ. În al treilea rând, cele patru rezistențe care leagă „firul de noapte” (firul de diminuare) și „firul de angrenare de rezervă” sunt necesare pentru a servi ca divizor de tensiune pentru a aduce semnalele de 12V-13V la aproximativ 2,5-3V semnale.

ACTUALIZARE 22.07.2018: Am găsit că senzorul de temperatură intern al modulului OBD-I2C produce numere foarte ciudate. Uneori ar funcționa, dar de cele mai multe ori, modulul produce temperaturi peste 400 grade F. Din această cauză, am decis să adaug propriul meu senzor de temperatură ds18b20. Sunteți binevenit să folosiți orice tip de senzor de temperatură aici, dar va trebui să editați codul Arduino.

UPDATE 19.03.19: Teensy 3.6 nu pornește când este extrem de rece. Am adăugat o putere la circuitul de reset pentru a mă asigura că pornește corect.

Pasul 4: Driver de afișaj RA8875 și proiectare grafică

Driver de afișaj RA8875 și design grafic
Driver de afișaj RA8875 și design grafic

Driverul de afișare RA8875 are o bibliotecă numită Adafruit_RA8875, pe care am folosit-o când am creat formele care se văd pe prima și pe a doua pagină. Biblioteca pentru RA8875 poate crea numai linii, dreptunghiuri, dreptunghiuri rotunjite, triunghiuri, elipse și cercuri, astfel încât grafica trebuie să fie proiectată într-un mod inteligent pentru a crea forme mai complexe. De exemplu, inelul gri de pe prima pagină este de fapt un cerc complet gri de un diametru mai mare urmat de un cerc negru complet de un diametru mai mic. De asemenea, o mică secțiune a paginii senzorului de rezervă conține 2 triunghiuri dispuse în așa fel încât să formeze o formă de poligon. Am făcut acest lucru pentru a putea schimba culoarea unei secțiuni individuale a paginii senzorului de rezervă. Fișierul Arduino pentru afișaj conține o serie de puncte pe care le-am folosit pentru a ține evidența locului în care erau triunghiurile și alte forme.

Am folosit acest site grozav pentru a alege culori RGB565 și a le defini în schiță, astfel încât să pot folosi culori non-implicite deja predefinite în biblioteca Adafruit_RA8875.

În ceea ce privește fonturile, biblioteca Adafruit_RA8875 acceptă doar una, cu excepția cazului în care comentați o secțiune a bibliotecii, care vă permite să utilizați fonturile din biblioteca Adafruit_GFX. Am inclus mai jos biblioteca Adafruit_RA8875 modificată. Tocmai am comentat câteva linii de cod și apoi am putut folosi fonturile din biblioteca Adafruit_GFX. De asemenea, pentru a utiliza fontul pe 7 segmente pe care l-am folosit în acest proiect, vă rugăm să vă asigurați că fișierul „FreeSevenSegNumFont.h” care se află în folderul de fonturi din biblioteca Adafruit_GFX.

Pasul 5: încărcarea schiței

Încărcarea schiței
Încărcarea schiței
Încărcarea schiței
Încărcarea schiței

Pentru a încărca schița pe un Teensy 3.6, va trebui să instalați Teensyduino. Apoi, va trebui să înlocuiți bibliotecile Adafruit_RA8875 și Adafruit_GFX din locația bibliotecii pentru adolescenți (nu locația dvs. tipică din documente). Pe Mac, a trebuit să fac clic dreapta pe pictograma aplicației Arduino din aplicații și apoi să navighez la / Conținut / Java / hardware / teensy / avr / biblioteci. Pe Windows, sunt destul de sigur că se află sub unitatea dvs. C în fișierele x86, Arduino și apoi în folderul hardware de acolo. După ce faceți acest lucru, va trebui să schimbați locația caietului de schițe în aplicația Arduino, editând-o în preferințe în locul în care se află bibliotecile dvs. pentru adolescență (adică /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

ACTUALIZARE 22.07.2016: Din cauza problemei senzorului de temperatură intern despre care am vorbit mai devreme, a trebuit să instalez un senzor de temperatură al modulului DS18B20. Veți vedea 4 schițe arduino în fișierul zip. Vă rugăm să încărcați schița display_code dacă doriți să utilizați senzorul de temperatură intern al modulului OBD-II I2C. Vă rugăm să încărcați schița display_code_with_new_temperature_sensor dacă doriți să utilizați modulul DS18B20 pe care l-am legat mai sus.

ACTUALIZARE 17.11.17: Am remediat mai multe erori în software, inclusiv DS18B20 care scotea o temperatură de 185 Fahrenheit, afișajul nu se aprinde deloc pe vreme rece și pixelii se blochează într-o culoare greșită atunci când afișajul este estompat.

Apoi, utilizați imaginea de mai sus pentru a vă asigura că setările pentru adolescență se potrivesc cu imaginea. Am constatat că overclockarea adolescenței la 240 MHz nu a permis adaptorului I2C OBD-II să comunice cu adolescența. În cele din urmă, trebuie doar să faceți clic pe încărcare.

Am scris comentarii destul de extinse în fișierele de schițe arduino. Vă rugăm să căutați acolo pentru o explicație a modului în care funcționează software-ul. Vă rugăm să nu ezitați să mă contactați pentru orice întrebări. Voi încerca să le răspund cât pot de bine. Noroc!

Pasul 6: Imprimați 3D o carcasă LCD

Imprimați 3D o carcasă LCD
Imprimați 3D o carcasă LCD
Imprimați 3D o carcasă LCD
Imprimați 3D o carcasă LCD
Imprimați 3D o carcasă LCD
Imprimați 3D o carcasă LCD

Am creat o copertă superioară și inferioară LCD imprimată 3D pentru a proteja afișajul de 7 . Am atașat fișierele de piese inventor. IPT, precum și fișierele. STL.

Am inclus și o parte numită backup_sensor_ring.ipt, care este un inel care se potrivește în jurul acelor senzori de rezervă pe care i-am legat mai sus. Mașina mea avea deja găuri de senzor de rezervă pre-găurate care erau prea mari pentru senzorii de rezervă pe care i-am cumpărat de pe Amazon, așa că a trebuit să creez un inel care să se potrivească pe senzorii de rezervă. Dacă aveți de gând să găuriți în bara de protecție cu piesa de găurit circulară inclusă în set, nu veți avea nevoie de această piesă.

Pasul 7: Împărțirea portului OBD-II, astfel încât Arduino are putere numai când mașina rulează

Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează
Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează
Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează
Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează
Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează
Împărțirea portului OBD-II Deci Arduino are putere numai când mașina rulează

Mi-am dat seama la scurt timp după instalarea afișajului meu că afișajul era întotdeauna pornit, chiar și atunci când mașina era oprită. Privind în pinout-ul OBD-II, am constatat că linia de alimentare de 12V la conectorul OBD-II este întotdeauna conectată direct la baterie.

Pentru a evita acest lucru, am achiziționat un splitter OBD-II, am tăiat firul care merge la pinul 16 pe unul dintre cei doi conectori de pe splitter și apoi am conectat acel fir tăiat la un cablu de adăugare a unui circuit.

Apoi, folosind multimetrul meu, m-am dus la cutia de siguranțe a șoferului și am testat siguranțele existente pentru a vedea ce siguranță a alimentat după ce cheia a fost transformată în contact.

În cele din urmă, am conectat cablul de adăugare la siguranța pe care am localizat-o, astfel încât afișajul să se aprindă numai când mașina mea funcționează. Vă rugăm să faceți câteva cercetări despre cum să adăugați corect un circuit la mașină. Mi s-a părut că acest tutorial YouTube este unul bun.

Recomandat: