BaupfadMittelstufeEin Wochenende

4-DOF-Roboterarm bauen: PCA9685, Servos, Kinematik

Ein Tisch-Roboterarm, der angefahrene Posen anfährt – getrieben per PCA9685 und abgestimmt mit inverser Kinematik, verstanden in der Simulation vor jedem Servokabel.

Technisches Schema: 4-DOF-Roboterarm bauen: PCA9685, Servos, KinematikREACHABLE WORKSPACE

Ein Roboterarm ist das erste Projekt, in dem ein Roboter aufhört, herumzufahren, und anfängt, etwas mit der Welt zu tun. Ein Linienfolger folgt; ein Ausweicher weicht aus; ein Arm erreicht, positioniert und greift. Dieser Wechsel – vom Fahren zum Handhaben – bringt die eine Idee mit sich, auf der jeder Manipulator aufbaut: Kinematik, die Geometrie, die befehlbare Winkel mit dem gewünschten Raumpunkt verbindet.

Dieser Lernpfad behandelt den Arm genau so: als Kinematiklektion zum Anfassen. Du beginnst damit zu verstehen, wie ein Zwei-Link-Arm Gelenkwinkel in eine Werkzeugposition und zurück verwandelt, sammelst die Bauteile, die ein Servoarm braucht, und lernst, was jedes tut – dann erkundest du, bevor du etwas ausgibst oder ein Zahnrad abreißt, im Browser-Simulator die Reichweite, die zwei Ellbogenlösungen und die unerreichbaren Posen. Erst dann verdrahtest du den echten Arm, kalibrierst seine Servos von Hand und lässt die inverse Kinematik auf Hardware laufen.

Folge dem Technikbaum unten von oben nach unten. Jeder Knoten öffnet sich, sobald seine Voraussetzungen erfüllt sind, und dein Fortschritt wird auf diesem Gerät gespeichert, sodass du den Arm über ein Wochenende bauen kannst, ohne den Faden zu verlieren.

Stückliste

Bauteil Menge Ca. Kosten Hinweise
Arduino Uno 1 $5–8 Jedes Board geht – es spricht hier nur I²C
PCA9685-Treiber, 16 Kanäle 1 $3 Für vier Servos nicht strikt nötig, aber das richtige Werkzeug
SG90-Servo 4 $8 Kaufe einen MG90S für die Schulter – Metallgetriebe, und es ist das Gelenk, das versagt
4-DOF-Armbausatz 1 $12–25 Acryl reicht zum Lernen; Aluminium biegt sich weit weniger
5–6-V-Versorgung, ≥3 A 1 $8 Vier gemeinsam blockierte Servos sind ~2,6 A
1000-µF-Kondensator 1 $1 Über V+, nah an der Klemme
Ersatz-Servohörner 1 Satz $2 Du wirst eines falsch aufstecken. Jeder tut das

Gesamt: ca. $40–60.

Zwei Käufe verdienen Nachdenken statt Standardwahl. Ein MG90S mit Metallgetriebe an der Schulter kostet einen Dollar mehr und ist das Gelenk, das das Gewicht jedes anderen Gelenks trägt – Nylon- Zahnräder dort reißen unter Dauerlast, nicht bei Stoß. Und eine auf Blockierstrom dimensionierte Versorgung, denn der typische Armfehler ist: Kollidiert er mit seinem eigenen Gestell oder greift er etwas Festes, blockieren alle Servos auf einmal.

Miss deinen Arm, bevor du Code schreibst

Inverse Kinematik ist Arithmetik auf Armlängen. Diese vier Zahlen sind der gesamte Input, und sie aus einer Produktliste statt vom Lineal zu nehmen, ist der häufigste Grund, warum ein Arm selbstbewusst an die falsche Stelle greift.

Symbol Messe von Bis Typisch
L1 Schultergelenk-Achse Ellbogengelenk-Achse 90–105 mm
L2 Ellbogengelenkachse Tatsächlicher Greifpunkt des Greifers 80–95 mm

Diese letzte Zeile leistet mehr, als es aussieht. „Der tatsächliche Greifpunkt des Greifers“ wandert beim Schließen der Backen, und den Greifer selbst zu dimensionieren ist ein separates Problem vom Positionieren – mit eigenen Wänden, eigener Arithmetik und eigenen Fehlermodi. Greift dein Arm das Teil und lässt es dann fallen oder zerdrückt es, steht die Antwort nicht auf dieser Seite: Beginne beim Greifer-Simulator. | h | Tischfläche | Schultergelenkachse | 50–70 mm | | d | Fußdrehachse | Schulterachse, horizontal | 0–15 mm |

Miss zwischen Gelenkachsen, nicht Gestellkanten. Die Achse ist die Mitte der Servo- Abtriebswelle, oft 5–10 mm innerhalb der sichtbaren Halterung. Bei einem 95-mm-Link sind 10 mm Fehler über 10 %, und das ergibt einen Arm, der systematisch zu kurz greift – keine Verstärkung korrigiert das.

Diese zwei Längen liefern sofort den Arbeitsraum:

maximum reach = L1 + L2          e.g. 100 + 90 = 190 mm
minimum reach = |L1 - L2|        e.g. |100 - 90| = 10 mm

Der Arbeitsraum ist ein Kreisring, keine Scheibe. In der Mitte liegt ein Loch, das der Arm physisch nicht erreicht – und ein Ziel nahe dem Fuß, das „unerreichbar“ meldet, ist korrektes Verhalten statt eines Bugs.

Baue ihn in Meilensteinen

Die Montagereihenfolge enthält einen Schritt, der fast nicht rückgängig zu machen ist – Schritt 2.

Nr. Meilenstein Der Test Bestanden, wenn
1 Treiber antwortet I²C-Bus scannen 0x40 erscheint; V+ hat eigene Versorgung
2 Servos vor Montage homen Jeden Servo auf 90° befehlen, bevor ein Horn aufgesteckt wird Jedes Horn sitzt in deiner gedachten Nullpose
3 Endanschläge pro Servo Von der Mitte schrittweise nach außen, bis der Servo brummt Du hast Min-/Max-Counts pro Servo, keine Bibliotheks-Defaults
4 Gelenkabbildung notiert Jedes Gelenk durch seinen Bereich befehlen Offset, Vorzeichen und mechanische Grenzen aller vier notiert
5 Kollisionsprüfung Jedes Gelenk langsam durch den vollen Bereich schwenken Nichts trifft das Gestell; Grenzen spiegeln das Beobachtete
6 Vorwärtskinematik Bekannte Winkel setzen, Werkzeugposition berechnen, nachmessen Berechnet und gemessen stimmen auf wenige Millimeter
7 Rundreise Berechnete Position zurück durch IK geben Die Winkel heraus passen zu den Winkeln hinein
8 Alle vier Quadranten Ziele vorn, hinten, links, rechts anfordern Alle vier gehen – wenn zwei spiegeln, stand atan statt atan2
9 Erreichbarkeit Ziel weit jenseits L1 + L2 anfordern Sauberes „unerreichbar“ – kein NaN und kein Satz
10 Sanfte Bewegung Große Bewegung befehlen Über Schritte interpoliert, alle Gelenke gemeinsam, kein Ruck
11 Wiederholbarkeit Zehnmal aus verschiedenen Richtungen dieselbe Pose anfahren Landestreuung gemessen – diese Zahl ist dein Spiel

Meilenstein 2 lässt sich später nicht nachholen. Ein Servohorn ist verzahnt – rund 20 Zähne –, passt also nur in diskreten Stellungen etwa 18° auseinander. Erst montieren, dann kalibrieren, und du findest womöglich ein Gelenk, dessen nutzbarer Bereich um 40° versetzt ist, ohne mechanische Abhilfe. Jeden Servo bestromen, 90° befehlen, dann das Horn aufdrücken.

Bewege ihn immer sanft

Ein Servo, dem ein neuer Winkel befohlen wird, fährt dorthin mit voller Geschwindigkeit. An einem Arm bedeutet das eine gewaltsame Bewegung, eine Stromspitze über alle vier Servos und einen mechanischen Stoß durch Nylon- Zahnräder, mit der Hebelwirkung des Arms multipliziert.

// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
  static float cur[3] = {0, 0, 0};
  const float target[3] = {base, shoulder, elbow};

  for (int s = 1; s <= steps; s++) {
    const float t = (float)s / steps;
    for (int j = 0; j < 3; j++) {
      const float a = cur[j] + (target[j] - cur[j]) * t;
      pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
    }
    delay(stepMs);
  }
  memcpy(cur, target, sizeof(cur));
}

Alle Gelenke gemeinsam zu interpolieren zählt so viel wie das Glätten selbst. Gelenke einzeln nacheinander zu bewegen schickt das Werkzeug auf einem seltsamen Bogen durch den Arbeitsraum – langsamer und weit eher kollidierend auf dem Weg.

Wie gut aussieht

Messung Acrylbausatz, SG90s Aluminium, MG90S
Wiederholbarkeit, gleiche Anfahrrichtung ±3–5 mm ±1–2 mm
Wiederholbarkeit, gemischte Anfahrrichtungen ±8–15 mm ±3–5 mm
Nutzlast bei voller Streckung 20–30 g 40–60 g
Durchhang bei voller Streckung, unbelastet 3–8 mm 1–3 mm

Die Lücke zwischen den zwei Wiederholbarkeitszeilen ist das Spiel, und es ist die größte einzelne Fehlerquelle an einem Hobbyarm. Vier Grad Spiel an der Schulter sind bei 190 mm Reichweite über 13 mm am Greifer. Die praktische Antwort ist keine bessere Mathematik – sondern ein Ziel immer aus derselben Richtung anzufahren, was den Vorzeichenwechsel vollständig entfernt und aus einem ±13-mm-Fehler einen wiederholbaren Offset macht, den du herauskalibrieren kannst.

Fehlersuche

Symptom Wahrscheinliche Ursache Lösung
Arm greift völlig daneben Horn in willkürlichem Winkel aufgesteckt Jeden Servo vor Hornmontage auf 90° homen
Ein Gelenkbereich ~18° versetzt Horn einen Verzahnungszahn daneben Abziehen und neu aufstecken – Software repariert das nicht
Greift vorn richtig, spiegelt hinten atan statt atan2 atan2 löst alle vier Quadranten auf
IK liefert NaN, Arm macht Satz acos-Argument außerhalb −1..1 Erreichbarkeit vor der Trigonometrie prüfen
Ziele nahe dem Fuß scheitern Im Mindestreichweiten-Loch Korrektes Verhalten – der Arbeitsraum ist ein Ring
Board setzt bei Armbewegung zurück Servostrom durch den Arduino Separate V+-Versorgung, gemeinsame Masse, 1000-µF-Kondensator
Arm hängt bei voller Streckung durch Schulter jenseits ihres Wohlfühlmoments MG90S an der Schulter; mit Gummiband gegenfedern
Brummt beim Halten einer Pose Servo kämpft unter Last an der Grenze Last reduzieren oder detach, wenn Halten unnötig ist
Gelenkgeschwindigkeitsspitzen nahe voller Streckung Durch Singularität gefahren Geplante Bahnen mit Marge zur Grenze halten
Landet je nach Richtung anders Spiel Immer aus derselben Richtung anfahren
Alle Winkel konsistent zu kurz PCA9685-Oszillator nicht exakt 25 MHz Echte Ausgangsfrequenz messen und setOscillatorFrequency aufrufen

Wie es weitergeht

Geradenfahrt hinzufügen. In Gelenkraum zu interpolieren wie im Code oben lässt das Werkzeug einer Kurve folgen. In kartesischem Raum zu interpolieren – IK an jedem Schritt entlang einer Geraden zu rechnen – lässt es gerade fahren, was jeder echte Pick-and-Place braucht. Kleine Änderung, und hier hören Singularitäten auf, theoretisch zu sein: Eine Gerade durch Nahe-Vollstreckung verlangt enorme Gelenkgeschwindigkeiten.

Kamera hinzufügen und den Kreis schließen. Alles hier ist offener Kreis: Der Arm fährt, wohin man ihm sagt, und prüft nie. Eine Kamera, die einen ArUco-Marker auf dem Objekt liest, lässt den Arm den Fehler aus Spiel und Durchhang korrigieren – so wird aus einem billigen Arm ein genauer.

Hardware hochrüsten, wenn die Decke erreicht ist. Aluminiumlinks nehmen den größten Teil der Biegung, MG90S- Servos den größten Teil des Spiels, und ein 6-DOF-Arm fügt ein Handgelenk hinzu, sodass der Anfahrwinkel des Werkzeugs dir gehört. Nichts ändert die Mathematik: Der Zwei-Link-Solver, den du hier geschrieben hast, ist derselbe, den ein besserer Arm nutzt – genau deshalb hat sich das billige Gestell als Erstes gelohnt.

Projekt-Roadmap

Der Baupfad

Folge dem Technikbaum von den Bauteilen bis zum funktionierenden Roboter. Jeder Knoten wird freigeschaltet, sobald seine Voraussetzungen erledigt sind, und dein Fortschritt wird auf diesem Gerät gespeichert.

0 / 13 erledigt

100%
Bau

Arm verdrahten

40 Min.

Bau

Servo-Home und Grenzen kalibrieren

30 Min.

Bau

Inverse Kinematik auf Hardware fahren

45 Min.

Ziel

4-DOF-Roboterarm fertig

Du hast es gebaut

Bauteile

Tutorials in diesem Pfad

Üben, bevor du verdrahtest

Im Live-Simulator abstimmen

Der Baupfad führt durch ein Browser-Labor. Bring das Verhalten hier in Ordnung und übertrage deine Einstellungen dann auf den echten Roboter.

Häufig gestellte Fragen

Wie baut man einen Roboterarm mit Arduino?

Vier Servos in ein 4-DOF-Gestell montieren – Fuß, Schulter, Ellbogen und Greifer – und per PCA9685 über I²C ansteuern, damit dem Arduino die PWM-Pins nicht ausgehen. Den Winkel-zu-Puls-Bereich jedes Servos kalibrieren, dann Zielpunkte an einen Zwei-Link-IK-Solver geben, der Schulter- und Ellbogenwinkel zurückliefert. Dieser Lernpfad geht die ganze Kette durch, und du erkundest die Geometrie zuerst in einem Simulator, bevor du etwas verdrahtest.

Wie viele Servos braucht ein 4-DOF-Roboterarm?

Vier – einen pro Freiheitsgrad: Drehfuß, Schulter, Ellbogen und Greifer. Jeder Servo braucht seinen eigenen PWM-Kanal – genau deshalb nutzt ein mehrgelenkiger Arm einen PCA9685-Treiber statt der Handvoll Hardware-PWM-Pins des Arduino.

Brauche ich einen PCA9685 für einen Roboterarm?

Er ist das richtige Werkzeug, wenn auch nicht strikt nötig. Vier Servos laufen auch am Arduino, wenn man sie separat versorgt – doch der PCA9685 entlastet die Timer des Mikrocontrollers, treibt jedes Gelenk über zwei I²C-Pins und führt den Servostrom über seine eigene V+-Versorgung, was den hohen Strom von der Logik fernhält und das Board vor Einbrüchen schützt.

Muss ich Bauteile kaufen, bevor ich mit diesem Projekt beginne?

Nein. Kinematik und Posenlösung laufen im Browser-Simulator, sodass du Reichweite, die zwei Lösungen und unerreichbare Posen des Arms verstehen und erkunden kannst, bevor du etwas kaufst. Nur die letzten Schritte – Verdrahtung, Kalibrierung und IK-Lauf – brauchen den echten Arduino, PCA9685, Servos, Armgestell und Stromversorgung.

Wie wird inverse Kinematik in einem Roboterarm genutzt?

Vorwärtskinematik sagt dir, wo das Werkzeug bei gegebenen Gelenkwinkeln landet; inverse Kinematik macht das nützliche Gegenteil – bei gegebenem Zielpunkt liefert sie die Gelenkwinkel, die ihn erreichen. Für diesen Arm bilden Schulter und Ellbogen einen planaren Zwei-Link-Solver, der Fuß zielt diese Ebene, und der Greifer greift. Im Simulator siehst du den Solver arbeiten, inklusive Zielen außerhalb der Reichweite.