Como adicionei funções ao carro via CAN, não consigo programar



O objetivo deste artigo é falar sobre minha experiência com modificações de carros e experimentos com o barramento CAN.

Como tudo começou


Primeiro, decidi adicionar uma câmera frontal ao meu Chevrolet Cruze 2017. Como o carro já possui uma câmera de visão traseira de fábrica, em um nível alto, foi necessário descobrir duas coisas:

  1. A maneira de transferir vídeo da câmera frontal, que adicionarei.
  2. Um método para exibir fotos de uma câmera de visão traseira a qualquer momento.

A parte do vídeo foi simples. Por experiência anterior, eu sabia que você pode fazer um mixer de vídeo em um relé.

A partida na tela acabou sendo mais complicada e, após alguma investigação, cheguei à conclusão de que o carro deveria enviar um sinal da câmera de visão traseira para a tela através de algum tipo de barramento de dados.

Barramento CAN


A Chevrolet tem dois barramentos de dados diferentes. O primeiro é o CAN padrão, rápido (500 Kbps) e confiável, usado para dados críticos. O segundo é o que a GM chama de LAN (GMLAN), um barramento mais antigo e mais lento (33,3 Kbps) usado para dados que não são de segurança.

Eu precisava de uma maneira de ouvir o tráfego no CAN, ou seja, um sniffer. O dispositivo PCAN é incrivelmente útil para esse fim.


Pico pode

O Peak Can (PCAN) é um dispositivo USB capaz de interceptar e transmitir mensagens. Graças ao software Pcan View, você pode começar sem muito treinamento.

Como a câmera de visão traseira é menos importante para a segurança do que outros componentes, sugeri que os dados que você está procurando provavelmente estejam no barramento GMLAN.

O ponto de acesso mais fácil é o conector OBD2. Conectei o Peak Can ao barramento GMLAN, iniciei o software e imediatamente ouvi o tráfego.

Integração


O objetivo era fazer a engenharia reversa da chamada da câmera de visão traseira. Para fazer isso, com o farejador ligado, inverti o carro para que ele ligasse a tela e tentei estacionar várias vezes. Durante todo esse processo, notei um único ID com mensagens que imitavam sequencialmente minhas ações.

Depois estacionei e, através do Pcan View, tentei transmitir a mesma mensagem que vi quando a tela foi ligada e desligada. Em um piscar de olhos, eu já estava interagindo com o ônibus.


Passagem de mensagem PCAN

No entanto, eu não planejava viajar constantemente com um laptop. O que era necessário era uma maneira de automatizar essas funções - e aqui o Arduino foi útil. A capacidade de receber diretamente 12V de energia em combinação com um grande número de recursos e suporte na Internet tornou essa escolha óbvia.

Além do Arduino, eu precisava de dois componentes para concluir o projeto: o módulo CAN e o módulo de relé. Em essência, o Arduino é o cérebro que executa e executa código. O módulo CAN oferece a capacidade de interagir com o barramento de dados, e o relé fornece energia à câmera frontal e também atua como um mixer de vídeo entre ela e a câmera de visão traseira.


Módulo Mcp2515 (superior), Arduino Uno (central), módulo de relé (inferior)

Depois de adicionar e configurar as bibliotecas apropriadas, o Arduino fez uma conexão com o carro.


Ouvindo o tráfego através do Arduino

Como eu já sabia que poderia iniciar a exibição, comecei a pensar em COMO fazer isso. A idéia inicial era instalar um botão de chamada instantânea especial no painel, mas comecei a pensar: "O que mais posso usar na rede como gatilho?"

Durante os experimentos, descobri que as mensagens com o ID correspondente ao botão "Cancelar controle de cruzeiro" também são transmitidas pelo barramento GMLAN. Isso foi ideal porque o controle de cruzeiro é ativado a velocidades acima de 65 km / h quando uso a câmera frontal e a velocidades abaixo de 15 km / h a câmera de visão traseira liga para ajudar no estacionamento, para que nunca sobrepor. Depois de escrever um código, consegui que o Arduino reconhecesse quando o botão Cancelar controle de cruzeiro é pressionado.


Reconhecimento de clique único

No entanto, não queria que a câmera fosse ativada toda vez que cancelasse o controle de cruzeiro, então decidi que a melhor abordagem é transformá-lo (de fato) em um botão multifuncional. A câmera é ativada apenas se o botão for "pressionado duas vezes".

Após um longo fim de semana explorando a função millis e depurando o código, programei com êxito o reconhecimento de toque duplo.


Reconhecimento de toque duplo

E quando vinculei às minhas equipes o controle da exibição, obtive uma utilidade bastante interessante.


Toque duas vezes + comandos

Funcionalidade


Agora tive a oportunidade de ligar e desligar a tela, mas havia um problema - e a câmera de visão traseira? Eu precisava que eles trabalhassem em conjunto com a câmera frontal, como se tivessem sido montadas assim na fábrica.

No fluxograma, descrevi como o represento.



Eu rapidamente percebi que, para um sistema assim, você precisa conhecer o estado de três variáveis ​​a qualquer momento:

  • Módulo da câmera frontal: o motorista ligou ou desligou?
  • Visor da câmera: a imagem está ligada ou desligada?
  • Reverso: carro em ré ou não?

Sem experiência em programação, era muito difícil, e todo o meu tempo livre eu pensava em diferentes abordagens.

No final, eu consegui!


Monitoramento ativo

Agora eu era capaz de implementar a lógica operacional que controla o relé.


Controle de relé

Durante todo o processo, aprendi mais sobre o Arduino e notei que a versão Nano é capaz de fazer tudo o que você precisa, embora tenha um tamanho menor e preço mais baixo. É ideal para instalação permanente em um carro. Desenvolvi um modelo e imprimi um estojo em uma impressora 3D para colocar os componentes como uma unidade compacta para instalação.


Caso 3D



Todos juntos


Finalmente chegou o dia em que vi os resultados. Embora você ainda precise mexer no tempo, foi bom ver que o módulo funciona corretamente.


Ligar / desligar o modo de estacionamento, ligar / desligar a câmera frontal, alternar automaticamente para a câmera de visão traseira e voltar automaticamente

Em geral, essa experiência me ensinou muito e abriu meus olhos para a possibilidade de integração direta com o barramento CAN. É bastante surpreendente o que pode ser alcançado conectando-se em dois fios.

No futuro


No futuro, pretendo escrever um tutorial detalhado sobre como adicionar funcionalidades adicionais aos botões existentes no seu carro usando componentes e software gratuitos.

Source: https://habr.com/ru/post/pt451294/


All Articles