Rooli võtmed autostereo adapterini (CAN -buss -> võti 1): 6 sammu
Rooli võtmed autostereo adapterini (CAN -buss -> võti 1): 6 sammu
Anonim
CAN bussi nuusutamine
CAN bussi nuusutamine

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

Käskude saatmine stereosüsteemile
Käskude saatmine stereosüsteemile

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

Mõni päev pärast kasutatud auto ostmist avastasin, et ma ei saa autosüsteemist telefonist muusikat esitada. Veelgi masendavam oli see, et autol oli bluetooth, kuid lubatud ainult häälkõned, mitte muusika. Sellel oli ka Windows Phone'i USB -port, kuid see ei tööta iPhone'iga ilma 60 -dollarise dongleeta.

Olles oma eelmistes autodes stereosid vahetanud, ilma pikema mõtlemiseta ja uurimiseta, tellisin 40 -dollarise asendusstereo tuntud "odavalt" veebisaidilt. Stereoga oli kaasas tagurduskaamera, Car Play ja hunnik lisafunktsioone, mis tundus palju parem väärtus kui kallim dongle, mis teeb ainult ühte asja.

Pärast uue esiplaadi ostmist ja värvimist, aluse 3D -printimist ja palju lisatööd (mis võiks olla iseenesest õpetatav) jõudsin ebameeldiva avastuseni. Rooliratta võtmekäsklused saadeti CAN -bussi kaudu, kuid stereol oli ainult Key1 sisend. Kuna ma polnud poolel teel alla andnud, tellisin ma 60 naela adapteri, mis osutus mitte töötavaks. Siinkohal otsustasin ise adapteri teha.

Ma ei ole elektriinsener, mul on ainult algelised elektroonikateadmised ja see oli minu jaoks õppe- ja uurimisprojekt. Minu nõuanne oleks kõigepealt kontrollida oma sõiduki tehnilisi andmeid ja tellida ühilduv raadio, kuid kui olete juba ummikus (nagu ma olin), järgige juhiseid omal vastutusel.

Tarvikud

Adapter (umbes 15 dollarit)

  • Arduino Pro Mini 5V (või ühilduv plaat)
  • MCP2515 CAN siinimoodul
  • Perforaatplaat 60x80 mm
  • X9C104 digitaalne potentsiomeeter 100K Ohm (sõltub teie stereost)
  • DC-DC Alandusregulaator LM2596S 3-40V 3A
  • Kaabli kaitsmehoidik + kaitse (100-200 oomi)
  • Projektikast või 3D -printer selle printimiseks
  • Stereo pesad (mees + naine)
  • Jootetarbed, juhtmed jne.

Testiabilised (pole tingimata vajalikud, kuid muudavad testimise palju lihtsamaks)

  • Arduino (sobib iga 5 V plaat)
  • MCP2515 CAN siinimoodul
  • Leivalaud + džemprid

1. samm: CAN -bussi nuusutamine

Selle asemel, et hunnik juhtmeid jookseks ümber teie auto sisemuse, ühendades hunniku süsteeme, on mõnel kaasaegsel sõidukil iga komponendi külge ühendatud juhtmepaarid. Nende juhtmete kaudu saadetakse teave digitaalsete andmepakettidena ja kõik süsteemid saavad lugeda kõiki sõnumeid. See on CAN -siinivõrk (teie autos võib olla mitu võrku, seega ei pruugi kogu teave olla nähtav).

Me tahame teha ühenduse CAN -bussivõrguga ja "nuusutada" andmeliiklust. Nii saame rooliratta klahvi vajutamisel "näha". Igal paketil on ID, mis tähistab paketti saatnud sõiduki alamsüsteemi, ja andmed, mis tähistavad süsteemi olekut. Sel juhul püüame leida roolisüsteemi võtmesõnumeid saatva allsüsteemi ID ja iga võtme andmete esituse.

Kui teil veab, võite leida oma auto väärtused kusagilt Internetist ja võite selle sammu vahele jätta.

See protsess on natuke seotud ja seda on juba mujal selgitatud, nii et võtan selle lihtsalt kokku:

  • Leidke oma sõidukilt CAN -siini jaoks õiged väärtused. Minu auto jaoks (2009. aasta Fiat Idea) oli see 50KBPS edastuskiirus ja 8MHz taktsagedus.
  • Ühendage CAN -siinivõrguga, kasutades CAN -siinimoodulit ja "nuusutaja" konfiguratsiooniga Arduino.
  • Lugege sülearvuti CAN-siini väärtusi, kasutades sellist tööriista nagu https://github.com/alexandreblin/python-can-monito…. Ilma selleta on seda väga raske teha, kuna palju sõnumeid saadetakse isegi siis, kui auto ei tee midagi.
  • Vajutage rooli nuppu ja märkige väärtuse muutused. See võib olla natuke keeruline, kuna saadetakse palju sõnumeid ja võib olla raske aru saada, milline neist on.

Siin on kaks suurepärast artiklit, mis selgitavad protsessi põhjalikult:

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

Lõpuks peaks teil olema allsüsteemi ID, mida kasutame ainult rooliratta CAN -siiniteadete kuulamiseks, ja võtmekäskude kuueteistkümnendarvude loend. Minu puhul nägid andmed välja sellised:

ID | ID kuusnurk | Bait 0 | Bait 1 | Nupp

-------------------------------------------- 964 | 3C4 | 00 | 00 | Nuppe pole 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Tel 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Võida 964 | 3C4 | 00 | 02 | Kuni 964 | 3C4 | 00 | 01 | Alla 964 | 3C4 | 00 | 04 | Okei

Alasüsteemi ID on 3C4 (antud juhul), mis on kuueteistkümnendarv, nii et peaksime selle kirjutama nagu 0x3C4 Arduino visanditesse. Samuti oleme huvitatud baitidest 0 ja 1 (teie puhul võib neid olla rohkem). Need on samuti kuueteistkümnendarvud, seega tuleks need kirjutada ka eesmise 0x -ga.

Kui teisendate väärtused binaarseks, märkate, et bitid ei kattu (näiteks + 0b10000000 ja - 0b01000000), nii et korraga saab vajutada mitut klahvi.

Soovitan nuusutaja ehitada materjalidest, mis on loetletud jaotises "testi abimees", et saaksite seda hiljem oma auto simuleerimiseks uuesti kasutada. See säästab teid sellest, et te ei pea adapterit ehitades ja katsetades kogu aeg autos istuma. Simulaatorina toimimiseks võite kasutada kaasasolevat visandit. Muutke "subsystemId", "data0" ja "data1" nende nuusutatud väärtustega.

2. samm: käskude saatmine stereosüsteemile

Käskude saatmine stereosüsteemile
Käskude saatmine stereosüsteemile

Enne adapteri ehitamist on kõige parem testida, kas stereo saab käske vastu võtta.

Mul oli varuauto aku, seega ühendasin stereo otse sellega. Kui teil on 12 V pingiga toiteallikas, on see veelgi parem. Kahjuks ei leidnud ma veebist oma seadme Key1 sisendi kohta palju teavet, seega kasutasin katsetamist. Ma ei olnud praegu liiga mures stereo läbipõlemise pärast, kuna see on suhteliselt odav ja see oli minu viimane kraavi katse seda oma autoga tööle panna.

Stereol on käskude õppimise ekraan, kus on võimalik valida üks kahest takistuse väärtusest (1K ja 3,3K) ning näha "pinge" väärtust (0-255). "Pinget" tsiteeritakse, kuna see on eksitav. Veetsin palju aega Key1 -le erinevaid pingeid rakendades, ilma õnne. Proovisin ka pinge rakendamiseks erinevate takistite kasutamist, ilma õnne.

Läbimurre saabus siis, kui proovisin puudutada Key1 juhet aku maandusega, mille tulemusel langes "pinge" nulli. See koos erinevate takistitega tooks õppekraanile järjepidevad "pinge" väärtused.

Nüüd, kui ma teadsin, kuidas stereosse sisendeid saata, vajasin ma viisi, kuidas neid Arduinost saata. Siinkohal pole ma kuulnud multiplekseritest, mis võisid koos mõne takistiga olla kiirem ja usaldusväärsem lahendus (ma pole siiani kindel, kas see on teostatav), seega kasutasin digitaalset potentsiomeetrit. Alguses oli mul probleeme digitaalse poti tööle saamisega, kuni mõistsin, et pean selle ühendama reostaadina, et toimida pingejaguri asemel muutuva takistina. Põhimõtteliselt pidin ühendama RH ja RW terminalid.

Lisaks vastupanule oli otsustav ajastus. Kui takistuse langus on liiga lühike, siis käsku ei registreerita. Kui see on liiga pikk, võidakse see mitu korda registreerida. 240 ms langus, millele järgnes 240 ms viivitus, kuni järgmine käsk töötas minu stereo jaoks üsna usaldusväärselt. Kuigi see tundub väga vähe aega, tähendab see, et saame saata maksimaalselt 2 käsku sekundis, mis on märgatav, kui proovite helitugevust kiiresti üles või alla keerata. Proovisin mängida erinevate ajastuste ja mustritega, mis küll tõstis kiirust, kuid ei olnud väga usaldusväärne. Kui teil on ideid selle parandamiseks, jätke need kommentaaridesse.

Enne jätkamist soovitan ehitada prototüübi, et kontrollida, kas teie stereo aktsepteerib sama tüüpi sisendit. Isegi kui see aktsepteerib erinevaid pingeid, peaks adapter töötama juhtmestikku ja Arduino eskiisi kergete muudatustega.

3. samm: adapteri ehitamine

Adapteri ehitamine
Adapteri ehitamine
Adapteri ehitamine
Adapteri ehitamine
Adapteri ehitamine
Adapteri ehitamine

Pärast kõigi komponentide eraldi katsetamist ja koos leivaplaadil proovimist oli aeg anda neile püsivam kodu. Komponentide paigutamiseks ja jootmiseks kulus paar tundi.

Vasakus ülanurgas on alandamise regulaator, mis muudab auto akust 12 V pingeks 5 V, mida saavad kasutada teised komponendid.

All vasakul on CAN -siinimoodul, mis loeb väärtused auto CAN -bussivõrgust ja edastab need Arduinole.

Paremas ülanurgas on digitaalne potentsiomeeter (juhtmega reostaadina), mis toimib muutuva takistina maapinna ja stereo Key1 sisendi vahel.

Paremas alanurgas on Arduino, mis toimib adapteri ajuna, muutes CAN -siini sõnumid takistuseks, mida stereo loeb.

12 V sisendil on 150 mA kaitse, mis tõenäoliselt ei kaitse vooluringi, kuid on lühise korral tulekahju vältimiseks.

Samm 4: Tarkvara

Tarkvara
Tarkvara

Pärast allalaadimist pange kõik kolm.ino -faili ühte kausta. Nii saavad kõik osa samast visandist ja lähevad koos Arudinosse kasutusele.

Samuti peate Arduino IDE -sse lisama vajalikud teegid. Selleks laadige alla järgmised failid:

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

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

seejärel lisage mõlemad, valides Visand> Kaasa raamatukogu> Lisa. Zip -raamatukogu…

CanBusStereoAdapter.ino

Selles failis tehakse põhiseadistus.

Võtmekäsk CAN -siini väärtused on määratletud ülaosas. Kui teil pole sama autot nagu minul, peate suure tõenäosusega panema paika oma väärtused. Võite kasutada nuusutaja kuueteistkümnendväärtusi, mina kasutasin binaarset, nii et on lihtsam näha, et bittides pole juhuslikke kattumisi.

Kõigil autodel pole ühesuguseid roolikäsklusi, seega võite vabalt määratletud väärtused eemaldada, lisada või muuta.

Ärge unustage asendada alamsüsteemi ID kaustas „STEERING_ID”.

CanBus.ino

See fail seadistab CAN -siini kuulaja, tõlgendab pakette ja paneb takistuse väärtused ringpuhvrisse.

Reguleerige CAN -siini konfiguratsiooni funktsioonis "setupCanBus", et see sobiks teie autoga.

Kasutame ringpuhvrit, sest nagu varem mainitud, on rooli käskude sisestamine palju kiirem kui stereosisend. Nii ei jäta me ühtegi käsku vahele, kui digitaalne potentsiomeeter teeb oma asja. Kui sisestame liiga palju käske, tühistatakse kõigepealt kõige vanemad käsud, kuna need on kõige vähem olulised. See võimaldab meil käsitleda ka juhtumit mitme nupu vajutamisel, kuna stereosisend aktsepteerib korraga ainult ühte väärtust.

Kui olete muutnud mõnda "CanBusStereoAdapter.ino" käsumääratlust, peate need ka funktsioonis "handleMessageData" värskendama. "handleMessageData" kontrollib, kas pakutud CAN -siini andmeraamid sisaldavad mõnda teadaolevat käsku, kasutades bitipõhist AND -operatsiooni.

Näiteks kui olen vajutanud korraga klahve >> ja +, mis annab meile andmeraami väärtusega 0b10010000. >> (minu auto jaoks) on kahendkoodis 0b00010000 ja + on 0b10000000.

--------------- >> -------------- + ------------- << --- - andmed0 | 0b10010000 | 0b10010000 | 0b10010000 käsk | JA 0b00010000 | JA 0b10000000 | JA 0b00001000 tulemus | = 0b00010000 | = 0b10000000 | = 0b00000000

Siin näeme, et AND -operatsiooni tulemus on suurem kui 0, kui käsk on andmeraamis olemas. Nii et kõik, mida peame tegema, on kontrollida iga määratletud käsu puhul {data frame} & {command value}> 0.

Pidage meeles, et iga andmekaader sisaldab erinevaid käske, seega on ok, kui käskude väärtused on samad, kuna kontrollime neid nende oma raamide suhtes. Minu näites on nii << kui ka ESC -l sama väärtus 0b00001000 (0x08), kuid << on andmetes0 ja ESC andmetes1.

Kui oleme kindlaks teinud, et kaadris on käsk, lisame ringpuhvrisse digitaalse poti väärtuse. Väärtused jäävad vahemikku 0 kuni 99, kuid olen märganud, et stereo poolt loetud "pinge" ei ole lineaarne, seega katsetage väärtusi ise.

DigitalPot.ino

See fail hüppab ringpuhvrist välja väärtused ja saadab need täitmiseks digitaalsesse potti. Minu puhul "pot.setPotMin (false);" suurendab takistust maksimumini, mida stereo loeb maksimaalseks "pingeks". Teie stereo võib nõuda digitaalse poti minimaalseks seadmist, nii et proovige seda.

5. samm: projekti kaasamine

Projekti ümbris
Projekti ümbris

Mul on 3D -printer, seega otsustasin oma adapterile printida kaheosalise korpuse. Olen lisanud Fusion 360 faili, mida saate redigeerida, ja gcode -failid, mis sobivad 60x80 mm perfboardile.

Kui teil pole 3D-printerile juurdepääsu, võite kasutada valmis projektiümbrist või tugevat konteinerit.

6. samm: lõplikud mõtted

Algselt plaanisin, et adapter ühendatakse pideva toiteallikaga ja ärkan teatud CAN -siiniteadete peale, kuna minu autol ei ole stereokambris süütejuhet. Hiljem otsustasin selle vastu, kuna ei tahtnud riskida aku tühjenemisega ja muretseda adapteri pärast, kui olen autost eemal. Kasutasin süütejuhtme juhtimiseks auto kaitsmekarbi jagajat ja ei pidanud adapterit veelgi keerulisemaks muutma.

Minu testide põhjal on energiatarve 20-30 mA. Sain selle unerežiimis 10 mA -ni ja võiksin veelgi madalamaks minna, eemaldades LED -id komponentidelt, kuid otsustasin sellega mitte vaeva näha, kuna see töötab ainult auto töötamise ajal.

Lõpptulemusega olen päris rahul. Reageerimisaeg on mõistlik ja käskudest jääb see harva mööda.

Kuigi minu ajainvesteering oli palju suurem kui müügil oleva adapteri maksumus (mis ei töötanud), on saadud teadmised hindamatud.