Construa um Quadrante de Acelerador Personalizado e Roda de Trim para MS Flight Simulator com Arduino Leonardo e Impressão 3D
Componentes e Materiais
| Arduino Leonardo | Um Leonardo ou Micro será adequado para este projeto, até 6 controles possíveis em cada Arduino | 1 |
| Fio de Conexão | 3 fios por módulo | 3 |
| Potenciômetro Rotativo 50k | 1 por módulo (detalhes na seção do projeto) | 1 |
Ferramentas e Máquinas Necessárias
- Ferro de Solda (genérico)
- Impressora 3D (genérica)
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Introdução
Após atualizar meu PC para rodar o MS FS2020, fiquei inspirado a melhorar os controles que utilizava. Um teclado não proporciona a sensação adequada para voar e eu queria aprimorar a experiência para algo melhor. Não sou um simulador de voo em tempo integral e não posso dedicar muito espaço ou dinheiro para construir um cockpit completo ou comprar um conjunto de controles pronto.
Design
Projetei um conjunto de controles em CAD que pudessem ser fabricados com as ferramentas que tenho e que proporcionassem uma experiência razoável do que imagino ser os controles de um avião real (nunca toquei nos controles de um avião, então baseei-me no que penso que seriam).
Decidi que os controles desejados seriam alavancas únicas para acelerador, flaps, trem de pouso e uma roda de trim de profundor. Como voo principalmente com pequenos aviões monomotores no simulador, foquei-me nisso.
A roda de trim foi a mais desafiadora de projetar e levou vários esboços ao longo de muitos dias para chegar a um design que proporcionasse a aparência e a sensação desejadas.
Construção
Todas as peças foram impressas em 3D com ABS na minha impressora UP!, depois pintadas e conectadas a um Arduino, inicialmente um Leonardo e depois trocado por um Micro. O objetivo era obter uma unidade plug-and-play que pudesse ser guardada facilmente quando não estivesse em uso.
Peças
Lista de Peças Impressas em 3D
Cada módulo de alavanca requer:
- 1 x Corpo esquerdo
- 1 x Corpo direito
- 1 x Alavanca com detentes (5 variantes disponíveis com 2 a 6 detentes)
- 1 x Ponta da alavanca
- 1 x Botão (6 variantes disponíveis)
- 1 x Placa de atrito (3 variantes disponíveis)
- 1 x Suporte do potenciômetro
Cada módulo de roda requer:
- 1 x Corpo esquerdo da roda de trim
- 1 x Corpo direito da roda de trim
- 1 x Engrenagem da roda de trim
- 1 x Cubo da roda de trim
- 1 x Roda da roda de trim (se fizer a roda montada)
- 8 x Nódulos da roda de trim (se fizer a roda montada)
- 1 x Peça única da roda de trim (se fizer a roda de peça única)
- 1 x Quadrante da roda de trim
- 1 x Acionamento do quadrante da roda de trim
- 1 x Suporte do potenciômetro
Peças da caixa traseira podem ser usadas para abrigar o Arduino e a fiação.
Conclusão
Uma construção muito agradável, muito fácil do ponto de vista da programação; o verdadeiro desafio foi o design, especialmente a roda de trim e conseguir a sensação correta.
Código
Quadrant.ino
#include <Joystick.h>
Joystick_ Joystick;
// Coloque os valores máximos e mínimos do analogRead nestes arrays
// Eles são traduzidos para uma faixa de 0 - 1023
int axisLimits0[] = {686, 338};
int axisLimits1[] = {345, 695};
int axisLimits2[] = {327, 678};
int axisLimits3[] = {342, 692};
int axisLimits4[] = {0, 1023};
int axisLimits5[] = {0, 1023};
// Ative ou desative eixos definindo estas variáveis
bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;
// Modo de configuração imprime o valor do pino e o valor traduzido no monitor serial
// int setting = -1; // sem impressão no monitor serial
// int setting = 2; // valores 0 - 5, imprime os valores dos pinos no monitor serial
int setting = -1;
void setup() {
if(a0Used) pinMode(A0, INPUT);
if(a1Used) pinMode(A1, INPUT);
if(a2Used) pinMode(A2, INPUT);
if(a3Used) pinMode(A3, INPUT);
if(a4Used) pinMode(A4, INPUT);
if(a5Used) pinMode(A5, INPUT);
Joystick.begin();
if(setting >= 0) Serial.begin(9600);
}
void loop() {
int value = 0;
int pos = 0;
if(a0Used){
value = analogRead(A0);
pos = translateValue(value, axisLimits0[0], axisLimits0[1]);
Joystick.setThrottle(pos);
if(setting == 0) settingPrint(value, pos);
}
if(a1Used){
value = analogRead(A1);
pos = translateValue(value, axisLimits1[0], axisLimits1[1]);
Joystick.setRxAxis(pos);
if(setting == 1) settingPrint(value, pos);
}
if(a2Used){
value = analogRead(A2);
pos = translateValue(value, axisLimits2[0], axisLimits2[1]);
Joystick.setRyAxis(pos);
if(setting == 2) settingPrint(value, pos);
}
if(a3Used){
value = analogRead(A3);
pos = translateValue(value, axisLimits3[0], axisLimits3[1]);
Joystick.setRzAxis(pos);
if(setting == 3) settingPrint(value, pos);
}
if(a4Used){
value = analogRead(A4);
pos = translateValue(value, axisLimits4[0], axisLimits4[1]);
Joystick.setXAxis(pos);
if(setting == 4) settingPrint(value, pos);
}
if(a5Used){
value = analogRead(A5);
pos = translateValue(value, axisLimits5[0], axisLimits5[1]);
Joystick.setYAxis(pos);
if(setting == 5) settingPrint(value, pos);
}
delay(5);
}
int translateValue(int v, int f1, int f2){
// Traduz valores para uma faixa de 0 - 1023
int result = 0;
int start = 0;
float range = 0;
if(f1 < f2){
start = f1;
range = f2 - f1;
} else{
start = f2;
range = f1 - f2;
}
result = (v - start) * (1023 / range);
if(result < 0) result = 0;
if(result > 1023) result = 1023;
return result;
}
void settingPrint(int value, int pos){
Serial.print(value);
Serial.print(" ");
Serial.println(pos);
}
Peças Personalizadas e Gabinetes
Arquivo STEP contendo todas as peças: released_u3k8QjPXzJ.stp
Esquemáticos
Para adicionar mais controles, conecte 5V e GND e use os pinos A1 a A5.
Arquivo Fritzing: quadrant_ZkMygPyRiE.fzz
Processo de manufatura
- Crie Animações e Jogos Envolventes em LCD com Arduino UNO
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield
- Controle de Trim Tab para FlightGear com Arduino Nano: Roda Analógica Compacta
- Python 3 para Arduino UNO: Controle de Comandos Fácil e Demo com LED
- Autômatos Celulares em Tempo Real no Arduino com Display OLED 128x64
- Construa um Rádio FM Compacto com Arduino Nano e RDA5807M
- Sistema de Presença em Tempo Real com RFID, Arduino e Google Sheets
- Integração IoT: Controle Remoto de Arduino via Apps UWP Windows 10
- Balanceamento vs. Alinhamento de Rodas: O Que Você Precisa Saber