Kazalo:

Ključi volana do avtomobilskega stereo vmesnika (vodilo CAN -> ključ1): 6 korakov
Ključi volana do avtomobilskega stereo vmesnika (vodilo CAN -> ključ1): 6 korakov

Video: Ključi volana do avtomobilskega stereo vmesnika (vodilo CAN -> ključ1): 6 korakov

Video: Ključi volana do avtomobilskega stereo vmesnika (vodilo CAN -> ključ1): 6 korakov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, December
Anonim
CAN Bus Vohanje
CAN Bus Vohanje

Key1) "src =" https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp

Pošiljanje ukazov v stereo
Pošiljanje ukazov v stereo

Key1) "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Nekaj dni po nakupu rabljenega avtomobila sem odkril, da ne morem predvajati glasbe iz telefona prek avtoradia. Še bolj frustrirajoče je bilo, da je imel avto bluetooth, vendar je dovoljeval le glasovne klice, ne pa tudi glasbe. Imel je tudi vrata USB za Windows Phone, vendar z iPhoneom brez ključa za 60 USD ne bi deloval.

Ko sem na svojih prejšnjih avtomobilih zamenjal stereo, sem brez veliko razmišljanja in raziskav naročil 40 -odstotni nadomestni stereo na znani "poceni" spletni strani. Stereo je imel kamero za vzvratno vožnjo, Car Play in kopico dodatnih funkcij, ki so se zdele veliko boljša vrednost od dražjega ključa, ki dela samo eno stvar.

Po nakupu in barvanju nove sprednje plošče, 3D -tiskanju nosilca in kopici dodatnega dela (ki bi lahko bilo samo po sebi poučno) sem prišel do neprijetnega odkritja. Ukazi tipk na volanu so bili poslani prek vodila CAN, stereo pa je imel samo vhod Key1. Ker nisem bil na polovici poti, sem naročil adapter za 60 £, za katerega se je izkazalo, da ne deluje. Na tej točki sem se odločil, da bom sam naredil adapter.

Nisem inženir elektrotehnike, imam samo osnovno znanje o elektroniki in to je bil zame projekt učenja in raziskovanja. Moj nasvet bi bil, da najprej preverite specifikacije svojega vozila in naročite združljiv radio, če pa ste že obtičali (kot sem jaz), sledite navodilom na lastno odgovornost.

Zaloge

Adapter (pribl. 15 USD)

  • Arduino Pro Mini 5V (ali združljiva plošča)
  • Modul vodila CAN MCP2515
  • Perfboard 60x80 mm
  • X9C104 digitalni potenciometer 100K Ohm (odvisno od vašega stereo)
  • DC-DC Regulator koraka navzdol LM2596S 3-40V 3A
  • Nosilec kabelske varovalke + varovalka (100-200 Ohm)
  • Project box ali 3D tiskalnik, da ga natisnete
  • Avto stereo vtičnice (moški + ženski)
  • Spajkalni material, žice itd.

Testni pomočniki (niso nujno potrebni, vendar bodo testiranje veliko olajšali)

  • Arduino (ustreza vsaka 5V plošča)
  • Modul vodila CAN MCP2515
  • Omarica + skakalci

1. korak: Vohanje po avtobusu CAN

Namesto da bi po notranjosti vašega avtomobila vodili žice, ki povezujejo kopico sistemov, imajo nekatera sodobna vozila pare žic, ki vodijo do vsake komponente. Po teh žicah se informacije pošiljajo kot digitalni podatkovni paketi in vsi sistemi lahko preberejo vsa sporočila. To je omrežje vodila CAN (v vašem avtomobilu je lahko več omrežij, zato vse informacije morda ne bodo vidne).

Kaj želimo storiti, je, da se povežemo z omrežjem vodila CAN in "povohamo" podatkovni promet. Tako lahko "vidimo", ko pritisnemo volansko tipko. Vsak paket ima ID, ki predstavlja podsistem vozila, ki je poslal paket, in podatke, ki predstavljajo stanje sistema. V tem primeru poskušamo najti ID podsistema, ki pošilja sporočila o ključih na volanu, in predstavitev podatkov vsakega ključa.

Če imate srečo, boste morda našli vrednosti svojega avtomobila nekje na spletu in lahko ta korak preskočite.

Ta proces je nekoliko zapleten in je bil že razložen na drugih mestih, zato ga bom samo povzela:

  • Poiščite pravilne vrednosti za komunikacijo vodila CAN na vašem vozilu. Za moj avto (Fiat Idea 2009) je bila hitrost prenosa 50 KBB / s in takta 8 MHz.
  • Povežite se z omrežjem vodila CAN z modulom vodila CAN in Arduinom v konfiguraciji "sniffer".
  • Preberite vrednosti vodila CAN na prenosnem računalniku z orodjem, kot je https://github.com/alexandreblin/python-can-monito…. Brez tega bo zelo težko, saj je veliko sporočil poslanih tudi, ko avto ne počne ničesar.
  • Pritisnite gumb na volanu in opazujte spremembe vrednosti. To je lahko nekoliko težavno, saj je poslanih veliko sporočil in morda je težko ugotoviti, kaj je to.

Tu sta dva odlična članka, ki poglobljeno razlagata postopek:

  • https://medium.com/@alexandreblin/can-bus-reverse-…
  • https://www.instructables.com/id/CAN-Bus-Sniffing-…

Na koncu bi morali imeti ID podsistema, ki ga bomo uporabili za poslušanje samo sporočil vodila CAN, in seznam šestnajstiških vrednosti za ukaze tipk. V mojem primeru so bili podatki videti tako:

ID | Šestkotni ID | Bajt 0 | Bajt 1 | Gumb

--------------------------------------------- 964 | 3C4 | 00 | 00 | Brez gumbov 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telefon 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Osvojite 964 | 3C4 | 00 | 02 | Navzgor 964 | 3C4 | 00 | 01 | Dol 964 | 3C4 | 00 | 04 | v redu

ID podsistema je 3C4 (v tem primeru), kar je šestnajstiško število, zato ga moramo zapisati kot 0x3C4 v skice Arduino. Zanimata nas tudi bajta 0 in 1 (v vašem primeru je lahko več bajtov). To so tudi šestnajstiške vrednosti, zato jih je treba zapisati tudi z začetnim 0x.

Če vrednosti pretvorite v binarne, boste opazili, da se bitovi ne prekrivajo (na primer + 0b10000000 in - 0b01000000), zato lahko hkrati pritisnete več tipk.

Predlagam, da zmrzovalnik sestavite iz materialov, navedenih v razdelku "testni pomočnik", tako da ga lahko pozneje znova uporabite za simulacijo vašega avtomobila. To vam bo prihranilo, da ne boste ves čas sedeli v avtu, medtem ko gradite in preizkušate adapter. Priloženo skico lahko uporabite kot simulator. Spremenite »subsystemId«, »data0« in »data1« z vrednostmi, ki ste jih povohali.

Korak: Pošiljanje ukazov v stereo

Pošiljanje ukazov v stereo
Pošiljanje ukazov v stereo

Preden začnete graditi adapter, je najbolje, da najprej preizkusite, ali stereo lahko sprejema ukaze.

Imel sem rezervno avtomobilsko baterijo, zato sem stereo priključil neposredno nanj. Če imate 12 -voltni namizni vir napajanja, še bolje. Žal na spletu nisem našel veliko informacij o vnosu Key1 na svoji enoti, zato sem se zatekel k eksperimentiranju. Na tej točki nisem bil pretirano zaskrbljen, da bi stereo izgoril, saj je razmeroma poceni in to je bil moj zadnji poskus, da bi ga spravil v delo z avtomobilom.

Stereo ima zaslon za učenje ukazov, kjer je mogoče izbrati eno od dveh vrednosti upora (1K in 3.3K) in videti vrednost "napetosti" (0-255). "Napetost" je navedena, ker je zavajajoča. Veliko časa sem porabil za uporabo različnih napetosti na Key1 brez sreče. Poskušal sem uporabiti različne upore za napetost, vendar brez sreče.

Preboj se je zgodil, ko sem se poskušal dotakniti žice Key1 do ozemljitve baterije, kar je povzročilo, da je "napetost" padla na 0. To bi v kombinaciji z različnimi upori ustvarilo konsistentne vrednosti "napetosti" na zaslonu za učenje.

Zdaj, ko sem vedel, kako pošiljati vhode v stereo, sem potreboval način, kako jih poslati iz Arduina. Zaenkrat še nisem slišal za multiplekserje, ki bi bili skupaj z nekaterimi upori hitrejša in zanesljivejša rešitev (še vedno nisem prepričan, ali je to izvedljivo), zato sem uporabil digitalni potenciometer. Sprva sem imel težave z delovanjem digitalnega lonca, dokler nisem ugotovil, da ga moram povezati kot reostat, da deluje kot spremenljiv upor namesto delilnika napetosti. V bistvu sem moral priključiti terminale RH in RW.

Poleg upora je bil ključen čas. Če je padec upora prekraten, ukaz ne bo registriran. Če je predolg, se lahko registrira večkrat. 240 -milimetrski padec, ki mu je sledil zamik 240 ms, dokler naslednji ukaz za moj stereo ni deloval precej zanesljivo. Čeprav se to zdi zelo malo časa, to pomeni, da lahko pošljemo največ 2 ukaza na sekundo, kar je opazno, če poskušate hitro povečati ali zmanjšati glasnost. Poskušal sem se poigrati z različnimi časi in vzorci, kar je sicer povečalo hitrost, vendar ni bilo zelo zanesljivo. Če imate kakšne ideje, kako to izboljšati, jih pustite v komentarjih.

Preden nadaljujem, predlagam izdelavo prototipa, ki bo preveril, ali vaš stereo sprejema enako vrsto vhoda. Tudi če sprejme različne napetosti, bi moral adapter delovati z rahlimi spremembami ožičenja in skice Arduino.

3. korak: Izdelava adapterja

Sestavljanje adapterja
Sestavljanje adapterja
Sestavljanje adapterja
Sestavljanje adapterja
Sestavljanje adapterja
Sestavljanje adapterja

Potem, ko smo vse komponente preizkusili ločeno in jih skupaj preizkusili na krovu, je bil čas, da jim podarimo stalnejši dom. To je trajalo nekaj ur polaganja komponent in spajkanja.

Zgoraj levo je regulator navzdol, ki pretvori 12V iz akumulatorja avtomobila v 5V, ki ga lahko uporabljajo druge komponente.

Spodaj levo je modul vodila CAN, ki bere vrednosti iz omrežja vodila CAN avtomobila in jih posreduje v Arduino.

Zgoraj desno je digitalni potenciometer (ožičen kot reostat), ki deluje kot spremenljiv upor med ozemljitvijo in stereo vhodom Key1.

Spodaj desno je Arduino, ki deluje kot možgani adapterja in sporočila vodila CAN pretvori v upore, ki jih prebere stereo.

Na 12V vhodu je 150mA varovalka, ki najverjetneje ne bo zaščitila tokokroga, vendar je tam, da prepreči požar v primeru kratkega stika.

4. korak: programska oprema

Programska oprema
Programska oprema

Po prenosu vse tri datoteke.ino postavite v eno mapo. Tako bodo vsi del iste skice in bodo skupaj razporejeni v Arudino.

Prav tako morate v Arduino IDE dodati potrebne knjižnice. Če želite to narediti, prenesite naslednje datoteke:

github.com/autowp/arduino-mcp2515/archive/…

github.com/philbowles/Arduino-X9C/archive/…

nato oboje dodajte tako, da odprete Sketch> Include Library> Add. Zip Library …

CanBusStereoAdapter.ino

V tej datoteki se izvedejo osnovne nastavitve.

Ključni ukaz Vrednosti vodila CAN so določene na vrhu. Razen če imate isti avtomobil kot jaz, boste najverjetneje morali dati svoje vrednote. Uporabite lahko šestnajstiške vrednosti iz snifferja, jaz sem uporabil binarno, da je lažje videti, da v bitih ni naključnih prekrivanj.

Vsi avtomobili nimajo enakih ukazov na volanu, zato jih lahko odstranite, dodate ali uredite.

Ne pozabite zamenjati ID -ja podsistema v "STEERING_ID".

CanBus.ino

Ta datoteka nastavi poslušalca vodila CAN, interpretira pakete in vnese vrednosti upora v krožni medpomnilnik.

Prilagodite konfiguracijo vodila CAN v funkciji "setupCanBus" tako, da ustreza vašemu avtomobilu.

Uporabljamo krožni medpomnilnik, ker je, kot smo že omenili, vhod za volan veliko hitrejši od stereo vhoda. Tako ne zamudimo nobenega ukaza, medtem ko digitalni potenciometer dela svoje. Če vnesemo preveč ukazov, bodo najstarejši najprej zavrženi, saj so najmanj pomembni. To nam omogoča tudi obravnavo primera, ko pritisnete več gumbov, saj stereo vhod sprejme samo eno vrednost hkrati.

Če ste spremenili katero od definicij ukazov v "CanBusStereoAdapter.ino", jih boste morali posodobiti tudi v funkciji "handleMessageData". "handleMessageData" preveri, ali podani okvirji podatkov vodila CAN vsebujejo katerega od znanih ukazov z uporabo bitovne operacije AND.

Na primer, če sem hkrati pritisnil >> in +, ki nam bo dal podatkovni okvir z vrednostjo 0b10010000. >> (za moj avto) je 0b00010000 v binarnem sistemu in + je 0b10000000.

--------------- >> -------------- + ------------- << --- - podatki0 | 0b10010000 | 0b10010000 | 0b10010000 ukaz | IN 0b00010000 | IN 0b10000000 | AND 0b00001000 rezultat | = 0b00010000 | = 0b10000000 | = 0b00000000

Tukaj lahko vidimo, da bo rezultat operacije AND večji od 0, če je ukaz prisoten v podatkovnem okviru. Zato moramo za vsak ukaz, ki smo ga določili, preveriti, ali sta {data frame} & {command value}> 0.

Upoštevajte, da vsak podatkovni okvir vsebuje različne ukaze, zato je v redu, če so vrednosti ukazov enake, saj jih preverjamo glede na lastne okvire. V mojem primeru imata << in ESC enako vrednost 0b00001000 (0x08), << pa je v podatkih0 in ESC v podatkih1.

Ko ugotovimo, da je ukaz prisoten v okvirju, krožnemu medpomnilniku dodamo vrednost digitalnega pot. Vrednosti se gibljejo od 0 do 99, vendar sem opazil, da "napetost", ki jo bere stereo, ni linearna, zato preizkusite vrednosti sami.

DigitalPot.ino

Ta datoteka izloči vrednosti iz krožnega medpomnilnika in jih pošlje v digitalni lonec za izvedbo. V mojem primeru "pot.setPotMin (false);" bo povečal upor do maksimuma, kar bo stereo prebral kot največjo "napetost". Vaš stereo lahko zahteva, da nastavite digitalni lonec na minimum, zato ga preizkusite.

5. korak: Priloga projekta

Priloga projekta
Priloga projekta

Imam 3D tiskalnik, zato sem se odločil natisniti dvodelno ohišje za svoj adapter. Vključil sem datoteko Fusion 360, ki jo lahko urejate, in datoteke gcode, ki se prilegajo plošči 60x80 mm.

Če nimate dostopa do 3D tiskalnika, lahko uporabite že pripravljeno ohišje za projekt ali trdno posodo.

Korak 6: Zadnje misli

Sprva sem načrtoval, da bo adapter priključen na stalno napajanje in se bo prebudil ob določenih sporočilih vodila CAN, saj moj avto nima vžigalne žice v stereo predalu. Kasneje sem se odločil proti temu, saj nisem hotel tvegati, da bi izpraznil baterijo in skrbel za adapter, medtem ko sem zunaj avtomobila. Za speljevanje vžigalne žice sem uporabil razdelilnik škatel z varovalkami v avtomobilu in ni bilo treba dodatno zapletati adapterja.

Po mojih testih je poraba energije 20-30 mA. V načinu mirovanja sem ga znižal na 10 mA in bi lahko šel še nižje, če odstranim LED diode iz komponent, vendar sem se odločil, da se z njim ne trudim, saj bo deloval le, ko bo avto tekel.

S končnim rezultatom sem zelo zadovoljen. Odzivni čas je razumen in redko zgreši ukaze.

Čeprav je bila moja časovna naložba veliko večja od stroškov komercialno dostopnega adapterja (ki ni deloval), je moje znanje neprecenljivo.

Priporočena: