Innholdsfortegnelse:

Rattaster til bilstereoadapter (CAN -buss -> nøkkel1): 6 trinn
Rattaster til bilstereoadapter (CAN -buss -> nøkkel1): 6 trinn

Video: Rattaster til bilstereoadapter (CAN -buss -> nøkkel1): 6 trinn

Video: Rattaster til bilstereoadapter (CAN -buss -> nøkkel1): 6 trinn
Video: 20 товаров для автомобиля с Алиэкспресс, автотовары №25 2024, Juli
Anonim
KAN bussesnuse
KAN bussesnuse

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

Sender kommandoer til stereoen
Sender kommandoer til stereoen

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

Noen dager etter å ha kjøpt en brukt bil, oppdaget jeg at jeg ikke kan spille musikk fra telefonen min gjennom bilstereoen. Enda mer frustrerende var at bilen hadde bluetooth, men bare tillot taleanrop, ikke musikk. Den hadde også en Windows Phone USB -port, men den ville ikke fungere med en iPhone uten en 60 $ dongle.

Etter å ha erstattet stereoanlegg på mine tidligere biler, uten mye tenking eller forskning, bestilte jeg en 40 $ erstatnings stereo fra et velkjent "billig" nettsted. Stereoen kom med et ryggekamera, Car Play og en haug med ekstrafunksjoner, som virket mye bedre enn den dyrere donglen som bare gjør én ting.

Etter å ha kjøpt og malt en ny frontplate, 3D -utskrift av en holder og mye ekstraarbeid (som kan være en instruksjon i seg selv), kom jeg til en ubehagelig oppdagelse. Nøkkelkommandoene på rattet ble sendt gjennom CAN -buss, men stereoanlegget hadde bare en Key1 -inngang. Jeg var ikke en til å gi opp halvveis, og jeg bestilte en 60 £ adapter, som viste seg ikke å fungere. På dette tidspunktet bestemte jeg meg for å lage en adapter selv.

Jeg er ikke elektroingeniør, jeg har kun rudimentær elektronikk kunnskap, og dette var et lærings- og utforskningsprosjekt for meg. Mitt råd er å først sjekke kjøretøyets spesifikasjoner og bestille en kompatibel radio, men hvis du allerede sitter fast (slik jeg var), følg instruksjonene på egen risiko.

Rekvisita

Adapteren (ca. 15 $)

  • Arduino Pro Mini 5V (eller et kompatibelt kort)
  • MCP2515 CAN -bussmodul
  • 60x80 mm perfboard
  • X9C104 digitalt potensiometer 100K Ohm (avhenger av stereoanlegget)
  • DC-DC Trinn ned regulator LM2596S 3-40V 3A
  • Kabelsikringsholder + sikring (100-200 Ohm)
  • Prosjektboks eller 3D -skriver for å skrive den ut
  • Bilstereo -kontakter (mann + hunn)
  • Loddetilbehør, ledninger, etc.

Testhjelpere (ikke strengt nødvendig, men vil gjøre testing mye enklere)

  • Arduino (ethvert 5V -kort vil gjøre)
  • MCP2515 CAN -bussmodul
  • Brødbrett + hoppere

Trinn 1: CAN Bus Sniffing

I stedet for å ha en haug med ledninger som kjører rundt på innsiden av bilen som kobler sammen en haug med systemer, har noen moderne biler par ledninger som går til hver komponent. Informasjon sendes som digitale datapakker gjennom disse ledningene, og alle systemer kan lese alle meldinger. Dette er CAN -bussnettverket (det kan være flere nettverk i bilen din, så all informasjon er kanskje ikke synlig).

Det vi ønsker å gjøre, er å koble til CAN -bussnettverket og "snuse" datatrafikken. På denne måten kan vi "se" når du trykker på en rattnøkkel. Hver pakke har en ID, som representerer kjøretøyets undersystem som sendte pakken, og dataene som representerer systemtilstanden. I dette tilfellet prøver vi å finne ID -en til delsystemet som sender meldingene på rattetasten og datarepresentasjonen for hver nøkkel.

Hvis du er heldig kan du finne verdiene for bilen din et sted online, og kan hoppe over dette trinnet.

Denne prosessen er litt involvert og har allerede blitt forklart andre steder, så jeg vil bare oppsummere det:

  • Finn de riktige verdiene for CAN -busskommunikasjonen på bilen din. For bilen min (en Fiat Idea fra 2009) var det en 50KBPS baudhastighet og en 8MHz klokkehastighet.
  • Koble til CAN -bussnettverket ved hjelp av CAN -bussmodulen og en Arduino i en "sniffer" -konfigurasjon.
  • Les CAN-bussverdiene på den bærbare datamaskinen din ved hjelp av et verktøy som https://github.com/alexandreblin/python-can-monito…. Det vil være veldig vanskelig å gjøre det uten det, siden det sendes mange meldinger selv når bilen ikke gjør noe.
  • Trykk på rattknappen og legg merke til verdiendringene. Dette kan være litt vanskelig ettersom mange meldinger blir sendt, og det kan være vanskelig å finne ut hvilken som er hvilken.

Her er to flotte artikler som forklarer prosessen grundig:

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

Til slutt bør du ha delsystem -IDen som vi vil bruke til å lytte etter bare rattets CAN -bussmeldinger, og en liste over heksadesimale verdier for nøkkelkommandoene. I mitt tilfelle så dataene slik ut:

ID | ID Hex | Byte 0 | Byte 1 | Knapp

--------------------------------------------- 964 | 3C4 | 00 | 00 | Ingen knapper 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 | Vinn 964 | 3C4 | 00 | 02 | Opp 964 | 3C4 | 00 | 01 | Ned 964 | 3C4 | 00 | 04 | OK

Delsystem -ID er 3C4 (i dette tilfellet), som er et heksadesimalt tall, så vi bør skrive det som 0x3C4 i Arduino -skissene. Vi er også interessert i byte 0 og 1 (i ditt tilfelle kan det være flere byte). Dette er også heksadesimale verdier, så de bør også skrives med en ledende 0x.

Hvis du konverterer verdiene til binær, vil du legge merke til at bitene ikke overlapper hverandre (for eksempel + 0b10000000 og - 0b01000000) dette er slik at flere taster kan trykkes samtidig.

Jeg foreslår at du bygger snifferen med materialene som er oppført i delen "testhjelper", slik at du kan bruke den senere for å simulere bilen din. Dette vil spare deg for å måtte sitte i bilen din hele tiden mens du bygger og tester adapteren. Du kan bruke den medfølgende skissen til å fungere som simulator. Endre "subsystemId", "data0" og "data1" med verdiene du sniffet ut.

Trinn 2: Sende kommandoer til stereoen

Sender kommandoer til stereoen
Sender kommandoer til stereoen

Før du begynner å bygge adapteren, er det best å først teste om stereoanlegget kan motta kommandoer.

Jeg hadde et bilbatteri, så jeg koblet stereoanlegget direkte til det. Hvis du har en 12V benkekilde, enda bedre. Dessverre kunne jeg ikke finne mye informasjon online om Key1 -inngangen på enheten min, så jeg tok til eksperimentering. Jeg var ikke altfor bekymret for å brenne ut stereoanlegget på dette tidspunktet, siden det er relativt billig, og dette var mitt siste forsøk på å få det til å fungere med bilen min.

Stereoen har en kommandoinnlæringsskjerm, der det er mulig å velge en av to motstandsverdier (1K og 3.3K) og se "spennings" -verdien (0-255). "Spenning" er sitert fordi det er misvisende. Jeg brukte mye tid på å bruke forskjellige spenninger på Key1 uten hell. Jeg prøvde også å bruke forskjellige motstander for å bruke spenningen uten hell.

Gjennombruddet kom da jeg prøvde å berøre Key1 -ledningen til batteriets bakke, noe som resulterte i at "spenning" falt til 0. Dette i kombinasjon med forskjellige motstander ville gi konsistente "spennings" -verdier på læringsskjermen.

Nå som jeg visste hvordan jeg skulle sende innganger til stereoanlegget, trengte jeg en måte å sende dem fra en Arduino. På dette tidspunktet har jeg ikke hørt om multiplexere, som sammen med noen motstander kan ha vært en raskere og mer pålitelig løsning (jeg er fortsatt ikke sikker på om dette er mulig), så jeg brukte et digitalt potensiometer. Først hadde jeg problemer med å få den digitale potten til å fungere, helt til jeg fant ut at jeg må koble den til en reostat for å fungere som en variabel motstand i stedet for en spenningsdeler. I utgangspunktet måtte jeg koble til RH- og RW -terminalene.

Foruten motstanden var timingen avgjørende. Hvis motstandsfallet er for kort, blir ikke kommandoen registrert. Hvis det er for lenge, kan det bli registrert flere ganger. En nedgang på 240 ms, etterfulgt av en forsinkelse på 240 ms til neste kommando fungerte ganske pålitelig for stereoanlegget mitt. Selv om det virker som veldig lite tid, betyr det at vi kan sende maksimalt 2 kommandoer per sekund, noe som er merkbart hvis du prøver å skru volumet opp eller ned raskt. Jeg prøvde å leke med forskjellige tidspunkter og mønstre, noe som økte farten, men var ikke veldig pålitelig. Hvis du har noen ideer om hvordan du kan forbedre dette, kan du la dem stå i kommentarene.

Før du fortsetter, foreslår jeg at du bygger en prototype for å sjekke om stereoanlegget godtar samme type inngang. Selv om den godtar forskjellige spenninger, bør adapteren fungere med små endringer i ledningene og Arduino -skissen.

Trinn 3: Bygg adapteren

Bygging av adapteren
Bygging av adapteren
Bygging av adapteren
Bygging av adapteren
Bygging av adapteren
Bygging av adapteren

Etter å ha testet alle komponentene separat og prøvd dem sammen på et brødbrett, var det på tide å gi dem et mer permanent hjem. Dette tok noen timer med å legge ut komponenter og lodde.

Øverst til venstre er nedtrappingsregulatoren, som forvandler 12V fra bilbatteriet, til 5V som kan brukes av de andre komponentene.

Nederst til venstre er CAN -bussmodulen, som leser verdier fra bilens CAN -bussnettverk og videresender dem til Arduino.

Øverst til høyre er det digitale potensiometeret (kablet som en reostat) som fungerer som en variabel motstand mellom bakken og stereoanleggets Key1 -inngang.

Nederst til høyre er Arduino, som fungerer som hjernen til adapteren, og forvandler CAN -bussmeldinger til motstander som leses av stereoanlegget.

På 12V -inngangen er en 150mA sikring, som sannsynligvis ikke vil beskytte kretsen, men er der for å forhindre brann i tilfelle kortslutning.

Trinn 4: Programvaren

Programvaren
Programvaren

Etter nedlasting legger du alle tre.ino -filene i en enkelt mappe. På den måten vil alle være en del av den samme skissen og bli distribuert til Arudino sammen.

Du må også legge til de nødvendige bibliotekene i Arduino IDE. For å gjøre dette, last ned følgende filer:

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

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

legg deretter til dem begge ved å gå til Sketch> Include Library> Add. Zip Library …

CanBusStereoAdapter.ino

Grunnleggende oppsett utføres i denne filen.

Hovedkommandoen CAN -bussverdier er definert øverst. Med mindre du har samme bil som meg, må du mest sannsynlig sette dine egne verdier. Du kan bruke de heksadesimale verdiene fra snifferen, jeg brukte binær, så det er lettere å se at det ikke er tilfeldige overlappinger i bitene.

Alle biler har ikke de samme rattkommandoene, så fjern, legg til eller rediger de definerte verdiene.

Ikke glem å bytte ut delsystem -ID -en din i "STEERING_ID".

CanBus.ino

Denne filen konfigurerer CAN -busslytteren, tolker pakkene og setter motstandsverdiene i en sirkulær buffer.

Juster CAN -busskonfigurasjonen i "setupCanBus" -funksjonen for å passe din bil.

Vi bruker en sirkulær buffer fordi, som nevnt tidligere, kommandoinngangen på rattet er mye raskere enn stereoinngangen. På denne måten går vi ikke glipp av noen kommandoer mens det digitale potensiometeret gjør sitt. Hvis vi legger inn for mange kommandoer, blir de eldste kastet først, siden de er minst viktige. Dette lar oss også håndtere saken når du trykker på flere knapper, siden stereoinngangen bare godtar en enkelt verdi om gangen.

Hvis du har endret noen av kommandodefinisjonene i "CanBusStereoAdapter.ino" må du også oppdatere dem i "handleMessageData" -funksjonen. "handleMessageData" sjekker om de medfølgende CAN -bussdatarammene inneholder noen av de kjente kommandoene ved å bruke en bitvis OG -operasjon.

For eksempel, hvis jeg har trykket >> og + samtidig som vil gi oss en dataramme med en verdi på 0b10010000. >> (for bilen min) er 0b00010000 i binær, og + er 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 kommando | OG 0b00010000 | OG 0b10000000 | OG 0b00001000 resultat | = 0b00010000 | = 0b10000000 | = 0b00000000

Her kan vi se at resultatet av AND -operasjonen vil være større enn 0 hvis kommandoen er tilstede i datarammen. Så alt vi trenger å gjøre er å se etter {data frame} & {command value}> 0, for hver kommando vi definerte.

Husk at hver dataramme inneholder forskjellige kommandoer, så det er ok hvis kommandoverdiene er de samme, ettersom vi sjekker dem mot deres egne rammer. I mitt eksempel har både << og ESC begge samme verdi 0b00001000 (0x08), men << er i data0 og ESC i data1.

Etter at vi har bestemt at en kommando er tilstede i en ramme, legger vi til en digital pot -verdi til den sirkulære bufferen. Verdiene varierer fra 0 til 99, men jeg har lagt merke til at "spenningen" som er lest av stereoanlegget ikke er lineær, så test ut verdiene selv.

DigitalPot.ino

Denne filen henter verdier ut av den sirkulære bufferen og sender dem til den digitale potten for å utføre. I mitt tilfelle "pot.setPotMin (false);" vil øke motstanden til maksimum, som stereoanlegget vil lese som maksimal "spenning". Stereoanlegget ditt kan kreve at du setter den digitale potten til et minimum, så test den.

Trinn 5: Prosjektvedlegget

Prosjektets vedlegg
Prosjektets vedlegg

Jeg har en 3D -skriver, så jeg bestemte meg for å skrive ut et todelt kabinett for adapteren min. Jeg har inkludert en Fusion 360 -fil som du kan redigere, og gcode -filer som passer til et 60x80 mm perfboard.

Hvis du ikke har tilgang til en 3D-skriver, kan du bruke et ferdigprosjektet kabinett eller en solid beholder.

Trinn 6: Avsluttende tanker

Jeg planla først at adapteren skulle kobles til konstant strøm og våkne på visse CAN -bussmeldinger, siden bilen min ikke har en tenningsledning i stereorommet. Jeg bestemte meg senere for det da jeg ikke ville risikere å tømme batteriet og bekymre meg for adapteren mens jeg er borte fra bilen. Jeg brukte en bilsikringsboks splitter for å kjøre en tenningsledning og trenger ikke å komplisere adapteren ytterligere.

Fra testene mine er strømforbruket 20-30 mA. Jeg fikk den ned til 10 mA i hvilemodus, og kunne gå enda lavere ved å fjerne lysdiodene fra komponentene, men jeg bestemte meg for å ikke bry meg om det siden den bare vil kjøre mens bilen er i gang.

Jeg er ganske fornøyd med sluttresultatet. Svartiden er rimelig, og den savner sjelden kommandoer.

Selv om min tidsinvestering var langt større enn kostnaden for den kommersielt tilgjengelige adapteren (som ikke fungerte), er kunnskapen jeg fikk uvurderlig.

Anbefalt: