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.
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
Bauteile
- ControllerArduino UnoDas gutmütige 8-Bit-Board, über das die meisten die Robotik kennenlernen.
- TreiberPCA9685-Servotreiber16 Servos über zwei I²C-Pins treiben – die Platine hinter den meisten Roboterarmen und Hexapoden.
- AktorSG90-ServomotorDas Neun-Gramm-Servo hinter den meisten Roboterarmen, Greifern und Lenkungen.
- Chassis4-DOF Robot Arm KitDer Acryl- oder Metallrahmen, der vier Servos in einen Basis-Schulter-Ellbogen-Greifer-Manipulator verwandelt.
- StromversorgungRobot Battery & Power PackDer Unterschied zwischen einem Roboter, der läuft, und einem, der ständig neu startet.
Tutorials in diesem Pfad
- Fortgeschritten · 22 Min. LesezeitInverse Kinematik eines Zwei-GelenkarmsWarum ein Zwei-Gelenkarm zwei Lösungen hat, wohin er reichen kann und nicht, und was eine Singularität wirklich ist.
- Mittelstufe · 18 Min. LesezeitServos mit dem PCA9685 ansteuern (I²C-PWM-Treiber)Frequenz setzen, Winkel in Impulsbreiten umrechnen und 16 Servos an zwei I²C-Pins bewegen – sicher versorgt und kalibriert.
Ü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.