Innehållsförteckning:

Rattnycklar till bilstereoadapter (CAN -buss -> nyckel1): 6 steg
Rattnycklar till bilstereoadapter (CAN -buss -> nyckel1): 6 steg

Video: Rattnycklar till bilstereoadapter (CAN -buss -> nyckel1): 6 steg

Video: Rattnycklar till bilstereoadapter (CAN -buss -> nyckel1): 6 steg
Video: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Juli
Anonim
KAN snusa med buss
KAN snusa med buss

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

Skickar kommandon till stereon
Skickar kommandon till stereon

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

Några dagar efter att ha köpt en begagnad bil upptäckte jag att jag inte kan spela musik från min telefon via bilstereon. Ännu mer frustrerande var att bilen hade bluetooth, men bara tillät röstsamtal, inte musik. Den hade också en Windows Phone USB -port, men den skulle inte fungera med en iPhone utan en 60 $ -dongel.

Efter att ha bytt stereon på mina tidigare bilar, utan mycket eftertanke eller research, beställde jag en ersättningsstereo på 40 $ från en välkänd "billig" webbplats. I stereon kom en backkamera, Car Play och en massa extrafunktioner, vilket verkade mycket bättre än den dyrare dongeln som bara gör en sak.

Efter att ha köpt och målat en ny frontplatta, 3D -utskrift av en fäste och en hel del extra arbete (vilket kan vara en instruktion av sig själv), kom jag till en obehaglig upptäckt. Rattnyckelkommandona skickades via CAN -buss, men stereon hade bara en Key1 -ingång. Jag var inte en som gav upp halvvägs, jag beställde en 60 £ adapter, vilket visade sig inte fungera. Vid det här laget bestämde jag mig för att göra en adapter själv.

Jag är ingen elingenjör, jag har bara rudimentär elektronikkunskap och det här var ett lärande och utforskningsprojekt för mig. Mitt råd skulle vara att först kontrollera dina fordonsspecifikationer och beställa en kompatibel radio, men om du redan har fastnat (som jag var) följ instruktionerna på egen risk.

Tillbehör

Adaptern (ca 15 $)

  • Arduino Pro Mini 5V (eller ett kompatibelt kort)
  • MCP2515 CAN -bussmodul
  • 60x80 mm perfboard
  • X9C104 digital potentiometer 100K Ohm (beror på din stereo)
  • DC-DC Stegregulator LM2596S 3-40V 3A
  • Kabelsäkringshållare + säkring (100-200 Ohm)
  • Projektlåda eller 3D -skrivare för att skriva ut den
  • Bilstereojack (hane + hona)
  • Lödmaterial, trådar etc.

Testhjälpare (behövs inte strikt men kommer att göra testningen mycket enklare)

  • Arduino (alla 5V -kort kommer att göra)
  • MCP2515 CAN -bussmodul
  • Brödbräda + hoppare

Steg 1: CAN Bus Sniffing

Istället för att ha ett gäng ledningar som går runt insidan av din bil som förbinder ett gäng system, har vissa moderna fordon par ledningar som går till varje komponent. Information skickas som digitala datapaket genom dessa trådar, och alla system kan läsa alla meddelanden. Detta är CAN -bussnätverket (det kan finnas flera nätverk i din bil, så all information kanske inte syns).

Det vi vill göra är att ansluta till CAN -bussnätet och "sniffa" datatrafiken. På så sätt kan vi "se" när en rattknapp trycks in. Varje paket har ett ID som representerar fordonsundersystemet som skickade paketet och data som representerar systemtillståndet. I det här fallet försöker vi hitta ID: n för delsystemet som skickar rattnyckelmeddelanden och datarepresentationen för varje nyckel.

Om du har tur kan du hitta värdena för din bil någonstans online och kan hoppa över det här steget.

Denna process är lite involverad och har redan förklarats på andra ställen, så jag sammanfattar det bara:

  • Hitta rätt värden för CAN -busskommunikationen på ditt fordon. För min bil (en 2009 Fiat Idea) var det en 50KBPS baudhastighet och en 8MHz klockfrekvens.
  • Anslut till CAN -bussnätet med CAN -bussmodulen och en Arduino i en "sniffer" -konfiguration.
  • Läs CAN-bussvärdena på din bärbara dator med ett verktyg som https://github.com/alexandreblin/python-can-monito…. Det kommer att vara mycket svårt att göra det utan det, eftersom många meddelanden skickas även när bilen inte gör någonting.
  • Tryck på rattknappen och notera att värdet ändras. Detta kan vara lite knepigt eftersom många meddelanden skickas och det kan vara svårt att räkna ut vilket som är vilket.

Här är två bra artiklar som förklarar processen på djupet:

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

I slutändan bör du ha delsystem -ID som vi kommer att använda för att bara lyssna på rattens CAN -bussmeddelanden och en lista över hexadecimala värden för nyckelkommandona. I mitt fall såg data ut så här:

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

--------------------------------------------- 964 | 3C4 | 00 | 00 | Inga knappar 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 | Upp 964 | 3C4 | 00 | 01 | Ned 964 | 3C4 | 00 | 04 | OK

Delsystemets ID är 3C4 (i det här fallet), vilket är ett hexadecimalt tal så vi borde skriva det som 0x3C4 i Arduino -skisserna. Vi är också intresserade av byte 0 och 1 (i ditt fall kan det finnas fler byte). Dessa är också hexadecimala värden, så de bör också skrivas med en ledande 0x.

Om du konverterar värdena till binärt kommer du att märka att bitarna inte överlappar varandra (till exempel + 0b10000000 och - 0b01000000) detta är så att flera tangenter kan tryckas samtidigt.

Jag föreslår att du bygger sniffaren med materialen som anges i avsnittet "testhjälpare", så att du kan återanvända den senare för att simulera din bil. Detta skulle spara dig från att behöva sitta i bilen hela tiden medan du bygger och testar adaptern. Du kan använda den medföljande skissen för att fungera som simulatorn. Ändra "subsystemId", "data0" och "data1" med de värden du nosade ut.

Steg 2: Skicka kommandon till stereon

Skickar kommandon till stereon
Skickar kommandon till stereon

Innan du börjar bygga adaptern är det bäst att först testa om stereon kan ta emot kommandon.

Jag hade ett extra bilbatteri, så jag anslöt stereon direkt till den. Om du har en 12V bänkströmkälla, ännu bättre. Tyvärr kunde jag inte hitta mycket information online om Key1 -ingången på min enhet, så jag tog till experiment. Jag var inte alltför orolig för att bränna ut stereon vid denna tidpunkt, eftersom den är relativt billig, och detta var mitt sista försök att få den att fungera med min bil.

Stereon har en kommandolärningsskärm, där det är möjligt att välja ett av två motståndsvärden (1K och 3.3K) och se "spännings" -värdet (0-255). "Spänning" citeras eftersom det är vilseledande. Jag spenderade mycket tid på att applicera olika spänningar på Key1 utan lycka. Jag försökte också använda olika motstånd för att tillämpa spänningen utan framgång.

Genombrottet kom när jag försökte röra Key1 -kabeln till batteriets jord, vilket resulterade i att "spänningen" sjönk till 0. Detta i kombination med olika motstånd skulle ge konsekventa "spännings" -värden på inlärningsskärmen.

Nu när jag visste hur jag skulle skicka ingångar till stereon behövde jag ett sätt att skicka dem från en Arduino. Vid denna tidpunkt har jag inte hört talas om multiplexer, som tillsammans med vissa motstånd kan ha varit en snabbare och mer tillförlitlig lösning (jag är fortfarande inte säker på om detta är genomförbart), så jag använde en digital potentiometer. Först hade jag problem med att få den digitala potten att fungera, tills jag kom på att jag måste koppla in den som en reostat för att fungera som ett variabelt motstånd istället för en spänningsdelare. I grund och botten var jag tvungen att ansluta RH- och RW -terminalerna.

Förutom motståndet var timing avgörande. Om motståndsfallet är för kort kommer kommandot inte att registreras. Om det är för långt kan det bli registrerat flera gånger. En nedgång på 240 ms, följt av en 240 ms fördröjning tills nästa kommando fungerade ganska tillförlitligt för min stereo. Även om det känns som väldigt lite tid, betyder det att vi kan skicka högst 2 kommandon per sekund, vilket är märkbart om du snabbt försöker höja eller sänka volymen. Jag försökte leka med olika tider och mönster, vilket ökade farten men var inte särskilt pålitlig. Om du har några idéer om hur du kan förbättra detta, vänligen lämna dem i kommentarerna.

Innan jag går vidare föreslår jag att du bygger en prototyp för att kontrollera om din stereo accepterar samma typ av ingång. Även om den accepterar olika spänningar bör adaptern fungera med små ändringar av ledningarna och Arduino -skissen.

Steg 3: Bygga adaptern

Bygga adaptern
Bygga adaptern
Bygga adaptern
Bygga adaptern
Bygga adaptern
Bygga adaptern

Efter att ha testat alla komponenter separat och testat dem på en brödbräda var det dags att ge dem ett mer permanent hem. Detta tog några timmar att lägga ut komponenter och lödning.

Längst upp till vänster är trappregleraren, som omvandlar 12V från bilbatteriet, till 5V som kan användas av de andra komponenterna.

Längst ner till vänster finns CAN -bussmodulen, som läser värden från bilens CAN -bussnät och vidarebefordrar dem till Arduino.

Längst upp till höger finns den digitala potentiometern (trådbunden som en reostat) som fungerar som ett variabelt motstånd mellan marken och stereon Key1 -ingång.

Längst ner till höger är Arduino, som fungerar som adapternas hjärnor och omvandlar CAN -bussmeddelanden till motstånd som läses av stereon.

På 12V -ingången finns en 150mA säkring, som troligtvis inte skyddar kretsen, men är där för att förhindra brand vid kortslutning.

Steg 4: Programvaran

Mjukvaran
Mjukvaran

Efter nedladdning lägger du alla tre.ino -filerna i en enda mapp. På det sättet kommer alla att vara en del av samma skiss och distribueras till Arudino tillsammans.

Du måste också lägga till de nödvändiga biblioteken i Arduino IDE. För att göra detta, ladda ner följande filer:

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

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

lägg sedan till dem båda genom att gå till Sketch> Include Library> Add. Zip Library …

CanBusStereoAdapter.ino

Grundläggande installation utförs i den här filen.

Nyckelkommandot CAN -bussvärden definieras högst upp. Om du inte har samma bil som jag måste du troligen lägga in dina egna värderingar. Du kan använda de hexadecimala värdena från sniffern, jag använde binär så det är lättare att se att det inte finns några oavsiktliga överlappningar i bitarna.

Alla bilar har inte samma rattkommandon, så ta bort, lägg till eller redigera de definierade värdena.

Glöm inte att byta ut ditt delsystem -id i "STEERING_ID".

CanBus.ino

Denna fil konfigurerar CAN -busslyssnaren, tolkar paketen och lägger motståndsvärdena i en cirkulär buffert.

Justera CAN -busskonfigurationen i "setupCanBus" -funktionen för att passa din bil.

Vi använder en cirkulär buffert eftersom, som nämnts tidigare, rattkommandoinmatningen är mycket snabbare än stereoingången. På så sätt missar vi inga kommandon medan den digitala potentiometern gör sitt. Om vi matar in för många kommandon kommer de äldsta att kasseras först, eftersom de är de minst viktiga. Detta gör det också möjligt för oss att hantera fallet när flera knappar trycks in, eftersom stereoingången bara accepterar ett enda värde åt gången.

Om du har ändrat någon av kommandodefinitionerna i "CanBusStereoAdapter.ino" måste du också uppdatera dem i funktionen "handleMessageData". "handleMessageData" kontrollerar om de tillhandahållna CAN -bussdataramar innehåller något av de kända kommandona genom att använda en bitvis OCH -operation.

Till exempel, om jag har tryckt på >> och + samtidigt som ger oss en dataram med värdet 0b10010000. >> (för min bil) är 0b00010000 i binär och + är 0b10000000.

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

Här kan vi se att resultatet av OCH -operationen blir större än 0 om kommandot finns i dataramen. Så allt vi behöver göra är att söka efter {data frame} & {command value}> 0, för varje kommando vi definierat.

Tänk på att varje dataram innehåller olika kommandon, så det är ok om kommandovärdena är desamma, eftersom vi kontrollerar dem mot sina egna ramar. I mitt exempel har både << och ESC båda samma värde 0b00001000 (0x08), men << är i data0 och ESC i data1.

Efter att vi har bestämt att ett kommando finns i en ram lägger vi till ett digitalt pot -värde till den cirkulära bufferten. Värdena sträcker sig från 0 till 99, men jag har märkt att "spänningen" som läses av stereon inte är linjär, så testa värdena själv.

DigitalPot.ino

Denna fil hämtar värden ur den cirkulära bufferten och skickar dem till den digitala potten för att köra. I mitt fall "pot.setPotMin (false);" kommer att öka motståndet till max, vilket stereon kommer att läsa som maximal "spänning". Din stereo kan kräva att du ställer in den digitala potten till ett minimum, så testa den.

Steg 5: Projektbilagan

Projektbilagan
Projektbilagan

Jag har en 3D -skrivare så jag bestämde mig för att skriva ut ett tvådelat hölje för min adapter. Jag har inkluderat en Fusion 360 -fil som du kan redigera och gcode -filer som passar en 60x80 mm perfboard.

Om du inte har tillgång till en 3D-skrivare kan du använda ett färdigt projekthölje eller en robust behållare.

Steg 6: Slutliga tankar

Jag planerade inledningsvis att adaptern skulle anslutas till konstant ström och vakna till vissa CAN -bussmeddelanden, eftersom min bil inte har någon tändkabel i stereofacket. Jag bestämde mig senare för det eftersom jag inte ville riskera att tömma batteriet och oroa mig för adaptern medan jag är borta från bilen. Jag använde en bilsäkringsboxdelare för att driva en tändkabel och behöver inte komplicera adaptern ytterligare.

Från mina tester är strömförbrukningen 20-30 mA. Jag fick ner den till 10 mA i viloläge och kunde gå ännu lägre genom att ta bort lysdioderna från komponenterna, men jag bestämde mig för att inte bry mig om det eftersom det bara körs medan bilen är igång.

Jag är ganska nöjd med slutresultatet. Svarstiden är rimlig, och den saknar sällan kommandon.

Även om min tidsinvestering var mycket större än kostnaden för den kommersiellt tillgängliga adaptern (som inte fungerade), är den kunskap jag fick ovärderlig.

Rekommenderad: