Índice:

Chaves do volante para o adaptador estéreo do carro (CAN Bus -> Key1): 6 etapas
Chaves do volante para o adaptador estéreo do carro (CAN Bus -> Key1): 6 etapas

Vídeo: Chaves do volante para o adaptador estéreo do carro (CAN Bus -> Key1): 6 etapas

Vídeo: Chaves do volante para o adaptador estéreo do carro (CAN Bus -> Key1): 6 etapas
Vídeo: como instalar uma central multimidia Android 1.8 da China dicas de ligação direta e no pós chave 2024, Julho
Anonim
CAN Bus Sniffing
CAN Bus Sniffing

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

Envio de comandos para o estéreo
Envio de comandos para o estéreo

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

Poucos dias depois de comprar um carro usado, descobri que não consigo reproduzir músicas do meu telefone no aparelho de som do carro. Ainda mais frustrante era que o carro tinha bluetooth, mas só permitia chamadas de voz, não de música. Ele também tinha uma porta USB para Windows Phone, mas não funcionaria com um iPhone sem um dongle de 60 $.

Tendo trocado os aparelhos de som de meus carros anteriores, sem muito pensamento ou pesquisa, encomendei um aparelho de som de 40 $ de substituição de um conhecido site "barato". O aparelho de som veio com uma câmera reversa, Car Play e um monte de recursos extras, o que parecia um valor muito melhor do que o dongle mais caro que só faz uma coisa.

Depois de comprar e pintar um novo painel frontal, imprimir em 3D uma montagem e muito trabalho extra (que poderia ser instrutivo por si só), cheguei a uma descoberta desagradável. Os comandos de tecla do volante foram enviados por meio do barramento CAN, mas o estéreo só tinha uma entrada Key1. Não sendo de desistir no meio do caminho, encomendei um adaptador de 60 libras, que acabou não funcionando. Neste ponto, decidi fazer um adaptador sozinho.

Não sou engenheiro elétrico, tenho apenas conhecimentos rudimentares em eletrônica e esse foi um projeto de aprendizado e exploração para mim. Meu conselho seria primeiro verificar as especificações do veículo e solicitar um rádio compatível, mas se você já estiver preso (como eu estava) siga as instruções por sua própria conta e risco.

Suprimentos

O adaptador (aprox. 15 $)

  • Arduino Pro Mini 5V (ou uma placa compatível)
  • Módulo de barramento CAN MCP2515
  • 60x80mm perfboard
  • Potenciômetro digital X9C104 100K Ohm (depende do seu aparelho de som)
  • Regulador abaixador DC-DC LM2596S 3-40V 3A
  • Porta-fusível do cabo + fusível (100-200 Ohm)
  • Caixa do projeto ou impressora 3D para imprimi-lo
  • Tomadas estéreo para carro (masculino + feminino)
  • Suprimentos de solda, fios, etc.

Auxiliares de teste (não estritamente necessários, mas tornarão o teste muito mais fácil)

  • Arduino (qualquer placa de 5V serve)
  • Módulo de barramento CAN MCP2515
  • Placa de ensaio + jumpers

Etapa 1: CAN Bus Sniffing

Em vez de ter um monte de fios passando pelo interior do seu carro, interconectando vários sistemas, alguns veículos modernos têm pares de fios passando para cada componente. As informações são enviadas como pacotes de dados digitais por meio desses fios, e todos os sistemas podem ler todas as mensagens. Esta é a rede de barramento CAN (pode haver várias redes em seu carro, portanto, todas as informações podem não estar visíveis).

O que queremos fazer é nos conectar à rede de barramento CAN e "farejar" o tráfego de dados. Desta forma, podemos "ver" quando uma tecla do volante é pressionada. Cada pacote possui um ID, que representa o subsistema do veículo que enviou o pacote, e os dados que representam o estado do sistema. Neste caso, estamos tentando encontrar o ID do subsistema que envia as mensagens das teclas do volante e a representação dos dados de cada tecla.

Se você tiver sorte, poderá encontrar os valores para seu carro em algum lugar online e pular esta etapa.

Esse processo é um pouco complicado e já foi explicado em outros lugares, então vou resumir:

  • Encontre os valores corretos para a comunicação do barramento CAN em seu veículo. Para o meu carro (um Fiat Idea 2009) era uma taxa de transmissão de 50KBPS e uma velocidade de clock de 8MHz.
  • Conecte-se à rede de barramento CAN usando o módulo de barramento CAN e um Arduino em uma configuração "sniffer".
  • Leia os valores do barramento CAN em seu laptop usando uma ferramenta como https://github.com/alexandreblin/python-can-monito…. Será muito difícil fazê-lo sem ele, pois muitas mensagens são enviadas mesmo quando o carro não está fazendo nada.
  • Pressione o botão do volante e observe as alterações de valor. Isso pode ser um pouco complicado, pois muitas mensagens são enviadas e pode ser difícil descobrir qual é qual.

Aqui estão dois ótimos artigos que explicam o processo em detalhes:

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

No final, você deve ter o ID do subsistema que usaremos para ouvir apenas as mensagens do barramento CAN do volante e uma lista de valores hexadecimais para os comandos de tecla. No meu caso, os dados eram assim:

ID | ID Hex | Byte 0 | Byte 1 | Botão

--------------------------------------------- 964 | 3C4 | 00 | 00 | Sem botões 964 | 3C4 | 04 00 | SRC 964 | 3C4 | 10 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 Telefone 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 00 | + 964 | 3C4 | 40 00 | - 964 | 3C4 | 00 | 40 Win 964 | 3C4 | 00 | 02 | Up 964 | 3C4 | 00 | 01 | Down 964 | 3C4 | 00 | 04 OK

A ID do subsistema é 3C4 (neste caso), que é um número hexadecimal, portanto, devemos escrevê-lo como 0x3C4 nos esboços do Arduino. Também estamos interessados nos bytes 0 e 1 (no seu caso, pode haver mais bytes). Esses também são valores hexadecimais, portanto, também devem ser escritos com um 0x à esquerda.

Se você converter os valores para binário, notará que os bits não se sobrepõem (por exemplo + 0b10000000 e - 0b01000000), portanto, várias teclas podem ser pressionadas ao mesmo tempo.

Sugiro construir o farejador com os materiais listados na seção "auxiliar de teste", para que você possa reutilizá-lo posteriormente para simular seu carro. Isso evitaria que você tivesse que ficar sentado no carro o tempo todo enquanto constrói e testa o adaptador. Você pode usar o esboço fornecido para atuar como o simulador. Modifique "subsystemId", "data0" e "data1" com os valores que você detectou.

Etapa 2: enviar comandos para o estéreo

Envio de comandos para o estéreo
Envio de comandos para o estéreo

Antes de começar a construir o adaptador, é melhor primeiro testar se o estéreo pode receber comandos.

Eu tinha uma bateria sobressalente de carro, então conectei o aparelho de som diretamente a ela. Se você tiver uma fonte de alimentação de bancada de 12 V, melhor ainda. Infelizmente, não consegui encontrar muitas informações online sobre a entrada Key1 em minha unidade, então recorri à experimentação. Eu não estava muito preocupado em queimar o aparelho de som neste momento, já que é relativamente barato, e esta foi minha última tentativa de fazê-lo funcionar no meu carro.

O estéreo possui uma tela de aprendizado de comandos, onde é possível selecionar um de dois valores de resistência (1K e 3,3K) e visualizar o valor de "tensão" (0-255). "Voltagem" é citada porque é enganosa. Passei muito tempo aplicando tensões diferentes a Key1 sem sorte. Também tentei usar resistores diferentes para aplicar a tensão sem sorte.

A descoberta veio quando tentei tocar o fio Key1 no aterramento da bateria, o que resultou na queda da "tensão" para 0. Isso, em combinação com diferentes resistores, produziria valores de "tensão" consistentes na tela de aprendizado.

Agora que eu sabia como enviar entradas para o estéreo, precisava de uma maneira de enviá-las de um Arduino. Ainda não ouvi falar de multiplexadores, que junto com alguns resistores, podem ter sido uma solução mais rápida e confiável (ainda não tenho certeza se isso é viável), então usei um potenciômetro digital. No início, tive problemas para fazer o potenciômetro digital funcionar, até que descobri que preciso conectá-lo como um reostato para funcionar como um resistor variável em vez de um divisor de tensão. Basicamente, tive que conectar os terminais RH e RW.

Além da resistência, o tempo era crucial. Se a queda da resistência for muito curta, o comando não será registrado. Se for muito longo, ele pode ser registrado várias vezes. Uma queda de 240 ms, seguida por um atraso de 240 ms até o próximo comando funcionou de forma bastante confiável para meu estéreo. Embora pareça muito pouco tempo, significa que podemos enviar no máximo 2 comandos por segundo, o que é perceptível se você estiver tentando aumentar ou diminuir o volume rapidamente. Tentei brincar com diferentes tempos e padrões, o que aumentou a velocidade, mas não era muito confiável. Se você tiver alguma idéia de como melhorar isso, por favor, deixe-a nos comentários.

Antes de prosseguir, sugiro construir um protótipo para verificar se seu aparelho de som aceita o mesmo tipo de entrada. Mesmo que aceite tensões diferentes, o adaptador deve funcionar com pequenas alterações na fiação e no esboço do Arduino.

Etapa 3: Construindo o Adaptador

Construindo o Adaptador
Construindo o Adaptador
Construindo o Adaptador
Construindo o Adaptador
Construindo o Adaptador
Construindo o Adaptador

Depois de testar todos os componentes separadamente e experimentá-los juntos em uma placa de ensaio, era hora de dar a eles um lar mais permanente. Isso levou algumas horas para preparar os componentes e soldar.

No canto superior esquerdo está o regulador abaixador, que transforma 12V da bateria do carro em 5V que pode ser usado pelos outros componentes.

No canto inferior esquerdo está o módulo de barramento CAN, que lê os valores da rede de barramento CAN do carro e os encaminha para o Arduino.

No canto superior direito está o potenciômetro digital (conectado como um reostato) que atua como um resistor variável entre o terra e a entrada Key1 do estéreo.

No canto inferior direito está o Arduino, que atua como o cérebro do adaptador, transformando as mensagens do barramento CAN em resistências que são lidas pelo estéreo.

Na entrada de 12V está um fusível de 150mA, que provavelmente não protegerá o circuito, mas está lá para evitar um incêndio em caso de curto.

Etapa 4: o software

O software
O software

Após o download, coloque todos os três arquivos.ino em uma única pasta. Dessa forma, todos farão parte do mesmo esboço e serão implantados no Arudino juntos.

Você também precisa adicionar as bibliotecas necessárias ao IDE do Arduino. Para fazer isso, baixe os seguintes arquivos:

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

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

em seguida, adicione os dois acessando Sketch> Incluir Biblioteca> Adicionar Biblioteca. Zip …

CanBusStereoAdapter.ino

A configuração básica é executada neste arquivo.

Os valores do barramento CAN do comando de chave são definidos na parte superior. A menos que você tenha o mesmo carro que eu, provavelmente terá que colocar seus próprios valores. Você pode usar os valores hexadecimais do sniffer, usei binários para que seja mais fácil ver que não há sobreposições acidentais nos bits.

Todos os carros não têm os mesmos comandos de volante, então sinta-se à vontade para remover, adicionar ou editar os valores definidos.

Não se esqueça de substituir o id do subsistema em "STEERING_ID".

CanBus.ino

Este arquivo configura o ouvinte do barramento CAN, interpreta os pacotes e coloca os valores de resistência em um buffer circular.

Ajuste a configuração do barramento CAN na função "setupCanBus" para se adequar ao seu carro.

Usamos um buffer circular porque, como mencionado anteriormente, a entrada do comando do volante é muito mais rápida do que a entrada estéreo. Desta forma, não perdemos nenhum comando enquanto o potenciômetro digital está fazendo seu trabalho. Se inserirmos muitos comandos, os mais antigos serão descartados primeiro, pois são os menos importantes. Isso também nos permite lidar com o caso quando vários botões são pressionados, uma vez que a entrada estéreo aceita apenas um único valor por vez.

Se você alterou qualquer uma das definições de comando em "CanBusStereoAdapter.ino", você também precisará atualizá-los na função "handleMessageData". "handleMessageData" verifica se os quadros de dados do barramento CAN fornecidos contêm algum dos comandos conhecidos usando uma operação AND bit a bit.

Por exemplo, se eu tiver pressionado >> e + ao mesmo tempo, isso nos dará um quadro de dados com um valor de 0b10010000. >> (para meu carro) é 0b00010000 em binário e + é 0b10000000.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | Comando 0b10010000 | AND 0b00010000 | AND 0b10000000 | AND 0b00001000 resultado | = 0b00010000 | = 0b10000000 | = 0b00000000

Aqui podemos ver que o resultado da operação AND será maior que 0 se o comando estiver presente no quadro de dados. Portanto, tudo o que temos que fazer é verificar {data frame} & {command value}> 0, para cada comando que definimos.

Lembre-se de que cada quadro de dados contém comandos diferentes, portanto, não há problema se os valores do comando forem iguais, pois estamos verificando-os em relação aos seus próprios quadros. No meu exemplo, << e ESC têm o mesmo valor 0b00001000 (0x08), mas << está em data0 e ESC em data1.

Depois de determinar que um comando está presente em um quadro, adicionamos um valor de potenciômetro digital ao buffer circular. Os valores variam de 0 a 99, mas notei que a "voltagem" lida pelo aparelho de som não é linear, então teste os valores você mesmo.

DigitalPot.ino

Este arquivo retira valores do buffer circular e os envia para o potenciômetro digital para execução. No meu caso "pot.setPotMin (false);" aumentará a resistência ao máximo, que o estéreo lerá como "voltagem" máxima. Seu aparelho de som pode exigir que você defina o potenciômetro digital para o mínimo, então teste-o.

Etapa 5: O Gabinete do Projeto

O Gabinete do Projeto
O Gabinete do Projeto

Eu tenho uma impressora 3D, então decidi imprimir um invólucro de duas partes para o meu adaptador. Incluí um arquivo Fusion 360 que você pode editar e arquivos gcode que cabem em um perfboard de 60x80mm.

Se você não tiver acesso a uma impressora 3D, pode usar um gabinete de projeto pronto ou um contêiner resistente.

Etapa 6: Considerações Finais

Inicialmente, planejei que o adaptador fosse conectado à alimentação constante e acordado com certas mensagens do barramento CAN, já que meu carro não tem um fio de ignição no compartimento do estéreo. Mais tarde, decidi não fazer isso, pois não queria correr o risco de descarregar a bateria e me preocupar com o adaptador enquanto estivesse fora do carro. Usei um divisor de caixa de fusíveis de carro para ligar um fio de ignição e não ter que complicar ainda mais o adaptador.

Em meus testes, o consumo de energia é de 20-30 mA. Baixei para 10 mA em modo de espera e poderia diminuir ainda mais removendo os LEDs dos componentes, mas decidi não me preocupar com isso, pois só funcionará enquanto o carro estiver funcionando.

Estou muito satisfeito com o resultado final. O tempo de resposta é razoável e raramente perde comandos.

Embora meu investimento de tempo tenha sido muito maior do que o custo do adaptador disponível comercialmente (que não funcionou), o conhecimento que adquiri é inestimável.

Recomendado: