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

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Komponenten und Zubehör

Arduino UNO × 1
Arduino Nano R3 × 1

Projektbeschreibung

Vorwort

Ich segle gern allein, denn wenn ein Mensch mit seinem Segelboot auf dem Meer ist, hat er alles, um auf ein höheres Level zu wachsen. Segeln in rauher See bei schlechtem Wetter ist hart, aber an guten Tagen mit Sonne und Wind ist der Genuss maximal.

Glück bedeutet unendliche Horizonte, perfekte Technik, optimale Entscheidungen – aber auch menschliche Dinge: ein gutes Getränk und ein leckeres Sandwich! Genau hier hilft der Autopilot: Er arbeitet für Sie, während Sie Ihren 17-Uhr-Tee & Kekse auf See genießen. :-)

Was der Autopilot für Sie tut

Ein Segelboot hat keinen Motor und kann keine programmierte Route (Hafen → Strand → Angelplatz → Leuchtturm → zurück) selbst fahren. Nicht möglich.

Die ganze Arbeit macht der Segler: Segel trimmen, Wetter/Wind kontrollieren, Leinen fieren/holen, Verkehr beachten, Kurs entscheiden, steuern... Wenn der Segler Pause macht (10 Sekunden bis Minuten – die berühmte "Tea Time"), schaltet er Autopilot ein. In Sekunden erfasst GPS Position, Geschwindigkeit, Richtung und hält den Kurs (Route). Das Steuersystem (Pinne mit Ruder), sonst von Expertenhänden bewegt, wird nun vom Autopilot über Schrittmotor mit Riemenscheiben und Seilen gesteuert.

Das Ruder steuern ist kontinuierliche Fein- oder Grobjustierung. Je kleiner/leichter das Boot, desto stärker beeinflussen Wellen, Windrichtung/-druck, Gewichtsverlagerung, Strömung den Kurs. Der Segler bleibt wachsam, auch mit Autopilot, und korrigiert Kurs per Fernbedienung: 4 Tasten +1, -1, +10, -10 für kleine/große Gradänderungen. Diese Tasten sind auch am Autopilot: Grün (rechts), Rot (links). Blau (Mitte) = Autopilot aktivieren/deaktivieren (Pause). Schwarz = Parameter im Speicher einstellen.

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Die Schaltung

Hauptverarbeitung: MCU Arduino Uno. Zweiter MCU Arduino Nano als Watchdog: Interner Watchdog im Uno existiert, aber ich wollte unabhängigen externen Mikrocontroller – ein Lebenstraum, jetzt erfüllt! Uno muss Nano über Pin 3 → A0 füttern (High/Low, 5/0V), mindestens alle 2,5 Sekunden (feedingInterval); sonst ist Uno "schlafend" oder "blockiert", und Nano setzt Uno zurück. Noch nie passiert – glauben Sie's?

Beliebtes Display mit I2C-Wandler verlötet → nur 4 Drähte, spart digitale Pins. Tasten und Fernbedienung über Spannungsteiler an Analog-Pins → wenige MCU-Ports. 1% Präzisionswiderstände, Analog-Vergleichswerte im Code; bei anderen Widerständen: Konstanten in checkRfRC() und checkHWButtons() anpassen. RF 433MHz Fernbedienung (XD-YK04) funktioniert gut; Spulenantenne aus Kupferdraht selbst gemacht für Reichweite. Getestet 10m, denke 20m+ möglich – genug für 4,20m Testboot.

GPS-Einheit: Zuerst EM406A, aber Week-Rollover-Bug (zu alt). Getauscht gegen Beitian BN-220T. Konfigurationssoftware: 2Hz, nur nötiges $GNRMC NMEA-Satz. GPS sendet (TX) an Pin 0 (RX) von Uno. Daten: Datum, Zeit, Position, True Course, Geschwindigkeit, Satelliten-Fix-Validität. Wichtig: Arduino IDE nutzt Pin 0 (RX) zum Programmieren → GPS während Upload kurz trennen!

Ein weiterer Traum: EEPROM nutzen. IC 24C04 (512 Bytes I2C) für Schrittmotor-Parameter (später unter "Software").

Komponentenliste

Einige Sensoren über IC 4051 Multiplexer an Arduino Uno: Thermistor für Spannungsregler-Kühlkörper-Temperatur, 2W Widerstand + 4×10k als Spannungsteiler für Stromverbrauch gesamt. Akku-Spannung überwacht: LiPo kritisch unter 3,3V/Zelle; hier 2S-Pack, bei <7,0V warnt Summer mit schnellen kurzen Piepsen. Nicht zu lange warten – ausschalten & laden! LEDs: Gelb blinkt 1Hz = Watchdog läuft; Blau an = Autopilot aktiv, aus = Pause; Rot blinkt bei Fernbedienung-Tastendruck.

Gesamte Schaltung bei 5,0V aus LiPo 2S 7,4V 2600mAh + IC 7805. Strom <800mA, typisch 100-450mA. Kühlkörper auf 7805! Thermistor darauf, Summer piept bei >50°C.

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

PCB Layout & Aufbau

Einseitige PCBs → wenige Drahtbrücken (gepunktete Linien) für Routing. Bauteilseite gezeigt, unten alle Dateien (Bauteil-/Lötseite, gespiegelt) zum Download & Druck per Laserdrucker auf "gelbe" oder "blaue" Folien. Gelbe genutzt, blaue sollen besser sein (teurer). Drucken: Toner-Sparen aus, 1200 dpi für tiefes Schwarz. Tonertransfer per Bügeleisen. Beidseitiger Druck (auch Bauteilseite) erleichtert Bestückung & wirkt "professionell".

Beide PCBs passen gestapelt auf Arduino Uno: unten Power-Unit, oben Autopilot-Unit.

Alles zusammengefasst: PCBs, MCUs, RC, Motortreiber, Akku, GPS, Tasten, Schalter, Kabel, Stecker. Nicht verlötet, sondern Header & Dupont-Kabel für Wiederverwendbarkeit. ~200 ungelötete Verbindungen → gelegentliche Fehlfunktionen normal. Empfehlung: Alles verlöten für stabilere Schaltung!

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung
Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Parameter-Setup & Sensoranzeige

Schwarze Taste an Gehäuseseite → Setup-Modus; auch während aktiver Navigation, Pause nicht nötig. 1. Display-Seite: Akku-Spannung (V=7,83), Stromverbrauch (mA=177), Thermistor-Temperatur (38°C). Schwarze Taste wiederholt → nächste Seiten. Seiten 2-5: Parameter ändern per -1/+1 Tasten. Seite 6: "Updating..." bei Änderungen → Werte im EEPROM gespeichert.

Parameter nötig für Feintuning auf dem Boot. Ansprechverhalten, Empfindlichkeit, Sanftheit hängen ab von: Riemenscheiben-Durchmesser, Anzahl, Hauptscheiben-Durchmesser am Motor, Ruderempfindlichkeit, Ruderpinne-Länge, etc. Alles einbauen, an sonnigem Tag mit leichtem Wind testen!

Live-Betrieb

Sie navigieren auf See/See/Hafen. Tea Time, Cola & Sandwich in der Tasche. Autopilot einschalten, GPS-Fix abwarten. Display zeigt: Geschwindigkeit in Knoten, Uhrzeit, Kurs z.B. H270° (R=Route, H=Heading) in Grad (180°=Süd, 270°=West, 360/0°=Nord, 90°=Ost). R und H identisch im Pause-Modus (STOP angezeigt). Steuerseil (Schrittmotor → Ruderpinne) verbinden, blaue Taste drücken → Autopilot steuert; hält R-Richtung, überwacht H. Heading ändert sich, langsam/schnell je Wetter. Autopilot korrigiert z.B. -10°, +5°... bis H = R. Kursänderung per Rot/Grün Tasten am Gerät (-1/-10/+1/+10) oder Fernbedienung. Manuelle Steuerung zurückgewinnen: Blaue Pause-Taste drücken, Seil vom Ruder lösen, selbst steuern. Fertig.

Software-Seite

Code lang, aber hoffentlich verständlich. Erklärung: Sketch nutzt ~65% Programmspeicher, ~45% RAM. Trotz String-Klasse (mostly Serial NMEA-Manipulation) stabiler Ablauf; nutzt serialEvent() für GPS-Daten 2×/Sekunde, ruft nmeaExtractData(), prüft mit nmea0183_checksum() Datenintegrität. Andere GPS-Modelle: Satzstruktur prüfen, ggf. anpassen. Beispiel: EM406A nutzt $GPRMC, BT220 $GNRMC – nur Namensänderung. NMEA-Checksum-Test: https://nmeachecksum.eqth.net. Beispiel vollständiger NMEA-Satz:

$GPRMC,095836.000,A,4551.9676,N,01328.7118,E,2.09,341.84,280519,,*08

In setup() EEPROM prüfen: neu/unbekannt → initialisieren (formatieren). Parameter als Bytes: 0=0x29, 1=0x00, 2-3=Intervall, 4-5=Min, 6-7=Max, 8-11=Koeffizient (Byte, Byte, Int, Int, Float). EEPROM R/W defensiv programmiert. Sensoren alle 10 Sekunden via readMuxSensors() durch Multiplexer – Alarm bei niedrigem Akku/hoher Temperatur. Stromverbrauch-Auflösung gering (~40mA Schritte). Hardware & RC-Tasten kontinuierlich geprüft; Aktion abhängig von IsSetup Boolean wie RefreshDisplay(). Kern: STEERING CONTROL Sektion ruft gomotor() für Schrittmotor vor/zurück; bewegt Ruder z.B. 10° rechts, nach Intervall zurück auf Null, neuer Berechnungszyklus. Steering auch während Setup aktiv (beeinflusst nur wenige Tasten/Display). Watchdog-Fütterung simpel aber wichtig: Pin so oft wie möglich togglen.

Installation auf Segelboot

Wie Bild: Autopilot & Schrittmotor achtern, beide fest verschraubt. 6mm Seil von Motor-Hauptscheibe um zwei weitere Scheiben an Backbord/Steuerbord. Diese Scheiben über Bungee-Ringe am Boot fixiert → Seil leicht gespannt. Schließlich: Seil an Ruderpinne verbinden (temporär); nur bei aktivem Autopilot verbunden, einfach an/abkupplbar. Autopilot-System trocken halten! :-)

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

News & Updates

Disclaimer & Warnungen

Betrachten Sie dies als Spiel, nichts Ernstes! Vor Jahren 16 Monate Weltumsegelung mit echtem Autopilot (NICHT DIESER!) in allen Bedingungen, auch Schlechtwetter. Echter Autopilot: extrem robust hard- & softwaremäßig, dem man vertrauen muss. Dieser Arduino-Autopilot ist ein fantastisches Spielprojekt zum Spaß & Zeitvertreib.

Viel Spaß!

Marco Zonca

Code

Autopilot Sketch (für Uno) Arduino
/* Autopilot für kleine Segelboote, Marco Zonca 2019
 * Arduino UNO CPU, Arduino Nano Watchdog, GPS BT-220 NMEA,
 * Schrittmotor + Treiber, RF433MHz RC, 6 Tasten, Summer,
 * I2C Display, 2 LEDs, I2C 24C04 EEPROM, Mux 4051 Sensoren,
 * LiPo 2S 7,4V 2600mAh, 7805 Regler, Thermistor
 */
#include <LiquidCrystal_I2C.h>
#include <NewTone.h>
#include <Stepper.h>
#include <Wire.h>

String inputString = "";
String nm_time = "00:00:00";
String nm_validity = "V";
String nm_latitude = "ddmm.mmmm'N";
String nm_longitude = "dddmm.mmmm'E";
String nm_knots = "0.0kn";
float nmf_knots = 0.0;
String nm_truecourse = "360";
float nmf_truecourse = 360;
String nm_date = "dd/mm/yyyy";
String nm_routetofollow = "000";
float nmf_routetofollow = 0;

unsigned long previousStearingMillis = 0;
unsigned long currentStearingMillis = 0;
unsigned long prevCheckSensorsMillis = 0;
unsigned long currCheckSensorsMillis = 0;
int CheckSensorsInterval = 10000;

bool stringComplete = false;
bool isfirstfix = true;
bool ispause = true;
bool isStearing = false;
bool isSetup = false;

int s=0, y=0, z=0, d=0;
int rfRemoteControlValue = 0;
int HWButtonValue = 0;
int SetupParameter = 0;
float calcmove = 0, cm = 0, Stearing = 0, prevStearing = 0, t = 0;

int EEdisk = 0x50;
int EEid1 = 0x29;
int EEid2 = 0x00;
unsigned int EEaddress = 0;
unsigned int EEbytes = 12;
byte EEdata[12];
byte EEbytedata;
int EEerr = 0;

float SensorVBatt=0, SensorVRes=0, SensorTemp=0, SensormAmp=0;

// EEPROM Parameter (Defaults, werden gelesen/geschrieben)
// Adresse 0-255 bei 0x50, 256-512 bei 0x51 (ungenutzt)
// 0: 1B byte 0x29 (Projekt-ID1)
// 1: 1B byte 0x00 (Projekt-ID2)
int StearingInterval = 2000;      // ms, 2-5000 Schritt 100
int StearingMinToMove = 2;        // Grad, 0-20 Schritt 1
int StearingMaxMove = 40;         // Grad, 10-45 Schritt 1
float StearingCoeffMove = 1.5;    // Faktor, 0.1-4 Schritt 0.1

byte bStearingInterval[sizeof(int)];
byte bStearingMinToMove[sizeof(int)];
byte bStearingMaxMove[sizeof(int)];
byte bStearingCoeffMove[sizeof(float)];

int prev_StearingInterval=0, prev_StearingMinToMove=0, prev_StearingMaxMove=0;
float prev_StearingCoeffMove=0;

const int ledpausePin = 2;
const int watchDogPin = 3;
const int MuxSelBit0Pin = 7;  // 00=Vin 01=Vbatt 10=Temp
const int MuxSelBit1Pin = 6;
const int motorsABenablePin = 13;
const int MuxIOPin = 14;
const int ButtonsPin = 15;
const int rfRemoteControlPin = 16;
const int speakerPin = 17;

const int RCleftbutton = 201, RCrightbutton = 202, RCleft10button = 203, RCright10button = 204;
const int HWleftbutton = 101, HWrightbutton = 102, HWpausebutton = 103, HWsetupbutton = 104;
const int HWleft10button = 105, HWright10button = 106;

const int motorStepsPerRevolution = 200; // 23LM: 54 Schritte = 1/4 Umdrehung

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Stepper motor(motorStepsPerRevolution, 9, 10, 11, 12);

void setup() {
  Serial.begin(4800);
  lcd.begin(16,2);
  Wire.begin();
  motor.setSpeed(60);
  inputString.reserve(200);
  pinMode(motorsABenablePin, OUTPUT);
  pinMode(MuxSelBit0Pin, OUTPUT);
  pinMode(MuxSelBit1Pin, OUTPUT);
  digitalWrite(motorsABenablePin, LOW);
  digitalWrite(MuxSelBit0Pin, LOW);
  digitalWrite(MuxSelBit1Pin, LOW);
  pinMode(ledpausePin, OUTPUT);
  pinMode(watchDogPin, OUTPUT);
  digitalWrite(ledpausePin, LOW);
  digitalWrite(watchDogPin, LOW);

  // EEPROM prüfen & formatieren falls neu
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Memory check...");
  lcd.setCursor(0,1);
  for (s = 0; s < EEbytes; s++) {
    EEaddress = s;
    EEbytedata = readEEPROM(EEdisk, EEaddress);
    EEdata[s] = EEbytedata;
  }
  if (EEerr) { lcd.print("E="); lcd.print(EEerr); delay(1000); }
  if ((EEdata[0] != EEid1) || (EEdata[1] != EEid2)) {
    lcd.print(" init!"); goupdateEEPROM();
    if (EEerr) { lcd.print("E="); lcd.print(EEerr); delay(1000); }
  }
  memcpy(bStearingInterval, EEdata+2, sizeof(int));
  memcpy(bStearingMinToMove, EEdata+4, sizeof(int));
  memcpy(bStearingMaxMove, EEdata+6, sizeof(int));
  memcpy(bStearingCoeffMove, EEdata+8, sizeof(float));
  StearingInterval = *((int*)bStearingInterval);
  StearingMinToMove = *((int*)bStearingMinToMove);
  StearingMaxMove = *((int*)bStearingMaxMove);
  StearingCoeffMove = *((float*)bStearingCoeffMove);
  prev_StearingInterval = StearingInterval;
  prev_StearingMinToMove = StearingMinToMove;
  prev_StearingMaxMove = StearingMaxMove;
  prev_StearingCoeffMove = StearingCoeffMove;
  lcd.print(" OK"); delay(1000);
  lcd.clear(); lcd.print("GPS reading..."); delay(1000);
}

void loop() {
  // SENSOR PRÜFUNG alle 10s
  currCheckSensorsMillis = millis();
  if (currCheckSensorsMillis - prevCheckSensorsMillis >= CheckSensorsInterval) {
    readMuxSensors();
    if ((SensorVBatt <= 7.0) || (SensorTemp >= 50)) {
      lcd.clear(); lcd.setCursor(0,0); lcd.print("Alarm sensors! ");
      lcd.setCursor(1,1); lcd.print("V="); lcd.print(SensorVBatt);
      lcd.print(" "); lcd.print(int(SensorTemp)); lcd.write(0xDF); lcd.print("C");
      NewTone(speakerPin,10); delay(1000); noNewTone();
    }
    prevCheckSensorsMillis = currCheckSensorsMillis;
  }

  // STEUERUNG
  currentStearingMillis = millis();
  if (currentStearingMillis - previousStearingMillis >= StearingInterval) {
    if (!isStearing && !ispause) {
      // Korrektur versuchen
      calcmove = nmf_routetofollow - nmf_truecourse;
      if (calcmove < -180) calcmove += 360;
      else if (calcmove > 180) calcmove -= 360;
      if (abs(calcmove) >= StearingMinToMove) {
        if (abs(calcmove) >= StearingMaxMove) {
          cm = (calcmove < 0) ? -StearingMaxMove : StearingMaxMove;
          calcmove = cm;
        }
        Stearing = calcmove * StearingCoeffMove;
        gomotor(int((Stearing * 216) / 360)); // 54 Schritte = 1/4 Umdrehung
        prevStearing = Stearing;
        isStearing = true;
      }
    } else {
      // Zurück auf Nullposition
      if (isStearing) {
        Stearing = -prevStearing;
        gomotor(int((Stearing * 216) / 360));
        Stearing = 0; prevStearing = 0; isStearing = false;
      }
    }
    previousStearingMillis = currentStearingMillis;
  }

  // RF FERNBEDIENUNG
  rfRemoteControlValue = checkRfRC();
  if (rfRemoteControlValue) {
    switch (rfRemoteControlValue) {
      case RCleftbutton: goleft(); break;
      case RCrightbutton: goright(); break;
      case RCleft10button: goleft10(); break;
      case RCright10button: goright10(); break;
    }
  }

  // HARDWARE TASTEN
  HWButtonValue = checkHWButtons();
  if (HWButtonValue) {
    switch (HWButtonValue) {
      case HWleftbutton:  if (!isSetup) goleft(); else setupMinus(); break;
      case HWrightbutton: if (!isSetup) goright(); else setupPlus(); break;
      case HWpausebutton: gopause(); break;
      case HWsetupbutton: gosetup(); break;
      case HWleft10button: goleft10(); break;
      case HWright10button: goright10(); break;
    }
  }

  // GPS NMEA
  if (stringComplete) {
    bool ret = nmeaExtractData();
    inputString = ""; stringComplete = false;
    if (ret) RefreshDisplay();
  }

  // WATCHDOG FÜTTERN
  digitalWrite(watchDogPin, !digitalRead(watchDogPin));
}

// ... (restliche Funktionen: readMuxSensors, nmeaExtractData, setupPlus/Minus, gomotor, 
// RefreshDisplay, serialEvent, nmea0183_checksum, checkRfRC, checkHWButtons, gosetup,
// goupdateEEPROM, goleft, goleft10, goright, goright10, gopause, readEEPROM, writeEEPROM,
// roundZeroDec, roundOneDec, roundTwoDec – im Originalcode vollständig enthalten)
WatchDog Sketch (für Nano) Arduino
/* Watchdog für Client-Kontrolle, Arduino Nano 3.0, Marco Zonca
 * Client muss Watchdog vor feedingInterval füttern, sonst Neustart erzwungen
 */
const int feedingPin = 14;
const int ledPin = 15;
const int restartPin = 16;
const int buzzerPin = 17;
const long ledInterval = 1000;
const long feedingInterval = 2500;
const long timeForClientStart = 16000;

int ledState = LOW;
int previousFeedingState = LOW;
int feedingState = LOW;
unsigned long previousLedMillis = 0;
unsigned long previousFeedingMillis = 0;

void setup() {
  digitalWrite(restartPin, HIGH); // LOW = Client Reset
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(restartPin, OUTPUT);
  pinMode(feedingPin, INPUT);
  delay(timeForClientStart); // Client Startzeit
}

void loop() {
  unsigned long currentMillis = millis();
  
  // LED BLINKEN
  if (currentMillis - previousLedMillis >= ledInterval) {
    previousLedMillis = currentMillis;
    ledState = !ledState;
    digitalWrite(ledPin, ledState);
  }

  // FÜTTERUNG PRÜFEN
  feedingState = digitalRead(feedingPin);
  if (feedingState == HIGH) {
    if (previousFeedingState == LOW) previousFeedingMillis = currentMillis;
    previousFeedingState = HIGH;
  } else {
    previousFeedingState = LOW;
  }

  if (currentMillis - previousFeedingMillis > feedingInterval) {
    // Client schläft → Reset
    ledState = HIGH; digitalWrite(ledPin, ledState);
    tone(buzzerPin, 1500); delay(500);
    digitalWrite(restartPin, LOW); // Client Reset
    tone(buzzerPin, 1500); delay(500);
    digitalWrite(restartPin, HIGH);
    tone(buzzerPin, 1500); delay(timeForClientStart);
    noTone(buzzerPin);
    currentMillis = millis();
    previousFeedingState = LOW;
    previousFeedingMillis = currentMillis;
    previousLedMillis = currentMillis;
  }
}

Custom Parts & Enclosures

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

23lm-stepper-plate-v2_PlvJaff9Hl.step

23lm-stepper-pulley-56_UhsbaWbiBt.step

Schaltpläne

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Fortgeschrittenes Autopilot-System für Segelboote – Präzise Automatische Steuerung

Herstellungsprozess

  1. DIY Infrarot-Bewegungsmelder für Raspberry Pi – Schritt-für-Schritt-Anleitung
  2. Ballistisches Fallschirm-Rückführungssystem für UAVs designen
  3. Ist Continuous Monitoring die richtige Wahl für Ihren Betrieb?
  4. ATI Industrial Automation: Führende automatische Werkzeugwechsler für Industrieroboter
  5. Ist Ihre Fertigungsstätte bereit für IoT? Ein praktischer Leitfaden
  6. Präzisions-Polygonfräser für Automatikdrehmaschinen – Einstellbare, Hochleistungs-Schneidlösungen
  7. R07 Cincom CNC-Drehmaschine – Präzisions-7-mm-Bearbeitung für Kleinteile
  8. Revolutionäres Hyperschall-Antriebssystem ermöglicht transkontinentale Reisen in <30 Minuten
  9. Hand- und Automatikgetriebe: Wie sie Leistung übertragen – Übersicht
  10. Automatikgetriebe: Umfassender Leitfaden zu Aufbau, Typen & Funktion