Taula de continguts:

Claus del volant a l’adaptador estèreo del cotxe (Bus CAN -> Clau1): 6 passos
Claus del volant a l’adaptador estèreo del cotxe (Bus CAN -> Clau1): 6 passos

Vídeo: Claus del volant a l’adaptador estèreo del cotxe (Bus CAN -> Clau1): 6 passos

Vídeo: Claus del volant a l’adaptador estèreo del cotxe (Bus CAN -> Clau1): 6 passos
Vídeo: Como hacer Drift en Gran Turismo 7 con volante | Nivel Básico. #gt7 #granturismo7 #tutorial 2024, Desembre
Anonim
CAN Bus Sniffing
CAN Bus Sniffing

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

S'estan enviant ordres a l'estèreo
S'estan enviant ordres a l'estèreo

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

Pocs dies després de comprar un cotxe usat, vaig descobrir que no podia reproduir música des del telèfon a través del equip de música del cotxe. Encara més frustrant va ser que el cotxe disposés de Bluetooth, però només permetia trucades de veu, no música. També tenia un port USB de Windows Phone, però no funcionaria amb un iPhone sense un dongle de 60 $.

Després d'haver substituït els equips de música dels meus cotxes anteriors, sense pensar-hi ni investigar-hi gaire, vaig demanar un equip de música de recanvi de 40 $ a un conegut lloc web "barat". L’aparell estèreo venia amb una càmera de marxa enrere, Car Play i un munt de funcions addicionals, que semblaven un valor molt millor que el dongle més car que només fa una cosa.

Després de comprar i pintar una nova placa frontal, imprimir en 3D un muntatge i un munt de treballs addicionals (que podrien ser instructius per si sols), vaig arribar a un descobriment desagradable. Les ordres de les tecles del volant s’enviaven mitjançant el bus CAN, però l’estèreo només tenia una entrada Key1. En no ser un de desistir a mitja via, vaig demanar un adaptador de 60 lliures, que va resultar no funcionar. En aquest moment vaig decidir fabricar jo mateix un adaptador.

No sóc enginyer elèctric, només tinc coneixements rudimentaris d’electrònica i aquest va ser un projecte d’aprenentatge i exploració per a mi. El meu consell seria comprovar primer les especificacions del vehicle i demanar una ràdio compatible, però si ja esteu encallat (tal com ho era), seguiu les instruccions sota el vostre propi risc.

Subministraments

L'adaptador (aprox. 15 $)

  • Arduino Pro Mini 5V (o una placa compatible)
  • Mòdul de bus CAN MCP2515
  • Tauler perfet de 60x80mm
  • Potenciòmetre digital X9C104 100K Ohm (depèn del vostre equip estèreo)
  • Regulador de pas DC-DC LM2596S 3-40V 3A
  • Portafusibles de cable + fusible (100-200 Ohm)
  • Caixa d'impressió o impressora 3D per imprimir-la
  • Preses estèreo del cotxe (masculí + femení)
  • Subministraments de soldadura, cables, etc.

Ajudants de proves (no són estrictament necessaris, però facilitaran les proves)

  • Arduino (qualsevol placa de 5V ho farà)
  • Mòdul de bus CAN MCP2515
  • Taula de pa + ponts

Pas 1: CAN Bus Sniffing

En lloc de fer passar un munt de cables per l'interior del cotxe interconnectant un munt de sistemes, alguns vehicles moderns tenen parells de cables que passen a cada component. La informació s’envia com a paquets de dades digitals a través d’aquests cables i tots els sistemes poden llegir tots els missatges. Es tracta de la xarxa de bus CAN (al vostre cotxe hi pot haver diverses xarxes, de manera que tota la informació pot no ser visible).

El que volem fer és connectar-nos a la xarxa de bus CAN i "ensumar" el trànsit de dades. D'aquesta manera podem "veure" quan es prem una tecla del volant. Cada paquet té un identificador, que representa el subsistema del vehicle que va enviar el paquet, i les dades que representen l'estat del sistema. En aquest cas, intentem trobar la identificació del subsistema que envia els missatges de la clau del volant i la representació de dades de cada clau.

Si teniu sort, podeu trobar els valors del vostre cotxe en algun lloc en línia i podeu ometre aquest pas.

Aquest procés està una mica implicat i ja s'ha explicat en altres llocs, així que només el resumiré:

  • Cerqueu els valors correctes per a la comunicació del bus CAN al vostre vehicle. Per al meu cotxe (un Fiat Idea del 2009), tenia una velocitat de transmissió de 50 KB i una velocitat de rellotge de 8 MHz.
  • Connecteu-vos a la xarxa de bus CAN mitjançant el mòdul de bus CAN i un Arduino en una configuració "sniffer".
  • Llegiu els valors del bus CAN al vostre ordinador portàtil mitjançant una eina com https://github.com/alexandreblin/python-can-monito…. Serà molt difícil fer-ho sense ell, ja que s’envien molts missatges fins i tot quan el cotxe no fa res.
  • Premeu el botó del volant i observeu els canvis de valor. Això pot ser una mica complicat, ja que s’envien molts missatges i pot ser difícil esbrinar quin és quin.

Aquí hi ha dos grans articles que expliquen en profunditat el procés:

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

Al final, haureu de tenir l’identificador del subsistema que utilitzarem per escoltar només els missatges del bus CAN del volant i una llista de valors hexadecimals per a les ordres de les tecles. En el meu cas, les dades eren així:

Identificació | ID Hex | Byte 0 | Byte 1 | Botó

--------------------------------------------- 964 | 3C4 | 00 | 00 | Sense botons 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Telèfon 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Guanya 964 | 3C4 | 00 | 02 | Pujar 964 | 3C4 | 00 | 01 | Baixada 964 | 3C4 | 00 | 04 | D'acord

L'identificador del subsistema és 3C4 (en aquest cas), que és un nombre hexadecimal, de manera que hauríem d'escriure'l com 0x3C4 als esbossos d'Arduino. També ens interessen els bytes 0 i 1 (en el vostre cas pot ser que hi hagi més bytes). Aquests també són valors hexadecimals, de manera que també s’han d’escriure amb un 0x inicial.

Si converteix els valors en binaris, notareu que els bits no es superposen (per exemple, + 0b10000000 i - 0b01000000), de manera que es poden prémer diverses tecles alhora.

Us recomano construir el sniffer amb els materials que apareixen a la secció "ajudant de proves", de manera que pugueu tornar a utilitzar-lo més tard per simular el vostre cotxe. Això us estalviaria d'haver de seure al cotxe tot el temps mentre esteu construint i provant l'adaptador. Podeu utilitzar l'esbós proporcionat per actuar com a simulador. Modifiqueu "subsystemId", "data0" i "data1" amb els valors que heu detectat.

Pas 2: enviant ordres a l'estèreo

S'estan enviant ordres a l'estèreo
S'estan enviant ordres a l'estèreo

Abans de començar a construir l'adaptador, és millor provar primer si l'estèreo pot rebre ordres.

Tenia una bateria de recanvi per al cotxe, de manera que hi vaig connectar l'estèreo directament. Si teniu una font d’alimentació de banc de 12V, encara millor. Malauradament, no vaig poder trobar molta informació en línia sobre l'entrada Key1 a la meva unitat, així que vaig recórrer a l'experimentació. En aquest moment no em preocupava excessivament cremar l'estèreo, ja que és relativament barat i aquest va ser el meu darrer intent de fer funcionar amb el meu cotxe.

L'estèreo té una pantalla d'aprenentatge d'ordres, on és possible seleccionar un dels dos valors de resistència (1K i 3,3K) i veure el valor de "voltatge" (0-255). Es cita "Voltage" perquè és enganyós. Vaig passar molt de temps aplicant diferents tensions a Key1 sense sort. També vaig intentar utilitzar diferents resistències per aplicar la tensió sense sort.

L’avenç es va produir quan vaig intentar tocar el cable Key1 a la terra de la bateria, cosa que va provocar que el “voltatge” baixés a 0. Això, en combinació amb diferents resistències, produiria valors de “voltatge” constants a la pantalla d’aprenentatge.

Ara que sabia com enviar entrades a l'estèreo, necessitava una manera d'enviar-les des d'un Arduino. En aquest moment no he sentit parlar de multiplexors, que juntament amb algunes resistències, podrien haver estat una solució més ràpida i fiable (encara no estic segur de si és factible), així que he utilitzat un potenciòmetre digital. Al principi vaig tenir problemes perquè el pot digital funcionés, fins que vaig descobrir que necessitava connectar-lo com a reòstat per actuar com una resistència variable en lloc d’un divisor de tensió. Bàsicament havia de connectar els terminals RH i RW.

A més de la resistència, el temps era crucial. Si la caiguda de resistència és massa curta, l'ordre no es registrarà. Si és massa llarg, es pot registrar diverses vegades. Una caiguda de 240 ms, seguida d’un retard de 240 ms fins que la següent ordre funcionés bastant fiable per al meu equip estèreo. Tot i que sembla molt poc temps, vol dir que podem enviar un màxim de 2 ordres per segon, cosa que es nota si intenteu pujar o baixar ràpidament el volum. Vaig intentar jugar amb diferents temps i patrons, cosa que augmentava la velocitat però no era molt fiable. Si teniu alguna idea sobre com millorar això, deixeu-los als comentaris.

Abans de continuar, us suggereixo crear un prototip per comprovar si el vostre equip estèreo accepta el mateix tipus d’entrada. Fins i tot si accepta diferents tensions, l'adaptador hauria de funcionar amb lleugeres alteracions en el cablejat i l'esbós Arduino.

Pas 3: construcció de l'adaptador

Construint l'adaptador
Construint l'adaptador
Construint l'adaptador
Construint l'adaptador
Construint l'adaptador
Construint l'adaptador

Després de provar tots els components per separat i provar-los junts en un tauler, era el moment de donar-los una casa més permanent. Això va suposar unes quantes hores de distribució de components i soldadura.

A la part superior esquerra hi ha el regulador de baixada, que transforma 12V de la bateria del cotxe a 5V que poden utilitzar els altres components.

A la part inferior esquerra hi ha el mòdul de bus CAN, que llegeix els valors de la xarxa de bus CAN del cotxe i els reenvia a l’Arduino.

A la part superior dreta hi ha el potenciòmetre digital (cablejat com a reòstat) que actua com a resistència variable entre el sòl i l’entrada Key1 de l’estèreo.

A la part inferior dreta hi ha l’Arduino, que actua com a cervell de l’adaptador, transformant els missatges del bus CAN en resistències que són llegides per l’estèreo.

A l’entrada de 12V hi ha un fusible de 150 mA, que probablement no protegirà el circuit, però hi ha per prevenir un incendi en cas de curtcircuit.

Pas 4: el programari

El programari
El programari

Després de descarregar-los, poseu els tres fitxers.ino en una única carpeta. D'aquesta manera, tots formaran part del mateix esbós i es desplegaran junts a l'Arudino.

També heu d’afegir les biblioteques necessàries a l’IDE Arduino. Per fer-ho, descarregueu els fitxers següents:

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

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

a continuació, afegiu-los tots dos a Sketch> Inclou biblioteca> Afegeix biblioteca. Zip …

CanBusStereoAdapter.ino

La configuració bàsica es realitza en aquest fitxer.

Els valors del bus CAN d'ordre clau es defineixen a la part superior. Llevat que tingueu el mateix cotxe que jo, és probable que hagueu de posar els vostres propis valors. Podeu utilitzar els valors hexadecimals del sniffer, he utilitzat binari, de manera que és més fàcil veure que no hi ha superposicions accidentals als bits.

Tots els cotxes no tenen les mateixes ordres al volant, així que no dubteu a eliminar, afegir o editar els valors definits.

No oblideu substituir el vostre identificador de subsistema a "STEERING_ID".

CanBus.ino

Aquest fitxer configura l’oient del bus CAN, interpreta els paquets i posa els valors de resistència en un buffer circular.

Ajusteu la configuració del bus CAN a la funció "setupCanBus" per adaptar-la al vostre cotxe.

Utilitzem un buffer circular perquè, com s’ha esmentat anteriorment, l’entrada d’ordres del volant és molt més ràpida que l’entrada estèreo. D’aquesta manera no ens perdem cap ordre mentre el potenciòmetre digital fa el que pot fer. Si introduïm massa ordres, les més antigues es descartaran primer, ja que són les menys importants. Això també ens permet gestionar el cas quan es premen diversos botons, ja que l'entrada estèreo només accepta un valor únic alhora.

Si heu canviat alguna de les definicions d'ordres a "CanBusStereoAdapter.ino", també haureu d'actualitzar-les a la funció "handleMessageData". "handleMessageData" comprova si els marcs de dades del bus CAN proporcionats contenen alguna de les ordres conegudes mitjançant una operació AND de bits.

Per exemple, si he premut >> i + al mateix temps, ens donarà un marc de dades amb un valor de 0b10010000. >> (per al meu cotxe) és 0b00010000 en binari i + és 0b10000000.

--------------- >> -------------- + ------------- << --- - dades0 | 0b10010000 | 0b10010000 | 0b10010000 ordre | I 0b00010000 | I 0b10000000 | I resultat 0b00001000 | = 0b00010000 | = 0b10000000 | = 0b00000000

Aquí podem veure que el resultat de l'operació AND serà superior a 0 si l'ordre està present al marc de dades. Per tant, tot el que hem de fer és comprovar si hi ha {data frame} i {value value}> 0 per a cada ordre que hem definit.

Tingueu en compte que cada marc de dades conté ordres diferents, de manera que està bé si els valors de les ordres són els mateixos, ja que els estem comprovant amb els seus propis marcs. Al meu exemple, << i ESC tenen el mateix valor 0b00001000 (0x08), però << es troba a data0 i ESC a data1.

Després d'haver determinat que hi ha una ordre en un marc, afegim un valor digital de pot al buffer circular. Els valors oscil·len entre 0 i 99, però he notat que la "tensió" que llegeix l'estèreo no és lineal, així que proveu els valors per vosaltres mateixos.

DigitalPot.ino

Aquest fitxer treu valors del buffer circular i els envia a l'olla digital per executar-los. En el meu cas "pot.setPotMin (false);" augmentarà la resistència al màxim, que l'estèreo es llegirà com a "tensió" màxima. És possible que el vostre equip estèreo requereixi que configureu el pot digital al mínim, així que proveu-lo.

Pas 5: el recinte del projecte

El recinte del projecte
El recinte del projecte

Tinc una impressora 3D, així que vaig decidir imprimir un recinte de dues parts per al meu adaptador. He inclòs un fitxer Fusion 360 que podeu editar i fitxers gcode que s'adapten a un perfboard de 60x80mm.

Si no teniu accés a una impressora 3D, podeu utilitzar un recinte de projecte ja fet o un contenidor robust.

Pas 6: Pensaments finals

Inicialment vaig planejar que l'adaptador es connectés a una alimentació constant i em despertés en determinats missatges del bus CAN, ja que el meu cotxe no té un cable d'encesa al compartiment estèreo. Més tard vaig decidir-me en contra, ja que no volia arriscar-me a esgotar la bateria i a preocupar-me de l’adaptador mentre estic fora del cotxe. Vaig utilitzar un divisor de caixes de fusibles per a cotxe per fer funcionar un cable d’encesa i no haver de complicar més l’adaptador.

Segons les meves proves, el consum d'energia és de 20-30 mA. Vaig baixar a 10 mA en mode de repòs i podria baixar encara més traient els LED dels components, però vaig decidir no molestar-me, ja que només funcionarà mentre el cotxe està en marxa.

Estic força satisfet amb el resultat final. El temps de resposta és raonable i poques vegades faltan ordres.

Tot i que la meva inversió en temps era molt superior al cost de l'adaptador disponible comercialment (que no funcionava), el coneixement que vaig obtenir és inestimable.

Recomanat: