Sisällysluettelo:

Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): 6 vaihetta
Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): 6 vaihetta

Video: Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): 6 vaihetta

Video: Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): 6 vaihetta
Video: Snowrunner Suomi: G29 ja muiden rattien ja näppäimet 2024, Marraskuu
Anonim
CAN -väylän haistelu
CAN -väylän haistelu

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

Komentojen lähettäminen stereolle
Komentojen lähettäminen stereolle

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

Muutaman päivän kuluttua käytetyn auton ostamisesta huomasin, että en voi toistaa musiikkia puhelimestani stereon kautta. Vielä turhauttavampaa oli, että autossa oli bluetooth, mutta se salli vain äänipuhelut, ei musiikkia. Siinä oli myös Windows Phonen USB -portti, mutta se ei toimisi iPhonen kanssa ilman 60 dollarin donglea.

Kun olen vaihtanut stereot aiemmissa autoissani, ilman paljon ajattelua tai tutkimusta, tilasin 40 dollarin korvaavan stereon tunnetulta "halvalta" verkkosivustolta. Stereon mukana tuli peruutuskamera, Car Play ja joukko lisäominaisuuksia, jotka näyttivät paljon paremmalta arvolta kuin kalliimpi dongle, joka tekee vain yhden asian.

Ostettuani ja maalattuani uuden etulevyn, 3D -tulostuksen telineen ja paljon lisätyötä (joka voisi olla itsessään opastettavaa), tein epämiellyttävän löydön. Ohjauspyörän näppäinkomennot lähetettiin CAN -väylän kautta, mutta stereossa oli vain Key1 -tulo. Koska en luovuttanut puolivälissä, tilasin 60 £: n sovittimen, joka osoittautui toimimatta. Tässä vaiheessa päätin tehdä sovittimen itse.

En ole sähköinsinööri, minulla on vain alkeellinen elektroniikkatieto, ja tämä oli minulle oppimis- ja etsintäprojekti. Neuvoni olisi ensin tarkistaa ajoneuvosi tiedot ja tilata yhteensopiva radio, mutta jos olet jo jumissa (kuten minäkin), noudata ohjeita omalla vastuullasi.

Tarvikkeet

Sovitin (noin 15 dollaria)

  • Arduino Pro Mini 5V (tai yhteensopiva levy)
  • MCP2515 CAN -väylämoduuli
  • 60x80mm perfboard
  • X9C104 digitaalinen potentiometri 100K ohmia (riippuu stereostasi)
  • DC-DC Step down-säädin LM2596S 3-40V 3A
  • Johtosulakkeen pidike + sulake (100-200 ohmia)
  • Projektikotelo tai 3D -tulostin sen tulostamiseksi
  • Autostereot (uros + naaras)
  • Juotosvälineet, johdot jne.

Testiavustajat (ei välttämättä tarvita, mutta helpottavat testaamista paljon)

  • Arduino (mikä tahansa 5 V: n levy sopii)
  • MCP2515 CAN -väylämoduuli
  • Leipälauta + puserot

Vaihe 1: CAN -väylän haistelu

Sen sijaan, että joukko johtoja kulkisi autosi sisäpuolella ja yhdistäisi joukon järjestelmiä, joissakin nykyaikaisissa ajoneuvoissa on jokaiseen komponenttiin johtoparit. Tiedot lähetetään digitaalisina datapaketteina näiden johtojen kautta, ja kaikki järjestelmät voivat lukea kaikki viestit. Tämä on CAN -väyläverkko (autossasi voi olla useita verkkoja, joten kaikki tiedot eivät välttämättä näy).

Haluamme tehdä yhteyden CAN -väyläverkkoon ja "haistaa" dataliikenteen. Näin voimme "nähdä", kun ohjauspyörän näppäintä painetaan. Jokaisella paketilla on tunnus, joka edustaa paketin lähettäneen ajoneuvon osajärjestelmää, ja tiedot, jotka edustavat järjestelmän tilaa. Tässä tapauksessa yritämme löytää ohjausjärjestelmän avainviestit lähettävän osajärjestelmän tunnuksen ja kunkin avaimen tiedot.

Jos olet onnekas, saatat löytää arvosi autollesi jossakin verkossa ja voit ohittaa tämän vaiheen.

Tämä prosessi on hieman mukana ja se on jo selitetty muualla, joten tiivistän sen vain:

  • Etsi oikeat arvot ajoneuvosi CAN -väyläyhteydelle. Autolleni (vuoden 2009 Fiat Idea) se oli 50 kt / s siirtonopeus ja 8 MHz kellotaajuus.
  • Muodosta yhteys CAN -väyläverkkoon käyttämällä CAN -väylämoduulia ja Arduinoa "sniffer" -kokoonpanossa.
  • Lue kannettavan tietokoneen CAN-väylän arvot käyttämällä työkalua, kuten https://github.com/alexandreblin/python-can-monito…. Ilman sitä on erittäin vaikea tehdä sitä, koska paljon viestejä lähetetään, vaikka auto ei tee mitään.
  • Paina ohjauspyörän painiketta ja huomaa arvon muutokset. Tämä voi olla hieman hankalaa, koska paljon viestejä lähetetään, ja voi olla vaikea selvittää, mikä on mikä.

Tässä on kaksi suurta artikkelia, jotka selittävät prosessin perusteellisesti:

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

Lopuksi sinulla pitäisi olla osajärjestelmän tunnus, jota käytämme kuunnellaksemme vain ohjauspyörän CAN -väylän viestejä, ja luettelo avainkomentojen heksadesimaaliluvuista. Minun tapauksessani tiedot näyttivät tältä:

ID | ID Hex | Tavu 0 | Tavu 1 | Painike

-------------------------------------------- 964 | 3C4 | 00 | 00 | Ei painikkeita 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Puhelin 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Voita 964 | 3C4 | 00 | 02 | Ylös 964 | 3C4 | 00 | 01 | Alas 964 | 3C4 | 00 | 04 | OK

Osajärjestelmän tunnus on 3C4 (tässä tapauksessa), joka on heksadesimaaliluku, joten meidän pitäisi kirjoittaa se kuten 0x3C4 Arduinon luonnoksiin. Olemme myös kiinnostuneita tavuista 0 ja 1 (sinun tapauksessasi saattaa olla enemmän tavuja). Nämä ovat myös heksadesimaalisia arvoja, joten ne on myös kirjoitettava alussa 0x.

Jos muutat arvot binaariksi, huomaat, että bitit eivät ole päällekkäisiä (esimerkiksi + 0b10000000 ja - 0b01000000), joten useita näppäimiä voidaan painaa samanaikaisesti.

Ehdotan, että rakentaisit haisun "testiavustaja" -osiossa luetelluista materiaaleista, jotta voit käyttää sitä myöhemmin simuloidaksesi autoa. Tämä säästää sinua joutumasta istumaan autossasi koko ajan, kun rakennat ja testaat sovitinta. Voit käyttää mukana toimitettua luonnosta simulaattorina. Muokkaa "subsystemId", "data0" ja "data1" haistetuilla arvoilla.

Vaihe 2: Komentojen lähettäminen stereolle

Komentojen lähettäminen stereolle
Komentojen lähettäminen stereolle

Ennen sovittimen rakentamisen aloittamista on parasta testata, voiko stereo vastaanottaa komentoja.

Minulla oli vara -auton akku, joten liitin stereot suoraan siihen. Jos sinulla on 12 voltin virtalähde, se on parempi. Valitettavasti en löytänyt verkosta paljon tietoa laitteeni Key1 -tulosta, joten ryhdyin kokeilemaan. En ollut liikaa huolissani stereon polttamisesta tässä vaiheessa, koska se on suhteellisen halpaa, ja tämä oli viimeinen ojayritykseni saada se toimimaan autoni kanssa.

Stereossa on komentojen opetusnäyttö, jossa on mahdollista valita yksi kahdesta vastusarvosta (1K ja 3,3K) ja nähdä "jännite" (0-255). "Jännite" on lainattu, koska se on harhaanjohtava. Vietin paljon aikaa soveltamalla Key1: lle erilaisia jännitteitä ilman onnea. Yritin myös käyttää erilaisia vastuksia jännitteen soveltamiseen ilman onnea.

Läpimurto tuli, kun yritin koskettaa Key1 -johtoa akun maahan, minkä seurauksena "jännite" laski nollaan. Tämä yhdessä eri vastuksen kanssa tuottaisi johdonmukaiset "jännite" -arvot oppimisnäytöllä.

Nyt kun tiesin kuinka lähettää tuloja stereoihin, tarvitsin tavan lähettää ne Arduinolta. Tässä vaiheessa en ole kuullut multipleksereistä, jotka yhdessä joidenkin vastusten kanssa olisivat voineet olla nopeampi ja luotettavampi ratkaisu (en ole vieläkään varma, onko tämä mahdollista), joten käytin digitaalista potentiometriä. Aluksi minulla oli ongelmia saada digitaalinen potti toimimaan, kunnes tajusin, että minun on kytkettävä se reostaatiksi toimimaan muuttuvana vastuksena jännitteenjakajan sijasta. Periaatteessa minun piti kytkeä RH- ja RW -liittimet.

Vastuksen lisäksi ajoitus oli ratkaiseva. Jos vastuslasku on liian lyhyt, komentoa ei rekisteröidä. Jos se on liian pitkä, se voidaan rekisteröidä useita kertoja. 240 ms pudotus, jota seurasi 240 ms viive, kunnes seuraava komento toimi melko luotettavasti stereoissani. Vaikka se tuntuu hyvin pieneltä ajalta, se tarkoittaa, että voimme lähettää enintään 2 komentoa sekunnissa, mikä on havaittavissa, jos yrität nopeasti lisätä tai vähentää äänenvoimakkuutta. Yritin leikkiä eri ajoituksilla ja kuvioilla, mikä lisäsi nopeutta, mutta ei ollut kovin luotettava. Jos sinulla on ideoita tämän parantamiseksi, jätä ne kommentteihin.

Ennen kuin jatkat, ehdotan prototyypin rakentamista sen tarkistamiseksi, hyväksyykö stereosi samantyyppisen tulon. Vaikka sovitin hyväksyy erilaisia jännitteitä, sen pitäisi toimia pieniä muutoksia johdotuksessa ja Arduino -luonnoksessa.

Vaihe 3: Sovittimen rakentaminen

Sovittimen rakentaminen
Sovittimen rakentaminen
Sovittimen rakentaminen
Sovittimen rakentaminen
Sovittimen rakentaminen
Sovittimen rakentaminen

Kun kaikki komponentit oli testattu erikseen ja kokeiltu yhdessä leipälaudalla, oli aika antaa heille pysyvämpi koti. Tämä kesti muutaman tunnin komponenttien asettamisessa ja juottamisessa.

Vasemmassa yläkulmassa on askel alas säädin, joka muuttaa 12 V auton akusta 5 V: ksi, jota muut komponentit voivat käyttää.

Vasemmassa alakulmassa on CAN -väylämoduuli, joka lukee arvot auton CAN -väyläverkosta ja välittää ne edelleen Arduinolle.

Oikeassa yläkulmassa on digitaalinen potentiometri (kytketty reostaatiksi), joka toimii muuttuvana vastuksena maan ja stereon Key1 -tulon välillä.

Oikeassa alakulmassa on Arduino, joka toimii sovittimen aivoina ja muuntaa CAN -väylän viestit stereon lukemiksi resistansseiksi.

12 V: n tulossa on 150 mA: n sulake, joka ei todennäköisesti suojaa piiriä, mutta on olemassa estämään tulipalo oikosulun sattuessa.

Vaihe 4: Ohjelmisto

Ohjelmisto
Ohjelmisto

Lataamisen jälkeen laita kaikki kolme.ino -tiedostoa yhteen kansioon. Näin kaikki ovat osa samaa luonnosta ja lähetetään yhdessä Arudinoon.

Sinun on myös lisättävä tarvittavat kirjastot Arduino IDE: hen. Voit tehdä tämän lataamalla seuraavat tiedostot:

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

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

lisää sitten molemmat valitsemalla Luonnos> Sisällytä kirjasto> Lisää. Zip -kirjasto…

CanBusStereoAdapter.ino

Perusasetukset suoritetaan tässä tiedostossa.

Avainkomento CAN -väylän arvot määritetään yläreunassa. Jos sinulla ei ole samaa autoa kuin minulla, sinun on todennäköisesti panostettava omiin arvoihisi. Voit käyttää hakaajan heksadesimaalisia arvoja, minä käytin binääristä, joten on helpompi nähdä, ettei biteissä ole vahingossa päällekkäisyyksiä.

Kaikissa autoissa ei ole samoja ohjauspyörän komentoja, joten voit poistaa, lisätä tai muokata määritettyjä arvoja.

Muista vaihtaa alijärjestelmän tunnus kohdassa "STEERING_ID".

CanBus.ino

Tämä tiedosto asettaa CAN -väylän kuuntelijan, tulkitsee paketit ja asettaa vastusarvot pyöreään puskuriin.

Säädä CAN -väyläkonfiguraatio "setupCanBus" -toiminnolla autoosi sopivaksi.

Käytämme pyöreää puskuria, koska kuten aiemmin mainittiin, ohjauspyörän komentojen syöttö on paljon nopeampaa kuin stereotulo. Näin emme menetä mitään komentoja, kun digitaalinen potentiometri tekee tehtävänsä. Jos syötämme liian monta komentoa, vanhimmat hylätään ensin, koska ne ovat vähiten tärkeitä. Tämän avulla voimme myös käsitellä tapausta, kun useita painikkeita painetaan, koska stereotulo hyväksyy vain yhden arvon kerrallaan.

Jos olet muuttanut mitä tahansa "CanBusStereoAdapter.ino" -komennon määritelmiä, sinun on myös päivitettävä ne "handleMessageData" -toiminnossa. "handleMessageData" tarkistaa bittikohtaisen AND -toiminnon avulla, sisältävätkö annetut CAN -väylän datakehykset mitä tahansa tunnettuja komentoja.

Jos olen esimerkiksi painanut >> ja + samanaikaisesti, saat datakehyksen, jonka arvo on 0b10010000. >> (autolleni) on 0b00010000 binäärinä ja + on 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 komento | JA 0b00010000 | JA 0b10000000 | JA 0b00001000 tulos | = 0b00010000 | = 0b10000000 | = 0b00000000

Tässä voimme nähdä, että AND -operaation tulos on suurempi kuin 0, jos komento on läsnä tietokehyksessä. Joten meidän tarvitsee vain tarkistaa kunkin määrittämämme komennon kohdat {data frame} & {command value}> 0.

Muista, että jokainen tietokehys sisältää erilaisia komentoja, joten on ok, jos komentojen arvot ovat samat, koska tarkistamme niitä niiden omien kehysten suhteen. Esimerkissäni sekä << että ESC: llä on sama arvo 0b00001000 (0x08), mutta << on datassa0 ja ESC datassa1.

Kun olemme määrittäneet, että kehyksessä on komento, lisäämme pyöreään puskuriin digitaalisen potin arvon. Arvot vaihtelevat 0-99, mutta olen huomannut, että stereon lukema "jännite" ei ole lineaarinen, joten kokeile arvoja itse.

DigitalPot.ino

Tämä tiedosto ponnahtaa arvot ulos pyöreästä puskurista ja lähettää ne digitaaliseen pottiin suoritettavaksi. Minun tapauksessani "pot.setPotMin (false);" lisää vastusta maksimiin, jonka stereo lukee suurimmalla "jännitteellä". Stereosi saattaa vaatia, että asetat digitaalisen potin minimiin, joten testaa se.

Vaihe 5: Projektin liite

Projektin kotelo
Projektin kotelo

Minulla on 3D -tulostin, joten päätin tulostaa sovittimelleni kaksiosaisen kotelon. Olen sisällyttänyt Fusion 360 -tiedoston, jota voit muokata, ja gcode -tiedostot, jotka sopivat 60x80 mm: n perfboardille.

Jos sinulla ei ole pääsyä 3D-tulostimeen, voit käyttää valmiita projektikoteloita tai tukevaa säiliötä.

Vaihe 6: Viimeiset ajatukset

Suunnittelin aluksi, että sovitin kytketään vakiovirtaan ja herään tiettyihin CAN -väyläviesteihin, koska autossani ei ole sytytysjohtoa stereolokerossa. Päätin myöhemmin sitä vastaan, koska en halunnut ottaa riskiä akun tyhjenemisestä ja adapterin murehtimisesta ollessani poissa autosta. Käytin auton sulakerasian jakajaa sytytysjohdon kuljettamiseen eikä minun tarvinnut monimutkaista sovitinta entisestään.

Testien mukaan virrankulutus on 20-30 mA. Sain sen 10 mA: iin lepotilassa ja voisin mennä vielä pienemmäksi poistamalla LEDit komponenteista, mutta päätin olla vaivaamatta sitä, koska se toimii vain auton ollessa käynnissä.

Olen aika tyytyväinen lopputulokseen. Vasteaika on kohtuullinen, ja se harvoin jättää komennot väliin.

Vaikka aikainvestointini oli paljon suurempi kuin kaupallisesti saatavilla olevan sovittimen (joka ei toiminut) kustannukset, saamani tieto on korvaamatonta.

Suositeltava: