Este projeto começou quando decidi atualizar meu volante para que ele atendesse aos meus requisitos pessoais de direção sim, algo que representava a experiência de dirigir com realismo e sem frescuras .
Mas, tendo dito isso, deve funcionar com qualquer base e console compatível com o Thrustmaster , pois está emulando o volante F1.
Definei meus objetivos altos e fiz uma lista de coisas que eu queria que o volante aparecesse.
O volante Steerig deve apresentar todos os botões disponíveis no controlador PlayStation DualShock 4
Eu queria incluir uma exibição para configurações relacionadas ao volante (e possivelmente atualizações futuras)
Codificadores rotativos para acesso rápido às funções de direção necessárias (balanço do freio, controle de abdominais e tração)
Eu também queria incluir um botão de ação combinado personalizado (CAB) que me permitisse aumentar ou diminuir - com um único clique - qualquer uma das funções acima uma quantidade X de vezes.
Como não tenho acesso imediato a uma impressora 3D ou a uma máquina CNC, decidi ir com um dos designs do 3DRAP. Com a ajuda de Antonio, projetamos uma nova versão da roda atual que eles têm em estoque e que corresponde ao meu design abaixo.
Assista a uma rápida demonstração de vídeo da roda em ação.
Os adesivos foram impressos usando um jato de tinta padrão em uma folha de adesivos A4 e, em seguida, coberto com fita de embalagem transparente.
Faça o download da ficha de adesivos aqui (PDF).
A coisa mais importante a lembrar com o hardware é que a base da Thrustmaster alimenta seu volante com ~ 3.5V. Tudo o que você usa deve ser capaz de executar nessa tensão.
Desde o início, a idéia era construir isso em torno de um conselho do Arduino Nano . Já tive experiência anterior com esta plataforma e o fato de ter encontrado alguns pontos de partida na Internet facilitou essa decisão.
Em seguida foi a tela. Eu só queria a tela como um meio para visualizar e editar configurações na roda Itslef, não conectar ou visualizar a telemetria. Portanto, um LCD retroiluminado de 16x2 simples seria suficiente. Para manter o GPIO's Limited, também adicionei uma mochila I 2 C.
Os codificadores rotativos foram um pouco de problema, pois o Arduono Nano não suporta muitos GPIOs. No final do dia, fui com três placas DUPPPANET I 2 C Rotary Encoder Mini v2.1. Eles funcionam muito bem, nunca perdem um sucesso e exigem apenas 3 GPIO.
Finalmente, para os interruptores rotativos, usei dois mini interruptores rotativos de 8 vias, cada um dirigindo um único GPIO analógico, reduzindo ainda mais os GPIOs necessários. A ideia é bem simples e você pode descobrir mais aqui.
Eu precisava de 22 botões para executar todos os funções que planejei. Eu os adquiri de vários fornecedores on -line, sem nenhum determinado para mencionar. A maioria dos botões é simples (ON)-OFF Switches, com exceção das atividades (ON) -OFF- (ON). Para os shifters de paddle 3drap.it fornece microvóia pesados que se encaixam aconchegando no gabinete.
? Aqui está a lista completa do hardware que usei.
Foi aqui que recebi muita ajuda da comunidade (por favor, veja os créditos abaixo). Fiz minha pesquisa e descobri que muitas pessoas estavam fazendo coisas semelhantes, mas não da maneira que eu queria que meu volante trabalhasse. Então, entrei em contato com alguns deles, recebi algumas idéias e comecei a construir minha própria versão.
Meu ponto de partida foi este post da Taras, onde recebi os guias básicos de conexão de hardware e software para o T300. Este também foi o primeiro post que li que me levou a essa jornada. Taras tem sido uma imensa ajuda, pois está respondendo a todas as minhas perguntas técnicas.
Depois disso, encontrei o Thrustmaster F1 Bits e bytes de engenharia reversa em um projeto de Bram Harmsen, que inclui os botões L3 e R3, que por sua vez geralmente não estão disponíveis em nenhum outro volante. Tendo todas as informações necessárias para replicar todas as ações, comecei a montar tudo.
Não vou entrar em muitos detalhes nesse código aqui, mas você pode vê -lo no repositório. Eu adicionei o maior número possível de comentários.
? Veja os arquivos de esboço do Arduino
A roda se comporta muito como qualquer outra roda no mercado. Emula todos os botões do controlador PlayStation DualShock 4. As principais diferenças são a matriz do botão , o menu de exibição , os codificadores rotativos e os interruptores rotativos (funções da cabine).
Em nome de salvar os GPIOs no Nano, criei uma matriz de botão de 5x5 para suportar os 22 botões necessários para o meu design (sim, tenho 3 para sobrar!).
? Aste aqui está a matriz do botão .
Havia alguns motivos pelos quais eu queria uma exibição. Primeiro, eu precisava de uma maneira de alterar as configurações da roda sem a necessidade de conectá -la a um computador. Segundo, também achei bom ter um relógio para exibir o horário e a data do mundo real. Terceiro, a tela pode ser usada em atualizações futuras para exibir telemetria ... (mas nada planejado ainda). E, finalmente, parece legal.
A tela é controlada pelos três botões de exibição:
Menu: Abra/feche o menu da roda
Próximo: role pelo menu
Selecione: Selecione uma opção
Exibir opções de menu:
Modo da roda: defina o modo da roda, dependendo da plataforma em que você está tocando:
PS - Modo PlayStation (PS)
PC - Modo Avançado (PC)
Disp. Modo: Defina o modo da exibição quando o KeyPress de exibição estiver ligado. Toda vez que você pressiona um botão, ele exibe sua função:
PS - Pressionar qualquer botão exibe a função do botão PlayStation (cruzado, triângulo, L2, R2, ... etc)
GT - Pressionar qualquer botão exibe o mapeamento do botão do simulador de acordo com minhas preferências pessoais (limitador de poço, HUD, limpadores, ... etc)
Keypress: mostre o botão KeyPress no visor
Data/hora: mostre ou oculte a data e a hora na tela inicial
Caminhante - ligue ou desative a campainha
Hora chirp - Sim, também pode apitar cada hora para acompanhar o tempo que você gasta no Simuator
Exibir - desligue a tela (qualquer botão de exibição o gira novamente)
Tempo de execução - exiba o tempo desde que o volante foi inicializado, para que você saiba quanto tempo ele está funcionando
Os codificadores rotativos permitem acesso rápido aos ajustes do balanço do freio , ABS e controle de tração durante a condução. Os codificadores rotativos são legais porque você pode ajustar rapidamente as configurações sem precisar se distrair com os menus da tela etc.
Os codificadores rotativos foram mapeados da seguinte forma:
Descrição | Podridão esquerda. (-) | Podridão direita. (+) |
---|---|---|
Balanço de freio (BB) | D-pad para baixo | D-pad |
Sistema de frenagem antilock (ABS) | L3 | R3 |
Controle de tração (TC) | D-pad à esquerda | D-pad à direita |
Descrição | Podridão esquerda. (-) | Podridão direita. (+) |
---|---|---|
Balanço de freio (BB) | Abaixo | Acima |
Sistema de frenagem antilock (ABS) | 20 | 21 |
Controle de tração (TC) | Esquerda | Certo |
? Aqui está o mapa das ligações de controle que apliquei no Assetto Corsa Competizione para ambas as plataformas.
Isso é algo em que pensei ao assistir a um vídeo em que Nico Rosberg estava explicando como você precisa mudar o equilíbrio do freio da frente para a parte traseira e traseira várias vezes em uma única volta para otimizar sua direção. É claro que você pode usar os codificadores rotativos, mas não pode ser mais preciso, especialmente com o feedback da força no seu volante.
A idéia é criar um conjunto de botões que possam replicar os cliques de Mutliple, dependendo de suas preferências. Usando os interruptores rotativos, você pode definir rapidamente os parâmetros:
Modo de táxi: seleciona a função que você deseja replicar (BB, ABS, TC)
Etapas da cabine: selecione o número de vezes que deseja pressionar o botão (1x-8x)
CAB -/+: Ao selecionar o botão CAB -/+, ele será executado em suas preferências selecionadas
Eu queria manter as coisas o mais compactas possível, para que uma placa personalizada fosse necessária. Eu também queria que as coisas fossem removíveis e intercambiáveis, caso haja falha no futuro. Minha intenção era criar uma PCB impressa personalizada, mas realmente não fazia sentido neste momento (talvez em uma atualização?). A placa final é composta por um perfho de 5x7cm e eu usei um fio de núcleo sólido para fazer as conexões.
Embora minha primeira tentativa (V1) tenha funcionado perfeitamente, não era tão compacto quanto eu gostaria. De fato, não se encaixava no gabinete de direção. Eu redesenhei as faixas e reconstruí uma segunda versão (V2) usando conectores masculinos de DuPont angular, economizando muito espaço devido a uma altura limitada.
? Dê uma olhada no layout e placa final do diagrama .
Se você tem tudo com fio e conectado à medida que o diagrama mostra, provavelmente estará pronto para usar o volante.
Para compilar o esboço do Arduino, você precisará instalar estas bibliotecas:
EEPROM.H - Biblioteca EEPROM para armazenar configurações
LiquidCrystal_i2c.h - Liquid Crystal Display I 2 C Biblioteca
i2cencoderminilib.h - Codificador de roto I 2 c biblioteca
Timelib.h - Biblioteca do tempo
DS1307RTC.H - Biblioteca RTC DS1307
Siga as instruções da biblioteca sobre como configurar a hora atual no RTC.
Siga as instruções da biblioteca sobre como alterar o endereço de cada uma das placas do codificador rotativo. Eu os defini da seguinte maneira:
BB (balanço do freio): 0x20
ABS (Sistema de frenagem Antilock): 0x21
TC (controle de tração): 0x22
A única coisa que pode precisar de ajustes são os valores do interruptor rotativo, uma vez que os valores retornados dependem da tensão fornecida. Defina o DEBUG_ROTARY_SWITCHES
como true
e o LCD exibirá os valores atuais de ambos os switches. Faça uma anotação desses números e atualize -os no arquivo de esboço t300_functions
, em funções getCABMode()
e getCABSteps()
.
Eu adicionei um monitor de desempenho embutido. Você precisará definir DEBUG_LATENCY
como true
e abrir o monitor serial (115200 baud). Depois de carregado, você verá um relatório em tempo real sobre a latência atual do loop.
A primeira versão de software teve alguns problemas, sendo a latência a maior. De vez em quando, um clique de botão seria perdido, que durante uma corrida isso significava uma falha de ignição em uma mudança de marchas ou em uma marcha reduzida. Isso compensou um desempenho ruim.
Depois de executar os testes, descobri que um único loop funcionava em cerca de 2800ms com um eventual soluço a cada segundo a cerca de 106000ms. Era muito que algo estivesse produzindo algum tipo de atraso. Eu finalmente otimizei o código para os codificadores rotativos e o relógio (RTC).
Como a tela não adiciona muito à experiência de condução, você pode optar por desligá-lo enquanto dirige há muito tempo pressionando o interruptor rotativo do ABS.
A versão atual funciona perfeitamente e eu não notei nenhum erro de ignição durante as corridas.
Um pequeno espaço para reconhecer o trabalho realizado anteriormente por outros.
Taras Ivaniukovich https://rr-m.org/blog/ - pelo trabalho que ele compartilhou em seu blog e a ajuda que ele forneceu o tempo todo
Bram Harmsen https://www.thingiverse.com/thing:2813599 - Para um engenheiro reverso no volante F1
MRFID72 - Para o incrível vídeo do YouTube, explicando os interruptores rotativos analógicos
Danny van den Brande - Para o código que encontrei online que me ajudou a configurar a matriz do botão
Antonio de Stefano https://3drap.it - Para o incrível gabinete do volante
GNU Licença pública geral v3.0 ou mais tarde