INHOUDSOPGAWE:

Rattoets sleutels na motor stereo -adapter (CAN Bus -> Key1): 6 stappe
Rattoets sleutels na motor stereo -adapter (CAN Bus -> Key1): 6 stappe

Video: Rattoets sleutels na motor stereo -adapter (CAN Bus -> Key1): 6 stappe

Video: Rattoets sleutels na motor stereo -adapter (CAN Bus -> Key1): 6 stappe
Video: TS 4 Relaties tussen ordinale en nominale variabelen 2024, November
Anonim
KAN Bus snuif
KAN Bus snuif

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

Stuur opdragte na die stereo
Stuur opdragte na die stereo

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

'N Paar dae nadat ek 'n gebruikte motor gekoop het, het ek agtergekom dat ek nie musiek vanaf my selfoon deur die stereo van die motor kan speel nie. Nog meer frustrerend was dat die motor bluetooth het, maar slegs stemoproepe toegelaat het, nie musiek nie. Dit het ook 'n USB -poort van Windows Phone, maar dit werk nie met 'n iPhone sonder 'n dongle van $ 60 nie.

Nadat ek stereos op my vorige motors vervang het, sonder veel nadenke of navorsing, bestel ek 'n vervangende stereo van 40 $ van 'n bekende 'goedkoop' webwerf. Die stereo het 'n agteruitry -kamera, Car Play en 'n klomp ekstra funksies, wat baie beter gelyk het as die duurder dongle wat net een ding doen.

Nadat ek 'n nuwe voorplaat gekoop en geverf het, 'n houer met 3D -drukwerk en nog baie ekstra werk (wat op sigself 'n opdrag kan wees) kan kry, het ek tot 'n onaangename ontdekking gekom. Die stuurwiel se sleutelopdragte is deur die CAN -bus gestuur, maar die stereo het slegs 'n Key1 -invoer. Omdat ek nie een was om halfpad op te gee nie, het ek 'n 60 £ -adapter bestel, wat blykbaar nie werk nie. Op hierdie stadium het ek besluit om self 'n adapter te maak.

Ek is nie 'n elektriese ingenieur nie, ek het slegs rudimentêre elektroniese kennis, en dit was 'n leer- en verkenningsprojek vir my. My advies is om eers die spesifikasies van u voertuig na te gaan en 'n versoenbare radio te bestel, maar as u reeds vas is (soos ek was), volg die instruksies op eie risiko.

Voorrade

Die adapter (ongeveer 15 $)

  • Arduino Pro Mini 5V (of 'n versoenbare bord)
  • MCP2515 KAN busmodule
  • 60x80 mm perfboard
  • X9C104 digitale potensiometer 100K Ohm (hang af van uw stereo)
  • DC-DC Step down regulator LM2596S 3-40V 3A
  • Kabelsekeringhouder + lont (100-200 Ohm)
  • Projekkas of 3D -drukker om dit te druk
  • Car stereo -aansluitings (manlik + vroulik)
  • Soldeervoorrade, drade, ens.

Toets helpers (nie streng nodig nie, maar dit sal die toets baie makliker maak)

  • Arduino (enige 5V -bord sal dit doen)
  • MCP2515 KAN busmodule
  • Broodbord + springers

Stap 1: KAN Bus snuif

In plaas daarvan dat daar 'n klomp drade aan die binnekant van u motor loop wat 'n klomp stelsels met mekaar verbind, het sommige moderne voertuie 'n paar drade wat na elke komponent loop. Inligting word as digitale datapakkies deur hierdie drade gestuur, en alle stelsels kan alle boodskappe lees. Dit is die CAN -busnetwerk (daar kan veelvuldige netwerke in u motor wees, dus is alle inligting moontlik nie sigbaar nie).

Wat ons wil doen, is om aan te sluit op die CAN -busnetwerk en die dataverkeer te “snuif”. Op hierdie manier kan ons 'sien' as 'n stuurwiel -sleutel ingedruk word. Elke pakkie het 'n ID, wat die voertuigsubstelsel verteenwoordig wat die pakkie gestuur het, en die data wat die stelselstatus verteenwoordig. In hierdie geval probeer ons die ID van die subsisteem vind wat die stuurwiel se sleutelboodskappe stuur, en die gegewensvoorstelling van elke sleutel.

As u gelukkig is, vind u moontlik die waardes vir u motor iewers aanlyn en kan u hierdie stap oorslaan.

Hierdie proses is 'n bietjie betrokke en is al op ander plekke verduidelik, so ek vat dit net op:

  • Vind die korrekte waardes vir die CAN -buskommunikasie op u voertuig. Vir my motor ('n 2009 Fiat Idea) was dit 'n baudrate van 50KBPS en 'n kloksnelheid van 8 MHz.
  • Koppel aan die CAN -busnetwerk met behulp van die CAN -busmodule en 'n Arduino in 'snuffel' -opset.
  • Lees die CAN-buswaardes op u skootrekenaar met 'n instrument soos https://github.com/alexandreblin/python-can-monito…. Dit sal baie moeilik wees om dit sonder dit te doen, aangesien baie boodskappe gestuur word, selfs as die motor niks doen nie.
  • Druk op die stuurwielknoppie en let op die waardeveranderinge. Dit kan 'n bietjie lastig wees, aangesien baie boodskappe gestuur word, en dit kan moeilik wees om uit te vind watter.

Hier is twee wonderlike artikels wat die proses in diepte verduidelik:

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

Uiteindelik moet u die substelsel -ID hê wat ons sal gebruik om slegs na die stuurwiel CAN -busboodskappe te luister, en 'n lys van heksadesimale waardes vir die sleutelopdragte. In my geval het die data so gelyk:

ID | ID Hex | Byte 0 | Byte 1 | Knoppie

--------------------------------------------- 964 | 3C4 | 00 | 00 | Geen knoppies 964 | 3C4 | 04 | 00 | SR 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telefoon 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Wen 964 | 3C4 | 00 | 02 | Tot 964 | 3C4 | 00 | 01 | Af 964 | 3C4 | 00 | 04 | OK

Die subsisteem -ID is 3C4 (in hierdie geval), wat 'n heksadesimale getal is, dus ons moet dit soos 0x3C4 in die Arduino -sketse skryf. Ons is ook geïnteresseerd in grepe 0 en 1 (in u geval kan daar meer grepe wees). Dit is ook heksadesimale waardes, daarom moet dit ook met 'n leidende 0x geskryf word.

As u die waardes in binêre omskakel, sal u agterkom dat die bisse nie oorvleuel nie (byvoorbeeld + 0b10000000 en - 0b01000000). Dit beteken dat verskeie sleutels tegelyk ingedruk kan word.

Ek stel voor dat u die snuffel bou met die materiaal wat in die afdeling "toetshulp" genoem word, sodat u dit later kan hergebruik om u motor te simuleer. Dit sal u verhinder om die hele tyd in u motor te sit terwyl u die adapter bou en toets. U kan die skets gebruik om as die simulator op te tree. Verander "subsystemId", "data0" en "data1" met die waardes wat u uitgesnuffel het.

Stap 2: Stuur opdragte na die stereo

Stuur opdragte na die stereo
Stuur opdragte na die stereo

Voordat u die adapter begin bou, is dit die beste om eers te toets of die stereo opdragte kan ontvang.

Ek het 'n ekstra motorbattery gehad, en ek het die stereo direk daaraan gekoppel. As u 'n 12V -kragbron op die bank het, is dit nog beter. Ongelukkig kon ek nie veel inligting aanlyn vind oor die Key1 -invoer op my eenheid nie, so ek het tot eksperimente gegaan. Ek was nie te bekommerd oor die verbranding van die stereo op hierdie stadium nie, aangesien dit relatief goedkoop is, en dit was my laaste poging om dit met my motor te laat werk.

Die stereo het 'n opdrag-leerskerm, waar dit moontlik is om een van twee weerstandswaardes (1K en 3.3K) te kies en die "spanning" -waarde (0-255) te sien. 'Spanning' word aangehaal omdat dit misleidend is. Ek het baie tyd spandeer sonder om verskillende spanning op Key1 toe te pas. Ek het ook probeer om verskillende weerstande te gebruik sonder om die spanning toe te pas.

Die deurbraak het gekom toe ek probeer om die Key1 -draad aan die batterygrond te raak, wat tot gevolg het dat 'spanning' tot 0 daal. Dit in kombinasie met verskillende weerstande sou konsekwente 'spannings' -waardes op die leerskerm lewer.

Noudat ek weet hoe om insette na die stereo te stuur, het ek 'n manier nodig om dit van 'n Arduino af te stuur. Op hierdie stadium het ek nog nie van multiplexers gehoor nie, wat saam met 'n paar weerstande 'n vinniger en betroubaarder oplossing kon wees (ek is nog steeds nie seker of dit haalbaar is nie), en daarom gebruik ek 'n digitale potensiometer. Ek het eers probleme gehad om die digitale pot aan die werk te kry, totdat ek agtergekom het dat ek dit as 'n reostaat moet aansluit om as 'n veranderlike weerstand in plaas van 'n spanningsverdeler te werk. Eintlik moes ek die RH- en RW -terminale verbind.

Behalwe die weerstand, was tydsberekening deurslaggewend. As die weerstandsverlies te kort is, word die opdrag nie geregistreer nie. As dit te lank is, kan dit verskeie kere geregistreer word. 'N Daling van 240 ms, gevolg deur 'n vertraging van 240 ms totdat die volgende opdrag redelik betroubaar vir my stereo werk. Alhoewel dit baie min tyd lyk, beteken dit dat ons 'n maksimum van 2 opdragte per sekonde kan stuur, wat merkbaar is as u die volume vinnig wil verhoog of verlaag. Ek het probeer om met verskillende tydsberekeninge en patrone rond te speel, wat die spoed verhoog het, maar nie baie betroubaar was nie. As u idees het oor hoe u dit kan verbeter, laat dit dan in die kommentaar.

Voordat ek verder gaan, stel ek voor dat u 'n prototipe bou om te kyk of u stereo dieselfde tipe invoer aanvaar. Selfs as dit verskillende spannings aanvaar, moet die adapter werk met geringe veranderinge aan die bedrading en die Arduino -skets.

Stap 3: Bou die adapter

Die bou van die adapter
Die bou van die adapter
Die bou van die adapter
Die bou van die adapter
Die bou van die adapter
Die bou van die adapter

Nadat ons al die komponente afsonderlik getoets en op 'n broodbord saam probeer het, was dit tyd om hulle 'n meer permanente tuiste te gee. Dit het 'n paar uur geneem om komponente uit te lê en te soldeer.

Links bo is die trappie -reguleerder, wat 12V van die motorbattery omskakel na 5V wat deur die ander komponente gebruik kan word.

Links onder is die CAN -busmodule, wat waardes van die motor se CAN -busnetwerk lees en dit na die Arduino stuur.

Regs bo is die digitale potensiometer (bedraad as 'n reostaat) wat as 'n veranderlike weerstand tussen die grond en die stereo se Key1 -inset dien.

Regs onder is die Arduino, wat dien as die brein van die adapter, wat CAN -busboodskappe omskakel in weerstande wat deur die stereo gelees word.

Op die 12V -ingang is 'n 150mA -lont, wat waarskynlik nie die kring sal beskerm nie, maar is daar om 'n brand te voorkom in geval van 'n kortstondigheid.

Stap 4: Die sagteware

Die sagteware
Die sagteware

Na aflaai, plaas al drie.ino -lêers in 'n enkele gids. Op hierdie manier sal almal deel uitmaak van dieselfde skets en saam na die Arudino ontplooi word.

U moet ook die vereiste biblioteke by die Arduino IDE voeg. Laai die volgende lêers hiervoor af:

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

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

voeg dan albei by Sketch> Include Library> Add. Zip Library …

CanBusStereoAdapter.ino

Basiese opstelling word in hierdie lêer uitgevoer.

Sleutelopdrag CAN -buswaardes word bo -aan gedefinieer. Tensy jy dieselfde motor as ek het, sal jy heel waarskynlik jou eie waardes moet invul. U kan die heksadesimale waardes van die sniffer gebruik; ek het binêre gebruik, sodat dit makliker is om te sien dat daar geen toevallige oorvleueling in die stukkies is nie.

Alle motors het nie dieselfde stuurwielopdragte nie, dus verwyder, voeg by of wysig die gedefinieerde waardes.

Moenie vergeet om u subsisteem -ID in "STEERING_ID" te vervang nie.

CanBus.ino

Hierdie lêer stel die CAN -busluisteraar op, interpreteer die pakkies en plaas die weerstandswaardes in 'n sirkelvormige buffer.

Pas die CAN -buskonfigurasie aan in die "setupCanBus" -funksie wat by u motor pas.

Ons gebruik 'n sirkelvormige buffer, want soos vroeër genoem, is die stuurinvoer van die stuur baie vinniger as die stereo -ingang. Op hierdie manier mis ons geen opdragte terwyl die digitale potensiometer sy ding doen nie. As ons te veel opdragte invoer, word die oudste eers weggegooi, aangesien dit die minste belangrik is. Dit stel ons ook in staat om die saak te hanteer as daar op verskeie knoppies gedruk word, aangesien die stereo -ingang slegs 'n enkele waarde op 'n slag aanvaar.

As u een van die opdragdefinisies in "CanBusStereoAdapter.ino" verander het, moet u dit ook opdateer in die "handleMessageData" -funksie. "handleMessageData" kyk of die gegewe CAN -busdatarame enige van die bekende opdragte bevat deur 'n bitwise EN -operasie te gebruik.

Byvoorbeeld, as ek terselfdertyd >> en + ingedruk het, wat ons 'n data raam met 'n waarde van 0b10010000 gee. >> (vir my motor) is 0b00010000 in binêre, en + is 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 opdrag | EN 0b00010000 | EN 0b10000000 | EN 0b00001000 resultaat | = 0b00010000 | = 0b10000000 | = 0b00000000

Hier kan ons sien dat die resultaat van die AND -operasie groter as 0 sal wees as die opdrag in die datarame voorkom. Al wat ons hoef te doen is om te kyk vir {data frame} en {command value}> 0, vir elke opdrag wat ons gedefinieer het.

Hou in gedagte dat elke datarame verskillende opdragte bevat, dus dit is goed as die opdragwaardes dieselfde is, aangesien ons dit teen hul eie rame kontroleer. In my voorbeeld het beide << en ESC beide dieselfde waarde 0b00001000 (0x08), maar << is in data0 en ESC in data1.

Nadat ons vasgestel het dat 'n opdrag in 'n raam voorkom, voeg ons 'n digitale potwaarde by die sirkelbuffer. Die waardes wissel van 0 tot 99, maar ek het opgemerk dat die 'spanning' wat deur die stereo gelees word nie lineêr is nie, dus toets self die waardes.

DigitalPot.ino

Hierdie lêer haal waardes uit die sirkelbuffer en stuur dit na die digitale pot om dit uit te voer. In my geval "pot.setPotMin (vals);" verhoog die weerstand tot die maksimum, wat die stereo as maksimum "spanning" sal lees. U stereo kan vereis dat u die digitale pot op 'n minimum stel, dus toets dit.

Stap 5: Die projekbylaag

Die projekbylaag
Die projekbylaag

Ek het 'n 3D -drukker, en ek het besluit om 'n tweedelige omhulsel vir my adapter te druk. Ek het 'n Fusion 360 -lêer ingesluit wat u kan redigeer, en gcode -lêers wat pas by 'n 60x80mm perfboard.

As u nie toegang tot 'n 3D-drukker het nie, kan u 'n gereedgemaakte projekomhulsel of 'n stewige houer gebruik.

Stap 6: Laaste gedagtes

Ek het aanvanklik beplan dat die adapter aan konstante krag gekoppel word en dat ek op sekere CAN -busboodskappe moet wakker word, aangesien my motor nie 'n ontstekingsdraad in die stereo -kompartement het nie. Ek het later daarteen besluit, aangesien ek nie die risiko wou loop om die battery leeg te raak nie en my nie te bekommer oor die adapter terwyl ek weg is van die motor nie. Ek het 'n motorversekeringsboksplitser gebruik om 'n ontstekingsdraad te voer en hoef nie die adapter verder te bemoeilik nie.

Uit my toetse is die kragverbruik 20-30 mA. Ek het dit in die slaapmodus tot 10 mA verlaag, en ek kan selfs laer sak deur die LED's van die komponente te verwyder, maar ek het besluit om my nie daaraan te steur nie, aangesien dit slegs sal loop terwyl die motor loop.

Ek is baie tevrede met die eindresultaat. Die reaksietyd is redelik en dit mis selde opdragte.

Alhoewel my tydsbelegging veel groter was as die koste van die kommersiële adapter (wat nie werk nie), is die kennis wat ek opgedoen het van onskatbare waarde.

Aanbeveel: