Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een aangepaste manettekwadrant en trimwiel voor MS Flight Simulator met Arduino Leonardo en 3D-printen

Onderdelen en benodigdheden

Onderdeel Aantal Opmerking
Arduino Leonardo (of Micro) 1 Geschikt voor maximaal 6 bedieningen per Arduino
Aansluitdraad 3 3 draden per module
Draaipotentiometer 50k 1 1 per module, zie details in bouwverhaal

Benodigde tools en machines

  • Soldeerbout
  • 3D-printer

Apps en online diensten

  • Arduino IDE

Over dit project

Inleiding

Na een upgrade van mijn pc om Microsoft Flight Simulator 2020 te kunnen draaien, wilde ik de besturing verbeteren. Een toetsenbord biedt niet het juiste gevoel voor vliegen, maar een volledige cockpit of dure professionele controls waren geen optie vanwege ruimte en budget.

Ontwerp

Ik ontwierp in CAD een set besturingselementen die ik met mijn tools kon maken en die een realistisch gevoel geven. Ik richtte me op kleine eenmotorige vliegtuigen, omdat ik die voornamelijk vlieg. De trimwiel was het meest uitdagend; het kostte meerdere schetsen en dagen om een ontwerp te vinden dat er goed uitzag en goed voelde.

Bouw

Alle onderdelen zijn in ABS geprint op mijn UP!-printer, daarna geschilderd en aangesloten op een Arduino (eerst een Leonardo, later een Micro). Het resultaat is een plug-and-play unit die eenvoudig op te bergen is.

Onderdelenlijst (3D-geprint)

Per hefbelmodule:

  • 1× Linker body
  • 1× Rechter body
  • 1× Hefbel met klikken (5 varianten: 2 tot 6 klikken)
  • 1× Hefbeleind
  • 1× Knop (6 varianten)
  • 1× Wrijvingsplaat (3 varianten)
  • 1× Potentiometerhouder

Per trimwielmodule:

  • 1× Linker trimwiel-body
  • 1× Rechter trimwiel-body
  • 1× Trimwieltandwiel
  • 1× Trimwielnaaf
  • 1× Trimwiel (samengevoegd)
  • 8× Trimwielknoppen (voor samengevoegd wiel)
  • 1× Trimwiel (één stuk)
  • 1× Trimwielkwadrant
  • 1× Trimwielkwadrant-aandrijving
  • 1× Potentiometerhouder

Optioneel: achterbak-onderdelen om de Arduino en bedrading te behuizen.

Conclusie

Een heel leuk project. De programmering was eenvoudig; de echte uitdaging lag in het ontwerp, vooral het trimwiel en het realiseren van het juiste gevoel.

Code

Bestand: Quadrant.ino

Gebruik de instellingvariabele en de seriële monitor om de eindwaarden van elke potentiometer te bepalen en vul ze in het axisLimits-array.

#include <Joystick.h>
Joystick_ Joystick;

int axisLimits0[] = {686, 338};
int axisLimits1[] = {345, 695};
int axisLimits2[] = {327, 678};
int axisLimits3[] = {342, 692};
int axisLimits4[] = {0, 1023};
int axisLimits5[] = {0, 1023};

bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;

int setting = -1; // -1 = geen seriële output, 0-5 = print pinwaarden

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, 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){
  int result = 0, 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);
}

Aangepaste onderdelen en behuizingen

STEP-bestand met alle onderdelen: released_u3k8QjPXzJ.stp

Schema's

Schema voor extra bedieningen: sluit 5V en GND aan en gebruik pinnen A1 tot A5.

Bestand: quadrant_ZkMygPyRiE.fzz

Productieproces

  1. Bouw Boeiende LCD Animaties & Games met Arduino UNO
  2. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  3. Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
  4. Compacte Analog Trim Tab Wiel voor FlightGear met Arduino Nano
  5. Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
  6. Bouw Real-Time Cellulaire Automaten op Arduino met 128x64 OLED Display
  7. Bouw een compacte FM-radio met Arduino Nano en RDA5807M
  8. Real-time RFID aanwezigheidssysteem met Arduino en Google Sheets
  9. IoT-integratie: Arduino Op afstand Besturen via Windows 10 UWP Apps
  10. MKR1000 met DHT22: Realtime temperatuur‑ en vochtigheidsmonitoring naar Azure
  11. Wielbalanceren vs. Wieluitlijning: wat u moet weten