Turinys:

„Arduino“automobilio ekranas: 7 žingsniai (su nuotraukomis)
„Arduino“automobilio ekranas: 7 žingsniai (su nuotraukomis)

Video: „Arduino“automobilio ekranas: 7 žingsniai (su nuotraukomis)

Video: „Arduino“automobilio ekranas: 7 žingsniai (su nuotraukomis)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Lapkritis
Anonim
Image
Image
„Arduino“automobilių ekranas
„Arduino“automobilių ekranas
„Arduino“automobilių ekranas
„Arduino“automobilių ekranas

Aš sukūriau integruotą diagnostikos (OBD-II) ekraną, naudodamas 7 colių TFT LCD ekraną iš „Adafruit“, „Teensy 3.6“, „Freematics OBD-II I2C“adapterį ir keletą „Amazon“rastų atsarginių jutiklių. Ekranas turi du puslapius: vienas, kai važiuoju „Honda Accord“, o kitas - kai važiuoja atbuline eiga.

Kai mano automobilis važiuoja, rodomi apsisukimų dažnis, MPH, variklio apkrovos procentas, akumuliatoriaus įtampa, salono temperatūra ir variklio aušinimo skysčio temperatūra (jei to nenorite, galima rodyti ir keletą kitų transporto priemonių statistinių duomenų).

Kai mano automobilis važiuoja atbuline eiga, su „Arduino IDE“suderinamas „Teensy 3.6“nuskaito animacinį mano automobilio, kurį radau internete, vaizdą, parodo jį ir nuskaito atsarginius jutiklius. Visi keturi jutikliai turi atstumą pėdomis ir animaciją už automobilio, kuri keičia spalvą pagal tai, kaip objektas yra arti automobilio (tik žalia reiškia <5 pėdų, žalia ir geltona reiškia <2,6 pėdos, o žalia - geltona, o raudona reiškia <1 pėda).

Galiausiai pridėjau galimybę pritemdyti ekraną naktį.

Galutinis rezultatas atrodo puikiai ir puikiai veikia mano automobilyje. Aš net baigiau jį įdiegti centrinėje konsolėje, o tai buvo visai kitas procesas, į kurį aš neįtrauksiu šioje instrukcijoje. Toliau pateikiamas dalių, kurias naudoju kurdamas šį LCD ekraną, sąrašas.

1) „Freematics OBD -II“adapteris - 35 USD

2) Atsarginiai jutikliai - 15 USD

3) 7 colių TFT LCD ekranas - 38 USD

4) SPI pagrįsta LCD ekrano tvarkyklė - 35 USD

5) „Teensy“3,6–30 USD

6) Lygio perjungiklis - 4 USD

7) 74HC125 Tri State Buffer IC -6 USD už 2 pakuotes (aš tikiu, kad šį apgaviką galite rasti kitur)

8) „MicroSD“kortelė> = 1 GB - 4 USD

9) Viela, kondensatoriai ir rezistoriai.

10) LP3470-2.93 „Power on Reset IC“- 2 USD

11) (neprivaloma): DS18B20 temperatūros jutiklis - 8 USD

12) (neprivaloma): „OBD -II Splitter“- 10 USD

13) (neprivaloma): pridėkite grandinės saugiklio laidą - 8 USD už 5 pakuotę

1 žingsnis: atsarginių jutiklių skaitymas

Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas
Atsarginių jutiklių skaitymas

Šis žingsnis yra sudėtingas, nes šie atsarginiai jutikliai perduoda ryšį su siųstuvu -imtuvu, o po to - su mažu LCD ekranu, kaip parodyta aukščiau esančiame paveikslėlyje. Norėjau būdo atsikratyti jų rodymo ir naudoti savo. Pasitelkęs svetainę, kurią radau po tam tikro googlinimo (įsilaužimo į atvirkštinio parkavimo jutiklius), galėjau perskaityti patentuotą ryšio protokolą, kurį siųstuvas -imtuvas siunčia į LCD ekraną. Dėl tam tikrų priežasčių ryšio protokolas nėra tipiškas, pvz., I2C, UART, CAN, USB ir kt., O protokolas skiriasi priklausomai nuo tiekėjo. Aš labai rekomenduoju jums įsigyti aukščiau susietą rinkinį, jei ketinate naudoti mano kodą, nes jis buvo specialiai parašytas tiems jutikliams.

Prieš atjungdamas jų pateiktą LCD ekraną, ištyriau tris laidus, jungiančius siųstuvo -imtuvą ir LCD. Buvo +5 V raudona viela, įžeminta juoda viela ir mėlyna viela. Prijungęs osciloskopą prie mėlynos vielos ir žemės, pamačiau pėdsaką, panašų į aukščiau matytą paveikslėlį, bet ne tiksliai (naudojau paveikslėlį iš aukščiau esančios svetainės). Mano pėdsakas turėjo HIGH ilgesnės trukmės pradžios bitą, po kurio sekė dar 17 trumpesnės trukmės bitų. Bitai 0-5 po pradžios bito neturėjo naudingos informacijos. 6-8 bitai atitinka jutiklį A, B, C arba D. 9-16 bitai atitiko ilgį metrais. Įtraukiau „Arduino IDE“eskizą, kuriame nuskaitomi jutikliai ir išvedami duomenys per serijinę konsolę.

2 veiksmas: sukurkite bitų žemėlapio vaizdą ir įdėkite jį į „MicroSD“kortelę

„Bitmap“vaizdo kūrimas ir įdėjimas į „MicroSD“kortelę
„Bitmap“vaizdo kūrimas ir įdėjimas į „MicroSD“kortelę
„Bitmap“vaizdo kūrimas ir įdėjimas į „MicroSD“kortelę
„Bitmap“vaizdo kūrimas ir įdėjimas į „MicroSD“kortelę

Aš naudoju nemokamą nuotraukų redagavimo programinę įrangą, vadinamą GIMP, kad apkarpyčiau ir pakeisčiau savo automobilio vaizdą iš viršaus. Tada eksportavau vaizdą kaip 24 bitų bitmap atvaizdą, pavadintą „car.bmp“, kuris yra 110 pikselių ir 250 pikselių. Įkėliau tai į „microSD“kortelę ir įdėjau „microSD“kortelę į savo „Teensy 3.6“mikrovaldiklį.

Pagrindinės priežastys, kodėl aš pasirinkau „Teensy 3.6“, o ne „UNO“, buvo greitis, kuriuo „Teensy“galėjo nuskaityti SD kortelę ir rodyti vaizdą naudodami RA8875 ekrano tvarkyklę. Naudojant UNO, procesas užtruko apie 8 sekundes, o „Teensy 3.6“- 1,8 sekundės.

3 žingsnis: Aparatūros prijungimas

Aparatūros prijungimas
Aparatūros prijungimas

„Adafruit“turi tikrai gerai atrodantį 7 colių TFT skystųjų kristalų ekraną, kurį valdo IC, vadinamas RA8875. Šį ekraną ir ekrano tvarkyklę pasirinkau dėl dviejų priežasčių. Pirma, ekranui yra iš anksto parašytos plačios bibliotekos. Antra, ekrano tvarkyklė gali kalbėti bet koks mikrovaldiklis, viršijantis SPI, tai reiškia, kad nėra tiek daug laidų, jungiančių mikrovaldiklį su RA8875.

Yra du šios sąrankos trūkumai. Pirmiausia tai, kad „Adafruit“RA8875 plokštėje yra aparatūros klaida, reikalaujanti naudoti 74HC125 trijų būsenų buferinį IC, jei norite naudoti bet kurį SPI pagrįstą įrenginį, pvz., SD kortelę. Norėdami išsamiau suprasti aparatūros klaidą, perskaitykite šį forumą. Antra, palyginti ilgas laikas, per kurį vaizdai siunčiami į LCD. Be to, ilgas laiko tarpas, per kurį vaizdas siunčiamas į LCD, atsiranda dėl SPI jungties, kurią riboja mikrovaldiklių laikrodžio greitis ir didelis duomenų kiekis, kuris turi būti išsiųstas ekrano tvarkyklei labai mažai laidų.

Sukūriau „Fritzing“schemą, kad kiekvienas, norintis sukurti šį ekraną, galėtų lengvai perskaityti, prie ko prijungti „Teensy 3.6“kaiščiai. Žemiau įtraukiau.frz failą. Vieninteliai du nepažymėti komponentai yra kondensatoriai, kurie yra 1F 16V elektrolitinis kondensatorius ir 100μF keraminis kondensatorius. Įtraukiau juos, kad įsitikinčiau, jog „Teensy“mikrovaldiklio maitinimas yra pastovus DC +5 V ir ar jame nėra įtampos šuolių (gali būti, kad nebūtina, bet aš juos įtraukiau, nes automobilio įtampa gali greitai svyruoti priklausomai nuo akumuliatoriaus apkrovos).

Keletas dalykų, kuriuos reikia paminėti apie komponentus. Pirma, lygio perjungiklis priima bet kokį 5 V signalą ir paverčia jį 3,3 V „Teensy 3,6“saugia įtampa. Tai būtina OBD I2C adapteriui ir atsarginio jutiklio siųstuvui -imtuvui. Antra, paauglių I2C linijoms reikalingi 4,7 kΩ tempimo rezistoriai. Trečia, keturi rezistoriai, jungiantys „naktinį laidą“(pritemdantį laidą) ir „atsarginį įjungimo laidą“, yra būtini, kad tarnautų kaip įtampos skirstytuvas, kad 12–13 V signalai sumažėtų iki maždaug 2,5–3 V signalų.

ATNAUJINIMAS 7/22/18: Radau, kad OBD-I2C modulio vidinis temperatūros jutiklis pateikia labai keistus skaičius. Kartais tai pavykdavo, tačiau dažniausiai modulis rodydavo aukštesnę nei 400 laipsnių temperatūrą. Dėl šios priežasties nusprendžiau pridėti savo ds18b20 temperatūros jutiklį. Kviečiame čia naudoti bet kokio tipo temperatūros jutiklius, tačiau turėsite redaguoti „Arduino“kodą.

ATNAUJINTA 19.03.19: „Teensy 3.6“neprasideda, kai yra labai šalta. Pridėjau įjungimo iš naujo grandinę, kad įsitikinčiau, ar ji tinkamai įsijungia.

4 žingsnis: RA8875 ekrano tvarkyklė ir grafinis dizainas

RA8875 ekrano tvarkyklė ir grafinis dizainas
RA8875 ekrano tvarkyklė ir grafinis dizainas

RA8875 ekrano tvarkyklėje yra biblioteka, pavadinta „Adafruit_RA8875“, kurią panaudojau kurdama figūras, kurios matomos pirmame ir antrame puslapiuose. RA8875 biblioteka gali kurti tik linijas, stačiakampius, suapvalintus stačiakampius, trikampius, elipses ir apskritimus, todėl grafika turi būti sumaniai suprojektuota, kad būtų sukurtos sudėtingesnės formos. Pavyzdžiui, pilkas žiedas pirmame puslapyje iš tikrųjų yra pilkas didesnio skersmens apskritimas, po kurio eina visas juodas mažesnio skersmens apskritimas. Be to, vienoje mažoje atsarginio jutiklio puslapio dalyje yra 2 trikampiai, išdėstyti taip, kad jie sudarytų daugiakampį. Aš tai padariau, kad galėčiau pakeisti atskiros atsarginės jutiklio puslapio dalies spalvą. Ekrano „Arduino“faile yra daugybė taškų, kuriuos naudodavau sekdamas, kur buvo trikampiai ir kitos formos.

Aš naudoju šią puikią svetainę, norėdamas pasirinkti RGB565 spalvas ir apibrėžti jas eskize, kad galėčiau naudoti nenumatytas spalvas, jau iš anksto nustatytas „Adafruit_RA8875“bibliotekoje.

Kalbant apie šriftus, „Adafruit_RA8875“biblioteka palaiko tik vieną, nebent pakomentuojate bibliotekos skyrių, kuris leidžia naudoti „Adafruit_GFX“bibliotekos šriftus. Žemiau įtraukiau modifikuotą „Adafruit_RA8875“biblioteką. Aš ką tik pakomentavau kelias kodo eilutes ir galėjau naudoti „Adafruit_GFX“bibliotekos šriftus. Be to, norėdami naudoti 7 segmento šriftą, kurį naudoju šiame projekte, įsitikinkite, kad „FreeSevenSegNumFont.h“failas yra „Adafruit_GFX“bibliotekos šriftų aplanke.

5 veiksmas: eskizo įkėlimas

Įkeliamas eskizas
Įkeliamas eskizas
Įkeliamas eskizas
Įkeliamas eskizas

Norėdami įkelti eskizą į „Teensy 3.6“, turėsite įdiegti „Teensyduino“. Tada turėsite pakeisti „Adafruit_RA8875“ir „Adafruit_GFX“bibliotekas paauglių bibliotekos vietoje (o ne įprasta jūsų vieta dokumentuose). „Mac“sistemoje turėjau dešiniuoju pelės mygtuku spustelėti „Arduino“programos piktogramą programose ir tada pereiti į/Turinys/„Java“/aparatūra/teensy/avr/bibliotekos. „Windows“sistemoje esu visiškai tikras, kad jis yra po jūsų C disku programos failais x86, „Arduino“ir ten esančiame aparatūros aplanke. Kai tai padarysite, turėsite pakeisti eskizų knygelės vietą „Arduino“programoje, redaguodami ją nuostatose, kur yra jūsų paauglystės bibliotekos (t. Y. /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

ATNAUJINIMAS 7/22/16: Dėl vidinės temperatūros jutiklio problemos, apie kurią kalbėjau anksčiau, turėjau įdiegti DS18B20 modulio temperatūros jutiklį. Zip faile pamatysite 4 arduino eskizus. Įkelkite „display_code“eskizą, jei norite naudoti OBD-II I2C modulio vidinį temperatūros jutiklį. Jei norite naudoti aukščiau susietą DS18B20 modulį, įkelkite „display_code_with_new_temperature_sensor“eskizą.

ATNAUJINIMAS 11/17/17: Ištaisiau keletą programinės įrangos klaidų, įskaitant DS18B20, skleidžiančią 185 Fahrenheito temperatūrą, ekranas visai neįsijungia šaltu oru ir taškai įstringa netinkama spalva, kai ekranas yra pritemdytas.

Tada naudokite aukščiau pateiktą paveikslėlį, kad įsitikintumėte, jog paauglystės nustatymai atitinka paveikslėlį. Radau, kad „teensy“spartinimas iki 240 MHz neleido I2C OBD-II adapteriui bendrauti su paaugliu. Galiausiai tiesiog spustelėkite įkelti.

Aš parašiau gana išsamius komentarus arduino eskizų failuose. Čia rasite paaiškinimą, kaip veikia programinė įranga. Nedvejodami susisiekite su manimi bet kokiais klausimais. Stengsiuosi į juos atsakyti pagal išgales. Sėkmės!

6 žingsnis: 3D spausdinimas LCD dėkle

3D spausdinimas LCD dėkle
3D spausdinimas LCD dėkle
3D spausdinimas LCD dėkle
3D spausdinimas LCD dėkle
3D spausdinimas LCD dėkle
3D spausdinimas LCD dėkle

Aš sukūriau 3D spausdintą LCD viršutinį ir apatinį dangtelį, kad apsaugotų 7 colių ekraną. Pridėjau. IPT išradėjo dalių failus ir. STL failus.

Aš taip pat įtraukiau dalį, pavadintą backup_sensor_ring.ipt, tai yra žiedas, kuris tinka aplink tuos atsarginius jutiklius, kuriuos susiejau aukščiau. Mano automobilyje jau buvo iš anksto išgręžtos atsarginių jutiklių angos, kurios buvo per didelės atsarginėms jutikliams, kuriuos nusipirkau „Amazon“, todėl turėjau sukurti žiedą, kuris tilptų ant atsarginių jutiklių. Jei ketinate gręžti buferį su komplekte esančiu apskrito grąžto gabalu, šios dalies jums nereikės.

7 žingsnis: padalinkite OBD-II prievadą, kad „Arduino“turėtų galią tik tada, kai automobilis važiuoja

Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja
Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja
Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja
Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja
Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja
Skaidomas OBD-II prievadas, todėl „Arduino“turi galią tik tada, kai automobilis važiuoja

Netrukus po ekrano įdiegimo supratau, kad ekranas visada buvo įjungtas, net kai automobilis buvo išjungtas. Žvelgdamas į OBD-II kištuką pastebėjau, kad 12 V maitinimo linija prie OBD-II jungties visada yra tiesiogiai prijungta prie akumuliatoriaus.

Norėdami tai išspręsti, aš nusipirkau OBD-II skirstytuvą, perpjoviau vielą, einančią prie 16 kaiščio, vienoje iš dviejų skirstytuvo jungčių ir tada prijungiau tą nupjautą laidą prie grandinės laido.

Tada, naudodamas savo multimetrą, nuėjau prie vairuotojo pusės saugiklių dėžutės ir išbandžiau esamus saugiklius, norėdamas pamatyti, kuris saugiklis gavo maitinimą po to, kai raktas buvo įjungtas.

Galiausiai prijungiau grandinės laidą prie saugiklio, kurį radau, kad ekranas įsijungtų tik tada, kai mano automobilis važiuoja. Atlikite keletą tyrimų, kaip tinkamai pridėti grandinę prie savo automobilio. Man pasirodė, kad ši „YouTube“pamoka yra gera.

Rekomenduojamas: