Cuprins:
- Pasul 1: Citirea senzorilor de rezervă
- Pasul 2: Crearea imaginii Bitmap și punerea ei pe un card MicroSD
- Pasul 3: Conectarea hardware-ului
- Pasul 4: Driver de afișaj RA8875 și proiectare grafică
- Pasul 5: încărcarea schiței
- Pasul 6: Imprimați 3D o carcasă LCD
- Pasul 7: Împărțirea portului OBD-II, astfel încât Arduino are putere numai când mașina rulează
Video: Afișaj auto Arduino: 7 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
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ă
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
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
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ă
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
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
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ă
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:
Afișaj LED în linie Jocuri Arduino: 7 pași (cu imagini)
Afișaj LED în linie Jocuri Arduino: alias Sistem de jocuri cu afișaj cu scări LED. Un Attiny-85 echipat cu hardware și software pentru a reda „video” plin de acțiune jocuri, pe un afișaj LED în linie. Are un afișaj multiplexat cu 12 LED-uri și acceptă până la 6 intrări de butoane și un opti
Afișaj P10 DMD cu Arduino și RTC DS3231: 4 pași (cu imagini)
Afișaj P10 DMD cu Arduino și RTC DS3231: Afișajele P10 sunt o serie de LED-uri cu matrice de puncte. Ledul P10 este în general cunoscut sub numele de afișaj Dot Matrix sau afișaj DMD. Se bazează pe registre de schimbare, în general se utilizează 74595 registre de schimbări. Acestea pot fi în cascadă cu un număr mai mare de astfel de plăci similare. A
Senzor ușor de umiditate a solului Afișaj pe 7 segmente Arduino: 4 pași (cu imagini)
Senzor de umiditate ușor al solului Afișaj segment Arduino 7: Bună ziua! Carantina poate fi dură. Sunt norocos că am o mică curte și o mulțime de plante în casă și asta m-a făcut să mă gândesc că aș putea să fac un mic instrument care să mă ajute să le păstrez bine în timp ce sunt blocat acasă.Acest proiect este un instrument simplu și funcțional
Afișaj TTGO (color) cu Micropython (afișaj TTGO T): 6 pași
Afișaj TTGO (color) cu Micropython (afișaj TTGO T): Afișajul TTGO T este o placă bazată pe ESP32 care include un afișaj color de 1,14 inch. Tabloul poate fi cumpărat pentru un premiu mai mic de 7 $ (inclusiv livrare, premiu văzut pe banggood). Acesta este un premiu incredibil pentru un ESP32, inclusiv un afișaj. T
Stație meteo Cu Arduino, BME280 și afișaj pentru a vedea tendința în ultimele 1-2 zile: 3 pași (cu imagini)
Stație meteo Cu Arduino, BME280 și afișaj pentru a vedea tendința în ultimele 1-2 zile: Bună! Acestea arată presiunea curentă a aerului, temperatura și umiditatea. Ceea ce le-a lipsit până acum a fost o prezentare a cursului în ultimele 1-2 zile. Acest proces ar avea un