Indholdsfortegnelse:

Ratnøgler til bilstereoadapter (CAN Bus -> Key1): 6 trin
Ratnøgler til bilstereoadapter (CAN Bus -> Key1): 6 trin

Video: Ratnøgler til bilstereoadapter (CAN Bus -> Key1): 6 trin

Video: Ratnøgler til bilstereoadapter (CAN Bus -> Key1): 6 trin
Video: Откуда взять схемы подключения? Ответ в одном клике... 2024, Juli
Anonim
KAN busnuse
KAN busnuse

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

Sender kommandoer til stereoen
Sender kommandoer til stereoen

Nøgle1) "src =" {{file.large_url | tilføj: 'auto = webp & frame = 1 & height = 300' %} ">

Et par dage efter at have købt en brugt bil, opdagede jeg, at jeg ikke kan afspille musik fra min telefon gennem bilstereoen. Endnu mere frustrerende var, at bilen havde bluetooth, men kun tillod taleopkald, ikke musik. Det havde også en Windows Phone USB -port, men det ville ikke fungere med en iPhone uden en 60 $ dongle.

Efter at have udskiftet stereoanlæg på mine tidligere biler, uden megen eftertanke eller research, bestilte jeg en 40 $ erstatnings stereo fra et velkendt "billigt" websted. Stereoen kom med et bakkamera, Car Play og en masse ekstra funktioner, som virkede til en meget bedre værdi end den dyrere dongle, der kun gør én ting.

Efter at have købt og malet en ny frontplade, 3D -udskrivning af en holder og en hel masse ekstra arbejde (som kunne være en instruktion i sig selv), kom jeg til en ubehagelig opdagelse. Nøglekommandoer i rat blev sendt via CAN -bus, men stereoanlægget havde kun en Key1 -indgang. Da jeg ikke var en til at give op halvvejs, bestilte jeg en 60 £ adapter, som viste sig ikke at fungere. På dette tidspunkt besluttede jeg at lave en adapter selv.

Jeg er ikke elektroingeniør, jeg har kun rudimentær elektronikviden, og dette var et lærings- og udforskningsprojekt for mig. Mit råd ville være at først kontrollere dine køretøjsspecifikationer og bestille en kompatibel radio, men hvis du allerede sidder fast (som jeg var), følg instruktionerne på egen risiko.

Forbrugsvarer

Adapteren (ca. 15 $)

  • Arduino Pro Mini 5V (eller et kompatibelt kort)
  • MCP2515 CAN -busmodul
  • 60x80 mm perfboard
  • X9C104 digitalt potentiometer 100K Ohm (afhænger af din stereo)
  • DC-DC Nedtrapningsregulator LM2596S 3-40V 3A
  • Kabelsikringsholder + sikring (100-200 Ohm)
  • Projektboks eller 3D -printer til udskrivning
  • Bilstereo stik (han + hun)
  • Loddeudstyr, ledninger osv.

Test hjælpere (ikke strengt nødvendigt, men vil gøre test meget lettere)

  • Arduino (ethvert 5V -kort vil gøre)
  • MCP2515 CAN -busmodul
  • Brødbræt + jumpere

Trin 1: CAN Bus Sniffing

I stedet for at få en flok ledninger til at køre rundt inden i din bil, der forbinder en masse systemer, har nogle moderne køretøjer par ledninger, der kører til hver komponent. Information sendes som digitale datapakker gennem disse ledninger, og alle systemer kan læse alle meddelelser. Dette er CAN -busnetværket (der kan være flere netværk i din bil, så alle oplysninger er muligvis ikke synlige).

Hvad vi vil gøre, er at oprette forbindelse til CAN -busnetværket og "snuse" datatrafikken. På denne måde kan vi "se", når der trykkes på en ratnøgle. Hver pakke har et ID, der repræsenterer køretøjets undersystem, der sendte pakken, og de data, der repræsenterer systemtilstanden. I dette tilfælde forsøger vi at finde id'et for delsystemet, der sender ratnøglemeddelelser, og datarepræsentationen for hver nøgle.

Hvis du er heldig, finder du muligvis værdierne for din bil et sted online og kan springe dette trin over.

Denne proces er lidt involveret og er allerede blevet forklaret andre steder, så jeg vil bare opsummere det:

  • Find de korrekte værdier for CAN -buskommunikationen på dit køretøj. For min bil (en 2009 Fiat Idea) var det en 50KBPS baudhastighed og en 8MHz clockhastighed.
  • Opret forbindelse til CAN -busnetværket ved hjælp af CAN -busmodulet og en Arduino i en "sniffer" -konfiguration.
  • Læs CAN-busværdierne på din bærbare computer ved hjælp af et værktøj som https://github.com/alexandreblin/python-can-monito…. Det vil være meget svært at gøre det uden det, da der sendes mange beskeder, selv når bilen ikke gør noget.
  • Tryk på ratknappen, og bemærk værdien ændres. Dette kan være lidt vanskeligt, da der sendes mange beskeder, og det kan være svært at finde ud af, hvilken der er hvilken.

Her er to gode artikler, der forklarer processen i dybden:

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

Til sidst skal du have delsystem -id'et, som vi vil bruge til kun at lytte efter rattets CAN -busmeddelelser, og en liste over hexadecimale værdier for tastkommandoerne. I mit tilfælde så dataene sådan ud:

ID | ID Hex | Byte 0 | Byte 1 | Knap

--------------------------------------------- 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 | Vind 964 | 3C4 | 00 | 02 | Op til 964 | 3C4 | 00 | 01 | Ned 964 | 3C4 | 00 | 04 | Okay

Undersystemets ID er 3C4 (i dette tilfælde), som er et hexadecimalt tal, så vi skal skrive det som 0x3C4 i Arduino -skitserne. Vi er også interesseret i byte 0 og 1 (i dit tilfælde kan der være flere bytes). Disse er også hexadecimale værdier, så de skal også skrives med en ledende 0x.

Hvis du konverterer værdierne til binært, vil du bemærke, at bitene ikke overlapper hinanden (f.eks. + 0b10000000 og - 0b01000000) dette er, så flere taster kan trykkes samtidigt.

Jeg foreslår, at du bygger snifferen med de materialer, der er anført i afsnittet "testhjælper", så du kan genbruge den senere til at simulere din bil. Dette ville spare dig for at skulle sidde i din bil hele tiden, mens du bygger og tester adapteren. Du kan bruge den medfølgende skitse til at fungere som simulator. Rediger "subsystemId", "data0" og "data1" med de værdier, du har snuset ud.

Trin 2: Afsendelse af kommandoer til stereoen

Sender kommandoer til stereoen
Sender kommandoer til stereoen

Inden du begynder at bygge adapteren, er det bedst at først teste, om stereoanlægget kan modtage kommandoer.

Jeg havde et ekstra bilbatteri, så jeg sluttede stereoanlægget direkte til det. Hvis du har en 12V bænkstrømkilde, endnu bedre. Desværre kunne jeg ikke finde meget information online om Key1 -input på min enhed, så jeg tyede til eksperimentering. Jeg var ikke overdrevent bekymret for at brænde stereoanlægget ud på dette tidspunkt, da det er relativt billigt, og dette var mit sidste forsøg på at få det til at fungere med min bil.

Stereoen har en kommandoindlæringsskærm, hvor det er muligt at vælge en af to modstandsværdier (1K og 3,3K) og for at se "spændings" -værdien (0-255). "Spænding" er citeret, fordi det er vildledende. Jeg brugte meget tid på at anvende forskellige spændinger til Key1 uden held. Jeg forsøgte også at bruge forskellige modstande til at anvende spændingen uden held.

Gennembruddet kom, da jeg forsøgte at røre Key1 -ledningen til batteriets jord, hvilket resulterede i, at "spænding" faldt til 0. Dette i kombination med forskellige modstande ville producere konsistente "spændings" -værdier på læringsskærmen.

Nu hvor jeg vidste, hvordan jeg sendte input til stereoanlægget, havde jeg brug for en måde at sende dem fra en Arduino. På dette tidspunkt har jeg ikke hørt om multiplexere, som sammen med nogle modstande måske var en hurtigere og mere pålidelig løsning (jeg er stadig ikke sikker på, om dette er muligt), så jeg brugte et digitalt potentiometer. Først havde jeg problemer med at få den digitale gryde til at fungere, indtil jeg fandt ud af, at jeg skulle tilslutte den som en reostat for at fungere som en variabel modstand i stedet for en spændingsdeler. Grundlæggende var jeg nødt til at forbinde RH- og RW -terminalerne.

Udover modstanden var timing afgørende. Hvis modstandsfaldet er for kort, bliver kommandoen ikke registreret. Hvis det er for langt, kan det blive registreret flere gange. Et fald på 240 ms, efterfulgt af en 240 ms forsinkelse, indtil den næste kommando fungerede temmelig pålidelig for mit stereoanlæg. Selvom det virker som meget lidt tid, betyder det, at vi maksimalt kan sende 2 kommandoer pr. Sekund, hvilket er mærkbart, hvis du forsøger hurtigt at skrue op eller ned for lydstyrken. Jeg prøvede at lege med forskellige timinger og mønstre, hvilket øgede hastigheden, men var ikke særlig pålidelig. Hvis du har ideer til, hvordan du kan forbedre dette, kan du efterlade dem i kommentarerne.

Inden jeg går videre, foreslår jeg at bygge en prototype for at kontrollere, om din stereo accepterer den samme slags input. Selvom den accepterer forskellige spændinger, skal adapteren fungere med små ændringer i ledningerne og Arduino -skitsen.

Trin 3: Opbygning af adapteren

Bygger adapteren
Bygger adapteren
Bygger adapteren
Bygger adapteren
Bygger adapteren
Bygger adapteren

Efter at have testet alle komponenterne separat og prøvet dem sammen på et brødbræt, var det tid til at give dem et mere permanent hjem. Dette tog et par timer med udlægning af komponenter og lodning.

Øverst til venstre er trin ned -regulatoren, som transformerer 12V fra bilbatteriet, til 5V, som kan bruges af de andre komponenter.

Nederst til venstre er CAN -busmodulet, der læser værdier fra bilens CAN -busnetværk og videresender dem til Arduino.

Øverst til højre er det digitale potentiometer (kablet som en reostat), der fungerer som en variabel modstand mellem jorden og stereoens Key1 -indgang.

Nederst til højre er Arduino, der fungerer som adapterens hjerne og omdanner CAN -busmeddelelser til modstande, der læses af stereoanlægget.

På 12V -indgangen er der en 150mA sikring, der sandsynligvis ikke vil beskytte kredsløbet, men er der for at forhindre brand i tilfælde af kortslutning.

Trin 4: Softwaren

Softwaren
Softwaren

Efter download skal du lægge alle tre.ino -filer i en enkelt mappe. På den måde vil alle være en del af den samme skitse og blive indsat til Arudino sammen.

Du skal også tilføje de nødvendige biblioteker til Arduino IDE. For at gøre dette skal du downloade følgende filer:

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

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

tilføj derefter dem begge ved at gå til Skitse> Inkluder bibliotek> Tilføj. Zip -bibliotek …

CanBusStereoAdapter.ino

Grundlæggende opsætning udføres i denne fil.

Nøglekommando CAN -busværdier er defineret øverst. Medmindre du har den samme bil som mig, bliver du sandsynligvis nødt til at sætte dine egne værdier. Du kan bruge de hexadecimale værdier fra snifferen, jeg brugte binær, så det er lettere at se, at der ikke er utilsigtede overlapninger i bitene.

Alle biler har ikke de samme rattkommandoer, så fjern, tilføj eller rediger de definerede værdier.

Glem ikke at udskifte dit delsystem -id i "STEERING_ID".

CanBus.ino

Denne fil opsætter CAN -buslytteren, fortolker pakkerne og sætter modstandsværdierne i en cirkulær buffer.

Juster CAN -buskonfigurationen i funktionen "setupCanBus", så den passer til din bil.

Vi bruger en cirkulær buffer, fordi, som tidligere nævnt, er rattets kommandoindgang meget hurtigere end stereoindgangen. På denne måde går vi ikke glip af nogen kommandoer, mens det digitale potentiometer gør sit. Hvis vi indtaster for mange kommandoer, kasseres de ældste først, da de er de mindst vigtige. Dette giver os også mulighed for at håndtere sagen, når der trykkes på flere knapper, da stereoindgangen kun accepterer en enkelt værdi ad gangen.

Hvis du har ændret nogen af kommandodefinitionerne i "CanBusStereoAdapter.ino", skal du også opdatere dem i funktionen "handleMessageData". "handleMessageData" kontrollerer, om de medfølgende CAN -bus -datarammer indeholder nogen af de kendte kommandoer ved hjælp af en bitvis OG -betjening.

For eksempel, hvis jeg har trykket >> og + på samme tid, hvilket vil give os en dataramme med en værdi på 0b10010000. >> (for min bil) 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 af AND -operationen vil være større end 0, hvis kommandoen er til stede i datarammen. Så alt hvad vi skal gøre er at tjekke for {dataramme} & {kommandoværdi}> 0 for hver kommando, vi definerede.

Husk, at hver dataramme indeholder forskellige kommandoer, så det er ok, hvis kommandoværdierne er de samme, da vi kontrollerer dem mod deres egne rammer. I mit eksempel har både << og ESC begge den samme værdi 0b00001000 (0x08), men << er i data0 og ESC i data1.

Efter at vi har fastslået, at der er en kommando i en ramme, tilføjer vi en digital potværdi til den cirkulære buffer. Værdierne spænder fra 0 til 99, men jeg har bemærket, at "spændingen", som stereoanlægget læser, ikke er lineær, så test værdierne selv.

DigitalPot.ino

Denne fil springer værdier ud af den cirkulære buffer og sender dem til den digitale pot for at udføre. I mit tilfælde "pot.setPotMin (false);" vil øge modstanden til maksimum, som stereoanlægget vil aflæse som maksimal "spænding". Din stereo kræver muligvis, at du indstiller den digitale pot til minimum, så test den.

Trin 5: Projektbilaget

Projektbilaget
Projektbilaget

Jeg har en 3D -printer, så jeg besluttede at udskrive et todelt kabinet til min adapter. Jeg har inkluderet en Fusion 360 -fil, som du kan redigere, og gcode -filer, der passer til et 60x80 mm perfboard.

Hvis du ikke har adgang til en 3D-printer, kan du bruge et færdigt projektkabinet eller en robust beholder.

Trin 6: Afsluttende tanker

Jeg planlagde oprindeligt, at adapteren skulle tilsluttes konstant strøm og vågne op med visse CAN -busmeddelelser, da min bil ikke har en tændkabel i stereorummet. Jeg besluttede senere imod det, da jeg ikke ville risikere at tømme batteriet og bekymre mig om adapteren, mens jeg er væk fra bilen. Jeg brugte en bilsikringsboks splitter til at køre en tændkabel og behøvede ikke at komplicere adapteren yderligere.

Fra mine test er strømforbruget 20-30 mA. Jeg fik det ned til 10 mA i dvaletilstand, og kunne gå endnu lavere ved at fjerne lysdioderne fra komponenterne, men jeg besluttede ikke at genere det, da det kun kører, mens bilen kører.

Jeg er ret tilfreds med slutresultatet. Svartiden er rimelig, og den mangler sjældent kommandoer.

Selvom min tidsinvestering var langt større end prisen på den kommercielt tilgængelige adapter (som ikke virkede), er den viden, jeg fik, uvurderlig.

Anbefalede: