Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Eigenen Drosselquadrant & Trimmrad für MS Flight Simulator mit Arduino Leonardo & 3D-Druck bauen

Komponenten und Zubehör

Arduino Leonardo Ein Leonardo oder Micro eignet sich für dieses Projekt, bis zu 6 Steuerungen pro Arduino möglich 1
Draht, Anschlusskabel 3 Drähte pro Modul 3
Drehpotentiometer 50k 1 pro Modul, Details im Bauabschnitt 1

Benötigte Werkzeuge und Maschinen

Apps und Online-Dienste

Über dieses Projekt

Einführung

Nach der Aufrüstung meines PCs für den Microsoft Flight Simulator 2020 wollte ich die Steuerung verbessern. Eine Tastatur vermittelt nicht das richtige Fluggefühl, aber ein vollständiges Cockpit oder gekaufte Steuerungen sprengen mein Budget und Platzangebot.

Eigenen Drosselquadrant & Trimmrad für MS Flight Simulator mit Arduino Leonardo & 3D-Druck bauen

Design

Ich entwarf in CAD Steuerungen, die mit meinen Werkzeugen herstellbar sind und ein realistisches Gefühl vermitteln. Da ich noch nie echte Flugzeugsteuerungen bedient habe, basiert das Design auf meiner Vorstellung.

Gewünscht waren einzelne Hebel für Drosselklappe, Klappen, Fahrwerk und ein Trimmrad für den Höhenruder-Trimm. Mein Fokus liegt auf einmotorigen Leichtflugzeugen im Simulator.

Das Trimmrad war die größte konstruktive Herausforderung und erforderte über mehrere Tage viele Skizzen, bis Optik und Haptik stimmten.

Eigenen Drosselquadrant & Trimmrad für MS Flight Simulator mit Arduino Leonardo & 3D-Druck bauen
Eigenen Drosselquadrant & Trimmrad für MS Flight Simulator mit Arduino Leonardo & 3D-Druck bauen
Eigenen Drosselquadrant & Trimmrad für MS Flight Simulator mit Arduino Leonardo & 3D-Druck bauen

Bau

Alle Teile wurden in ABS auf einem UP!-Drucker gedruckt, lackiert und an einen Arduino angeschlossen – zunächst ein Leonardo, später ein Micro. Ziel war ein Plug-and-Play-Gerät, das sich bei Nichtgebrauch leicht verstauen lässt.

Teileliste für 3D-Druck

Pro Hebelmodul:

Pro Trimmrad-Modul:

Rückseitige Gehäuseteile können Arduino und Verkleidung aufnehmen.

Fazit

Ein sehr lohnendes Projekt. Die Programmierung war einfach, die eigentliche Herausforderung lag im Design – besonders beim Trimmrad und dem richtigen Gefühl.

Code

Quadrant.ino

#include <Joystick.h>
Joystick_ Joystick;

// Min/Max-Werte aus analogRead für jedes Potentiometer
// Werden auf Bereich 0-1023 skaliert
int axisLimits0[] = {686, 338};
int axisLimits1[] = {345, 695};
int axisLimits2[] = {327, 678};
int axisLimits3[] = {342, 692};
int axisLimits4[] = {0, 1023};
int axisLimits5[] = {0, 1023};

// Achsen aktivieren/deaktivieren
bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;

// Setting-Modus: Serielle Ausgabe der Roh- und Skalierwerte
// int setting = -1; // Keine Ausgabe
// int setting = 2;  // Pin 2 (A2) ausgeben
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);
}

// Skaliert Wert auf 0-1023
int translateValue(int v, int f1, int f2){
  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);
}

CAD-Dateien

Alle Teile als STEP-Datei: released_u3k8QjPXzJ.stp

Schaltplan

Für weitere Steuerungen 5V und GND anschließen und Pins A1 bis A5 verwenden.

Herstellungsprozess

  1. LCD-Animationen & Spiele mit Arduino UNO erstellen
  2. Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
  3. Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
  4. Kompaktes Trim-Rad für FlightGear mit Arduino Nano
  5. Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
  6. Echtzeit-Zelluläre Automaten auf Arduino mit 128x64 OLED-Display
  7. Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen
  8. Echtzeit-RFID-Anwesenheitssystem mit Arduino & Google Tabellen
  9. IoT-Integration: Fernsteuerung von Arduino über Windows 10 UWP-Apps
  10. Radauswuchten vs. Spur/Sturz einstellen: Unterschied, Kosten & Nutzen