Talaan ng mga Nilalaman:

Mga Steering Wheel Key sa Car Stereo Adapter (CAN Bus -> Key1): 6 na Hakbang
Mga Steering Wheel Key sa Car Stereo Adapter (CAN Bus -> Key1): 6 na Hakbang

Video: Mga Steering Wheel Key sa Car Stereo Adapter (CAN Bus -> Key1): 6 na Hakbang

Video: Mga Steering Wheel Key sa Car Stereo Adapter (CAN Bus -> Key1): 6 na Hakbang
Video: Connects2 Presents: The Steering Wheel Interface 2024, Hulyo
Anonim
MAAARI bang Busyon ng Bus
MAAARI bang Busyon ng Bus

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

Pagpapadala ng Mga Utos sa Stereo
Pagpapadala ng Mga Utos sa Stereo

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

Ilang araw pagkatapos bumili ng isang ginamit na kotse, natuklasan ko na hindi ako makakatugtog ng musika mula sa aking telepono sa pamamagitan ng stereo ng kotse. Ang mas nakakainis pa ay ang kotse ay may Bluetooth, ngunit pinapayagan lamang ang mga tawag sa boses, hindi musika. Mayroon din itong port ng Windows Phone USB, ngunit hindi ito gagana sa isang iPhone nang walang 60 $ dongle.

Ang pagpapalit ng mga stereo sa aking mga nakaraang kotse, nang walang pag-iisip o pagsasaliksik, nag-order ako ng isang 40 $ kapalit na stereo mula sa isang kilalang "murang" website. Ang stereo ay dumating na may isang pabaliktad na kamera, Car Play at isang grupo ng mga karagdagang tampok, na tila isang mas mahusay na halaga kaysa sa mas mahal na dongle na nagagawa lamang ng isang bagay.

Matapos ang pagbili at pagpipinta ng isang bagong faceplate, pag-print ng 3D ng isang bundok, at isang buong maraming labis na trabaho (na maaaring maging isang itinuro sa pamamagitan ng kanyang sarili), napunta ako sa isang hindi kasiya-siyang tuklas. Ang mga utos ng pagpipiloto ng manibela ay ipinadala sa pamamagitan ng CAN bus, ngunit ang stereo ay mayroon lamang input na Key1. Hindi pagiging isa na susuko sa kalahating paraan, nag-order ako ng isang 60 £ adapter, na hindi gumana. Sa puntong ito nagpasya akong gumawa ng isang adapter sa aking sarili.

Hindi ako isang electrical engineer, mayroon lamang akong kaalamang pang-electronics at ito ay isang proyekto sa pag-aaral at paggalugad para sa akin. Ang payo ko ay suriin muna ang mga detalye ng iyong sasakyan at mag-order ng isang katugmang radyo, ngunit kung ikaw ay natigil na (tulad ko) sundin ang mga itinuturo sa iyong sariling peligro.

Mga gamit

Ang adapter (tinatayang 15 $)

  • Arduino Pro Mini 5V (o isang katugmang board)
  • MCP2515 CAN module ng bus
  • 60x80mm perfboard
  • X9C104 digital potentiometer 100K Ohm (nakasalalay sa iyong stereo)
  • DC-DC Step down regulator LM2596S 3-40V 3A
  • May-ari ng fuse ng cable + piyus (100-200 Ohm)
  • Project box o 3D printer upang mai-print ito
  • Mga stereo jack ng kotse (lalaki + babae)
  • Mga supply ng panghinang, wire, atbp.

Mga tumutulong sa pagsubok (hindi mahigpit na kinakailangan ngunit gagawing mas madali ang pagsubok)

  • Arduino (anumang gagawin ng 5V board)
  • MCP2515 CAN module ng bus
  • Breadboard + jumper

Hakbang 1: MAAARING Bus ngumoy

Sa halip na magkaroon ng isang bungkos ng mga wire na tumakbo sa paligid ng iyong kotse na magkakaugnay sa isang bungkos ng mga system, ang ilang mga modernong sasakyan ay may mga pares ng mga wire na tumatakbo sa bawat bahagi. Ipinadala ang impormasyon bilang mga digital data packet sa pamamagitan ng mga wires na ito, at mabasa ng lahat ng mga system ang lahat ng mga mensahe. Ito ang CAN bus network (maaaring maraming mga network sa iyong sasakyan, kaya't ang lahat ng impormasyon ay maaaring hindi makita).

Ang nais naming gawin, ay upang kumonekta sa CAN bus network at "isinghot" ang trapiko ng data. Sa ganitong paraan maaari nating "makita" kapag ang isang pagpipiloto ng manibela ay pinindot. Ang bawat packet ay may isang ID, na kumakatawan sa subsystem ng sasakyan na nagpadala ng packet, at ang data na kumakatawan sa estado ng system. Sa kasong ito sinusubukan naming hanapin ang ID ng subsystem na nagpapadala ng mga mensahe ng manibela ng key, at ang representasyon ng data ng bawat key.

Kung ikaw ay mapalad na maaari mong makita ang mga halaga para sa iyong kotse sa isang lugar sa online, at maaaring laktawan ang hakbang na ito.

Ang prosesong ito ay medyo kasangkot at naipaliwanag na sa ibang mga lugar, kaya ibubuod ko lamang ito:

  • Hanapin ang tamang mga halaga para sa CAN bus na komunikasyon sa iyong sasakyan. Para sa aking kotse (isang 2009 Fiat Idea) ito ay isang 50KBPS baud rate, at isang bilis ng orasan na 8MHz.
  • Kumonekta sa CAN bus network gamit ang module ng CAN bus at isang Arduino sa isang "sniffer" na pagsasaayos.
  • Basahin ang mga halaga ng CAN bus sa iyong laptop gamit ang isang tool tulad ng https://github.com/alexandreblin/python-can-monito…. Napakahirap gawin ito nang wala ito, dahil maraming mensahe ang ipinapadala kahit na walang ginagawa ang kotse.
  • Pindutin ang pindutan ng manibela at tandaan ang mga pagbabago sa halaga. Maaari itong maging medyo nakakalito dahil maraming mga mensahe ang ipinadala at maaaring mahirap malaman kung alin ang alin.

Narito ang dalawang mahusay na artikulo na nagpapaliwanag ng proseso ng malalim:

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

Sa huli dapat kang magkaroon ng subsystem ID na gagamitin namin upang makinig para lamang sa manibela ng mga mensahe sa CAN bus, at isang listahan ng mga hexadecimal na halaga para sa mga pangunahing utos. Sa aking kaso ang data ay ganito ang hitsura:

ID | ID Hex | Byte 0 | Byte 1 | Pindutan

--------------------------------------------- 964 | 3C4 | 00 | 00 | Walang mga pindutan 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telepono 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Manalo ng 964 | 3C4 | 00 | 02 | Pataas na 964 | 3C4 | 00 | 01 | Bumaba 964 | 3C4 | 00 | 04 | OK lang

Ang subsystem ID ay 3C4 (sa kasong ito), na isang hexadecimal na numero kaya dapat nating isulat ito tulad ng 0x3C4 sa mga sketch ng Arduino. Interesado rin kami sa mga byte 0 at 1 (sa iyong kaso ay maaaring may maraming mga byte). Ito rin ang mga hexadecimal na halaga, kaya dapat din silang isulat sa isang nangungunang 0x.

Kung iko-convert mo ang mga halaga sa binary, mapapansin mo na ang mga piraso ay hindi nagsasapawan (halimbawa + 0b10000000 at - 0b01000000) ito kaya maraming mga key ang maaaring mapindot nang sabay.

Iminumungkahi ko na itayo ang sniffer sa mga materyales na nakalista sa seksyong "test helper", upang maaari mo itong magamit muli sa paglaon upang gayahin ang iyong sasakyan. Ito ay magse-save sa iyo mula sa pagkakaroon ng umupo sa iyong kotse sa buong oras habang itinatayo at sinusubukan mo ang adapter. Maaari mong gamitin ang ibinigay na sketch upang kumilos bilang simulator. Baguhin ang "subsystemId", "data0", at "data1" sa mga halagang na-sniff mo.

Hakbang 2: Pagpapadala ng Mga Utos sa Stereo

Pagpapadala ng Mga Utos sa Stereo
Pagpapadala ng Mga Utos sa Stereo

Bago simulang buuin ang adapter, pinakamahusay na subukan muna kung ang stereo ay maaaring makatanggap ng mga utos.

Mayroon akong isang ekstrang baterya ng kotse, kaya't ikinonekta ko ito ng stereo. Kung mayroon kang isang 12V bench top power source, mas mabuti pa. Sa kasamaang palad hindi ako makahanap ng maraming impormasyon sa online tungkol sa pag-input ng Key1 sa aking unit, kaya't nag-eksperimento ako. Hindi ako labis na nag-aalala tungkol sa pag-burn ng stereo sa puntong ito, dahil ito ay medyo mura, at ito ang aking huling pagtatangka sa kanal upang maisagawa ito sa aking kotse.

Ang stereo ay may isang screen ng pag-aaral ng pag-aaral, kung saan posible na pumili ng isa sa dalawang mga halaga ng paglaban (1K at 3.3K) at upang makita ang halagang "boltahe" (0-255). Ang "Boltahe" ay sinipi dahil nakaliligaw ito. Gumugol ako ng maraming oras sa paglalapat ng iba't ibang mga voltages sa Key1 na walang swerte. Sinubukan ko rin ang paggamit ng iba't ibang mga resistors upang ilapat ang boltahe na walang swerte.

Ang tagumpay ay dumating nang sinubukan kong hawakan ang Key1 wire sa ground ng baterya, na nagresulta sa pagbaba ng "boltahe" sa 0. Ito kasama ng iba't ibang mga resistor ay makakapagdulot ng pare-parehong mga "boltahe" na halaga sa screen ng pag-aaral.

Ngayong alam ko na kung paano magpadala ng mga input sa stereo, kailangan ko ng paraan upang maipadala ang mga ito mula sa isang Arduino. Sa puntong ito hindi ko pa naririnig ang mga multiplexer, na kasama ng ilang mga resistors, ay maaaring maging isang mas mabilis at mas maaasahang solusyon (hindi pa rin ako sigurado kung magagawa ito), kaya gumamit ako ng isang digital potensyomiter. Sa una ay nagkaroon ako ng mga isyu sa paggana ng digital na palayok upang gumana, hanggang sa maisip ko na kailangan kong i-wire ito bilang isang rheostat upang kumilos bilang isang variable risistor sa halip na isang voltner divider. Talaga kailangan kong ikonekta ang mga RH at RW terminal.

Bukod sa paglaban, ang tiyempo ay mahalaga. Kung ang pagbaba ng paglaban ay masyadong maikli, ang utos ay hindi mairehistro. Kung masyadong mahaba ito ay maaaring mairehistro ng maraming beses. Ang isang drop na 240ms, na sinusundan ng isang pagkaantala ng 240ms hanggang sa ang susunod na utos ay nagtrabaho medyo maaasahan para sa aking stereo. Habang parang napakaliit na oras, nangangahulugan ito na maaari kaming magpadala ng maximum na 2 utos bawat segundo, na kapansin-pansin kung sinusubukan mong mabilis na i-on o pababa ang volume. Sinubukan kong maglaro sa paligid ng iba't ibang mga oras at pattern, na kung saan ay nadagdagan ang bilis ngunit hindi masyadong maaasahan. Kung mayroon kang anumang mga ideya sa kung paano mapabuti ito mangyaring iwanan ang mga ito sa mga komento.

Bago magpatuloy sa anumang karagdagang, iminumungkahi ko na bumuo ng isang prototype upang suriin kung ang iyong stereo ay tumatanggap ng parehong uri ng input. Kahit na tumatanggap ito ng iba't ibang mga boltahe ang adapter ay dapat gumana na may bahagyang mga pagbabago sa mga kable at sa Arduino sketch.

Hakbang 3: Pagbuo ng Adapter

Pagbuo ng Adapter
Pagbuo ng Adapter
Pagbuo ng Adapter
Pagbuo ng Adapter
Pagbuo ng Adapter
Pagbuo ng Adapter

Matapos subukan ang lahat ng mga bahagi nang magkahiwalay, at subukan silang magkasama sa isang breadboard, oras na upang bigyan sila ng isang mas permanenteng tahanan. Tumagal ito ng ilang oras sa pagtula ng mga sangkap at paghihinang.

Sa kaliwang tuktok ay ang step down regulator, na nagbabago ng 12V mula sa baterya ng kotse, sa 5V na maaaring magamit ng iba pang mga bahagi.

Sa kaliwang bahagi sa ibaba ay ang module ng CAN bus, na binabasa ang mga halaga mula sa CAN bus network ng kotse at ipasa ang mga ito sa Arduino.

Sa kanang itaas ay ang digital potentiometer (wired bilang isang rheostat) na kumikilos bilang isang variable risistor sa pagitan ng lupa at ng Key1 input ng stereo.

Sa kanang bahagi sa ibaba ay ang Arduino, na gumaganap bilang utak ng adapter, na binabago ang mga mensahe ng CAN bus sa mga resistensya na binabasa ng stereo.

Sa input ng 12V ay isang 150mA fuse, malamang na hindi maprotektahan ang circuit, ngunit nariyan upang maiwasan ang sunog kung sakaling may isang maikling.

Hakbang 4: Ang Software

Ang software
Ang software

Pagkatapos mag-download, ilagay ang lahat ng tatlong.ino file sa isang solong folder. Sa ganoong paraan ang lahat ay magiging bahagi ng parehong sketch at magkakasama na ikakalat sa Arudino.

Kailangan mo ring idagdag ang kinakailangang mga aklatan sa Arduino IDE. Upang magawa ito, i-download ang mga sumusunod na file:

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

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

pagkatapos ay idagdag ang pareho sa kanila sa pamamagitan ng pagpunta sa Sketch> Isama ang Library> Magdagdag ng. Zip Library…

CanBusStereoAdapter.ino

Ginagawa ang pangunahing pag-setup sa file na ito.

Ang mga pangunahing utos na MAAARI ang mga halaga ng bus ay tinukoy sa tuktok. Maliban kung mayroon kang parehong kotse tulad ng sa akin, malamang na ilagay mo ang iyong sariling mga halaga. Maaari mong gamitin ang mga hexadecimal na halaga mula sa sniffer, gumamit ako ng binary kaya mas madaling makita na walang aksidenteng mga overlap sa mga piraso.

Ang lahat ng mga kotse ay walang parehong mga utos ng manibela, kaya huwag mag-atubiling alisin, idagdag, o i-edit ang mga tinukoy na halaga.

Huwag kalimutang palitan ang iyong subsystem id sa "STEERING_ID".

CanBus.ino

Itinatakda ng file na ito ang tagapakinig ng CAN bus, binibigyang kahulugan ang mga packet, at inilalagay ang mga halaga ng paglaban sa isang pabilog na buffer.

Ayusin ang pagsasaayos ng CAN bus sa pagpapaandar na "setupCanBus" upang umangkop sa iyong kotse.

Gumagamit kami ng isang pabilog na buffer dahil, tulad ng nabanggit nang mas maaga, ang input ng utos ng manibela ay mas mabilis kaysa sa input ng stereo. Sa ganitong paraan hindi namin makaligtaan ang anumang mga utos habang ginagawa ng digital potentiometer. Kung nag-input kami ng napakaraming utos ang mga pinakaluma ay itatapon muna, dahil ang mga ito ang hindi gaanong mahalaga. Pinapayagan din kaming hawakan ang kaso kapag ang maraming mga pindutan ay pinindot, dahil ang stereo input ay tumatanggap lamang ng isang solong halaga nang paisa-isa.

Kung binago mo ang anuman sa mga kahulugan ng utos sa "CanBusStereoAdapter.ino" kakailanganin mo ring i-update ang mga ito sa pag-andar na "handleMessageData". Sinusuri ng "handleMessageData" kung ang ibinigay na mga frame ng data ng CAN bus ay naglalaman ng alinman sa mga kilalang utos sa pamamagitan ng paggamit ng kaunting AT operasyon.

Halimbawa, kung pinindot ko ang >> at + nang sabay na magbibigay sa amin ng isang frame ng data na may halagang 0b10010000. >> (para sa aking sasakyan) ay 0b00010000 sa binary, at ang + 0b10000000.

------------- >> ------------ + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 utos | AT 0b00010000 | AT 0b10000000 | AT 0b00001000 resulta | = 0b00010000 | = 0b10000000 | = 0b00000000

Makikita natin dito na ang resulta ng pagpapatakbo AT ay magiging mas malaki sa 0 kung ang utos ay naroroon sa frame ng data. Kaya ang kailangan lang nating gawin ay suriin para sa {data frame} at {halaga ng utos}> 0, para sa bawat utos na tinukoy namin.

Tandaan na ang bawat frame ng data ay naglalaman ng iba't ibang mga utos, kaya't ok kung ang mga halaga ng utos ay pareho, habang sinusuri namin ang mga ito laban sa kanilang sariling mga frame. Sa aking halimbawa kapwa << at ESC parehong may parehong halaga 0b00001000 (0x08), ngunit << ay nasa data0 at ESC sa data1.

Matapos naming matukoy na ang isang utos ay naroroon sa isang frame nagdagdag kami ng isang halaga ng digital na palayok sa paikot na buffer. Ang mga halagang saklaw mula 0 hanggang 99, ngunit napansin ko na ang "boltahe" na binasa ng stereo ay hindi linear kaya subukin ang mga halaga para sa iyong sarili.

DigitalPot.ino

Ang file na ito ay pops halaga mula sa pabilog na buffer at ipadala ang mga ito sa digital na palayok upang maisagawa. Sa aking kaso "pot.setPotMin (false);" ay taasan ang paglaban sa maximum, na kung saan ang stereo ay basahin bilang maximum na "boltahe". Maaaring kailanganin ka ng iyong stereo na itakda ang digital pot sa minimum, kaya't subukan ito.

Hakbang 5: Ang Project Enclosure

Ang Project Enclosure
Ang Project Enclosure

Mayroon akong isang 3D printer kaya't nagpasya akong mag-print ng dalawang bahagi na enclosure para sa aking adapter. Nagsama ako ng isang Fusion 360 file na maaari mong i-edit, at mga file ng gcode na magkakasya sa isang 60x80mm perfboard.

Kung wala kang access sa isang 3D printer, maaari kang gumamit ng isang nakahandang enclosure ng proyekto o isang matibay na lalagyan.

Hakbang 6: Pangwakas na Mga Saloobin

Una kong binalak ang adapter na konektado sa patuloy na lakas at paggising sa ilang mga mensahe sa CAN bus, dahil ang aking kotse ay walang wire na pang-ignition sa stereo compartment. Nagpasya ako kalaunan laban dito dahil hindi ko nais na ipagsapalaran ang pag-ubos ng baterya at pag-aalala tungkol sa adapter habang ako ay malayo sa kotse. Gumamit ako ng splitter ng box ng fuse ng kotse upang magpatakbo ng isang wire ng pag-aapoy at hindi na kumplikado pa ang adapter.

Mula sa aking mga pagsubok ang pagkonsumo ng kuryente ay 20-30 mA. Nakuha ko ito sa 10 mA sa mode ng pagtulog, at maaaring mas mababa pa sa pamamagitan ng pag-alis ng mga LED mula sa mga bahagi, ngunit napagpasyahan kong huwag mag-abala dito dahil tatakbo lamang ito habang tumatakbo ang kotse.

Medyo nasiyahan ako sa resulta ng pagtatapos. Makatwiran ang oras ng pagtugon, at bihirang makaligtaan ang mga utos.

Kahit na ang aking pamumuhunan sa oras ay higit na malaki kaysa sa gastos ng magagamit na komersyal na adapter (na hindi gumana), ang kaalamang nakuha ko ay napakahalaga.

Inirerekumendang: