Inhaltsverzeichnis:

Arduino gesteuerter Roboterarm mit 6 Freiheitsgraden - Gunook
Arduino gesteuerter Roboterarm mit 6 Freiheitsgraden - Gunook

Video: Arduino gesteuerter Roboterarm mit 6 Freiheitsgraden - Gunook

Video: Arduino gesteuerter Roboterarm mit 6 Freiheitsgraden - Gunook
Video: Arduino and 6DOF Robot ARM 2024, Juli
Anonim
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden
Arduino-gesteuerter Roboterarm mit 6 Freiheitsgraden

Ich bin Mitglied einer Robotikgruppe und jedes Jahr nimmt unsere Gruppe an einer jährlichen Mini-Maker Faire teil. Ab 2014 beschloss ich, für jedes Jahr ein neues Projekt aufzubauen. Ich hatte damals etwa einen Monat vor der Veranstaltung Zeit, um etwas zusammenzustellen und hatte keine Ahnung, was ich machen wollte.

Ein Kollege hat einen Link zu "einem interessanten Open-Source-Roboterarmbau" gepostet, der mein Interesse geweckt hat. Die Pläne waren nur ein Arm ohne Kontrollen oder einen Controller. In Anbetracht meiner Zeitbeschränkungen schien es ein wirklich guter Ausgangspunkt zu sein. Das einzige Problem war, dass ich wirklich keine Werkzeuge hatte, um loszulegen.

Mit Hilfe einiger Gruppenmitglieder konnte ich die Acrylteile schneiden und mir sowie die beiden unten gezeigten 3D-gedruckten Teile zusenden lassen. Kombiniert mit einigen Hardwarebestellungen über Nacht und mehreren Fahrten zum örtlichen Baumarkt, habe ich am Abend vor der Veranstaltung ein Arbeitsprojekt abgeschlossen!

Wie es normalerweise der Fall ist, gibt es mehr in der Geschichte und mehrere Inkarnationen des Builds, die auf das, was Sie unten sehen, verdichtet wurden. Wer Interesse an der Hintergrundgeschichte hat, findet hier mehr:

Schritt 1: Was Sie brauchen - Hardware & Elektronik

Was Sie brauchen - Hardware & Elektronik
Was Sie brauchen - Hardware & Elektronik
Was Sie brauchen - Hardware & Elektronik
Was Sie brauchen - Hardware & Elektronik

Der ursprüngliche Projektdesigner lebte in Europa und verwendete anschließend metrische Maße und dort übliche Materialien. Zum Beispiel war der Pressspan, den er für die Karosserie verwendete, ein Standard von 5 mm dick. Ähnliches Material hier in den USA ist 1/8 mit einer Dicke von etwa 3,7 mm. Dies hinterließ eine Lücke in den Öffnungen, die ursprünglich zum Einpressen vorgesehen waren. Anstatt die Zeichnungen zu korrigieren, habe ich einfach Gorilla Glue verwendet, um diese Verbindungen zu sichern.

Er verwendete auch M3-Gewindemuttern und -Schrauben, die in Ihrem örtlichen Baumarkt in den USA nicht Standard sind. Anstatt diese in lokal verfügbare Optionen umzuwandeln, habe ich die Hardware einfach online bestellt, wie in meiner Teileliste unten gezeigt.

  • 22 - M3 x 0,5 x 23 mm Abstandshalter
  • 15 - M3 x 15mm Distanzstücke
  • 40 - M3-Schrauben
  • M3 Sechskantmuttern
  • M3 25mm Schrauben
  • 1 - Frühling
  • 3/4" Doppelseitiges Montageband
  • 5 - SG 5010 TowerPro-Servo
  • 1 - SG92R TowerPro Mini-Servo
  • 1 - SG90 TowerPro Mini-Servo
  • 2,54 mm einreihige gerade Stiftleiste
  • 1 - Halbgroßes Steckbrett
  • 1 - Weibliche/Männliche 'Erweiterung'-Überbrückungsdrähte - 40 x 6"
  • 1 - 12 "x 24" Blue Acrylic Sheet oder die lasergeschnittenen Stücke von Ihrem bevorzugten Dienstleister
  • 2 - 3 mm x 20 mm + 4 mm x 5 mm Gelenklager-Abstandshalter 3D-gedruckt (siehe unten)
  • 1 - Bedienfeld *Siehe Hinweis im Abschnitt zur Verkabelung
  • 1 - Diffuse RGB (dreifarbig) 10 mm LED
  • 1 - Arduino Uno
  • 1 - Standard-LCD 16x2 + Extras - Weiß auf Blau
  • 1 - i2c / SPI-Zeichen-LCD-Rucksack
  • 1 - Adafruit 16-Kanal-12-Bit-PWM/Servo-Treiber
  • 1 - MCP3008 - 8-Kanal 10-Bit-ADC mit SPI-Schnittstelle
  • 3 - JoyStick Breakout-Modulsensor *Siehe Hinweis im Abschnitt zur Verkabelung
  • DC-Barrel-Buchse
  • AC-zu-DC-Adapter
  • Servo-Verlängerungskabel - verschiedene Längen

Fast alle Teile für diesen Arm wurden aus 1/8 Zoll Acryl geschnitten. Die beiden Gelenklager-Abstandshalter müssen jedoch gedruckt werden. Außerdem sah das Originaldesign vor, dass die beiden gemeinsamen Distanzstücke 7 mm hoch zur Lagerwelle sein sollten. Als ich mit der Montage des Oberarms begann, war schnell klar, dass diese aufgrund der Höhe der TowerPro-Servos zu hoch waren. Ich musste neue Gelenklager mit einer nur 3mm hohen Basis anfertigen lassen, die übrigens noch etwas zu groß, aber überschaubar war. Beachten Sie die relative Höhe Ihrer Servos und berücksichtigen Sie den Abstand zwischen den beiden Unterarmen:

Servohöhe + Servohorn + Gelenklager + doppelseitiges Klebeband = 47mm +/- 3mm.

Schritt 2: Armmontage

Armbaugruppe
Armbaugruppe
Armbaugruppe
Armbaugruppe
Armbaugruppe
Armbaugruppe
Armbaugruppe
Armbaugruppe

Bevor Sie beginnen, stellen Sie sicher, dass alle Ihre Servos zentriert sind! Wenn Sie zu irgendeinem Zeitpunkt während des Baus die Position des Servos manuell verschieben, müssen Sie es neu zentrieren, bevor Sie es am Rahmen befestigen. Dies ist besonders bei Schulterservos wichtig, die sich immer im Gleichtakt bewegen müssen.

  1. Befestigen Sie das Basisservo mit den M3 25mm Schrauben und Sechskantmuttern an der oberen Basisplatte. Nicht zu fest anziehen!HINWEIS: Möglicherweise möchten Sie die Gewinde fest anziehen, um das Lösen der Muttern während des Gebrauchs zu minimieren.

  2. Wenn Sie die Teileliste verwenden, die ich oben habe, möchten Sie als nächstes die 5 Basisabstandshalter montieren, indem Sie jeweils 2 der M3 x 0,5 x 23 mm Abstandshalter zusammenschrauben und sie dann mit Sechskantmuttern an der oberen Basisplatte befestigen.
  3. Befestigen Sie die untere Grundplatte mit 5 M3-Schrauben an den Abstandshaltern.
  4. Befestigen Sie die Schulterplatte mit einem sicheren Acrylkleber an den beiden Servomontageplatten. Ich habe hier Gorilla Glue verwendet. HINWEIS: Jede der beiden Servoplatten hat an der Rückseite ein Loch, das das Einfügen eines Verstärkungsabstandshalters ermöglicht, der sie verbindet. Achten Sie darauf, dass die Löcher fluchten!* Während Sie den Kleber zur Hand haben, können Sie die Handgelenk-Montageplatte mit der Greifer-Hauptplatte verbinden.* Optional können Sie die Handgelenk-Servoplatte auch auf die beiden Handgelenksplatten kleben. Ich habe dies nicht getan und mich stattdessen dafür entschieden, diese mit Abstandshaltern zusammenzuschrauben, wie unten beschrieben.

  5. Befestigen Sie die nun ausgehärtete Schulterbaugruppe am Basisservo. Ich benutzte das breiteste Horn, das mit dem Servo geliefert wurde, das das Horn mit sechs Stielen war.
  6. Das Hinzufügen des Unterarmrahmens zu den Schulterservos kann schwierig sein. Ich schlage vor, die Hörner an den Unterarmrahmen zu befestigen, bevor Sie fortfahren. HINWEIS: Stellen Sie sicher, dass Ihre Servos für die Schulterbaugruppe zentriert sind, BEVOR Sie sie am Rahmen befestigen. Diese beiden Servos müssen sich im Gleichklang bewegen, und wenn sie falsch ausgerichtet sind, verursachen sie mindestens Servo-Jitter und können bei ausreichender Ausrichtung den Rahmen oder die Servos beschädigen. * Jedes der Schulterservos wird mit seinen Halterungen auf der Rückseite der Montageplatten montiert, anstatt die Servos durch die Platten zu führen - so können Sie das Horn schräg auf die Servowelle schieben und die Schraube sichern. Befestigen Sie das Servo noch nicht an der Montageplatte. * Als nächstes fügen Sie das innere Servo hinzu und montieren den Arm
  7. Montieren Sie den Oberarmrahmen und die Servos, indem Sie die Servos durch die Zwischenräume in den Armen schieben und dann die Distanzstücke zwischen die beiden Oberarmplatten stecken und mit M3-Schrauben befestigen.
  8. Kleben Sie doppelseitiges Klebeband auf die Rückseite des Ellenbogenabstandshalters und schneiden Sie den Überschuss ab.
  9. Befestigen Sie den Abstandshalter an der Unterseite des Servos, der als Ellbogenaktuator fungiert.
  10. Schieben Sie die Oberarmbaugruppe in den Unterarmbaugruppenrahmen und sichern Sie die Servohornschrauben.
  11. Fügen Sie Verstärkungsabstandshalter zwischen zwei Unterarmplatten hinzu. Ich habe zwei statt alle vier verwendet, um das Gewicht zu senken.
  12. Kleben Sie doppelseitiges Klebeband auf die Rückseite des Abstandhalters für das obere Handgelenk und schneiden Sie den Überschuss ab.
  13. Bringen Sie den Abstandshalter an der Unterseite des Servos an, der als Handgelenkaktuator fungiert.
  14. Befestigen Sie die äußere Handgelenkplatte am Handgelenkservohorn und sichern Sie sie mit einer Hornschraube.
  15. Montieren Sie die Handgelenkservoplatte mit den beiden Handgelenkplatten und Abstandshaltern.
  16. Sichern Sie das Handgelenkservo auf der Servoplatte mit der Servoklemmplatte.
  17. Sie müssen das Handgelenkshorn am Servo befestigen, bevor Sie die Greiferbaugruppe an diesem Horn befestigen, da die Öffnung für die Hornschraube blockiert ist.
  18. Montieren Sie die Greiferstücke lose auf Passung, bevor Sie das Greiferservohorn am Servo anbringen. Dadurch haben Sie Platz, um das Horn im vorherigen Schritt festzuschrauben.
  19. Befestigen Sie das Greiferhorn an seinem Servo und ziehen Sie die Schrauben, die die Greifergelenke halten, weiter fest. HINWEIS: Ziehen Sie diese Muttern und Schrauben nicht vollständig an, da sie locker sein müssen, damit sich der Greifer bewegen kann.

Schritt 3: Verkabelung und Bedienfeld

Verkabelung und Bedienfeld
Verkabelung und Bedienfeld
Verkabelung und Bedienfeld
Verkabelung und Bedienfeld
Verkabelung und Bedienfeld
Verkabelung und Bedienfeld

Ich habe dieses Projekt als Entwicklungsplattform für einige Ideen gebaut, die ich für ein späteres Bildungsprojekt habe. Die meisten meiner Verbindungen sind also einfache Dupont-Anschlüsse. Das einzige Löten, das ich gemacht habe, war für den MCP3008. Wenn Sie eine Breakout-Platine für dieses Bauteil finden, sollten Sie diesen Arm lötfrei konstruieren können.

Es gibt 3 Gruppen von Komponenten:

  1. Eingänge - Diese Elemente nehmen Informationen vom Benutzer auf und bestehen aus den Joysticks und dem mcp3008 ADC.
  2. Ausgänge - Diese Elemente übermitteln Daten an die Welt, indem sie entweder dem Benutzer den Status anzeigen oder die Servos mit Positionsdaten aktualisieren. Diese Elemente sind der LCD-Bildschirm, der LCD-Rucksack, die RGB-LED, die Servotreiberplatine und schließlich die Servos.
  3. Verarbeitung - Der Arduino schließt die letzte Gruppe ein, die die Daten von den Eingängen aufnimmt und Daten gemäß den Codeanweisungen an die Ausgänge ausgibt.

Das obige Fritzing-Schema beschreibt die Pin-Anschlüsse für alle Komponenten.

Eingänge

Wir beginnen mit den Eingaben. Die Joysticks sind analoge Geräte - das heißt, sie geben dem Arduino eine variable Spannung als Eingang an. Jeder der drei Joysticks hat zwei analoge Ausgänge für X und Y (oben, unten, links rechts), was insgesamt 6 Eingänge zum Arduino ergibt. Während der Arduino Uno über 6 analoge Eingänge verfügt, müssen wir zwei dieser Pins für die I2C-Kommunikation mit dem Bildschirm und dem Servocontroller verwenden.

Aus diesem Grund habe ich den Analog-Digital-Wandler (ADC) MCP3008 eingebaut. Dieser Chip nimmt bis zu 8 analoge Eingänge auf und wandelt sie über die SPI-Kommunikationspins des Arduino wie folgt in ein digitales Signal um:

  • MCP Pins 1-6 > Variable Ausgänge der Daumen-Joysticks
  • MCP-Pins 7 & 8 > Keine Verbindung
  • MCP-Pin 9 (DGND) > Masse
  • MCP-Pin 10 (CS/SHDN) > Uno-Pin 12
  • MCP-Pin 11 (DIN) > Uno-Pin 11
  • MCP-Pin 12 (DOUT) > Uno-Pin 10
  • MCP-Pin 13 (CLK) > Uno-Pin 9
  • MCP Pin 14 (AGND) > Masse
  • MCP-Pin 15 & 16 > +5V

Die Joystick-Anschlüsse im Schaltplan dienen nur als Beispiel. Je nachdem welche Joysticks gekauft werden und wie sie montiert sind, können Ihre Anschlüsse von meinen abweichen. Unterschiedliche Marken des Joysticks können eine unterschiedliche Pinbelegung haben und können auch X und Y unterschiedlich ausrichten. Wichtig ist, zu verstehen, was jeder Eingang auf dem ADC darstellt. Jeder Pin repräsentiert die folgenden Beziehungen in meinem Code:

  • Pin 1 - Die Basis - Analoge Daten auf diesem Pin drehen das unterste Servo des Roboters
  • Pin 2 - The Shoulder - Analoge Daten auf diesem Pin drehen die beiden Servos über dem Basisservo
  • Pin 3 - The Elbow - Analoge Daten an diesem Pin drehen das nächste Servo von den Schulterservos nach oben
  • Pin 4 - UP/DN Wrist - Analoge Daten auf diesem Pin drehen das Handgelenkservo, heben und senken die Greiferbaugruppe
  • Pin 5 – Der Greifer – Analoge Daten auf diesem Pin öffnen und schließen den Greifer
  • Pin 6 – Handgelenk drehen – Analoge Daten auf diesem Pin drehen den Greifer

HINWEIS: Beachten Sie beim Kauf und der Montage der Daumen-Joysticks, auf die in der Teileliste verwiesen wird, dass die Ausrichtung der Module von meiner abweichen kann. Wenn Sie mein 3D-gedrucktes Bedienfeld verwenden, können die Befestigungslöcher von meinen versetzt sein.

Ausgänge

Der Adafruit PWM / Servo Controller macht dieses Projekt super einfach. Schließen Sie einfach die Servos an die Servo-Header an und alle Strom- und Signalverbindungen werden behandelt. Sofern Sie keine Servos mit extra langen Kabeln finden, sollten Sie sich einen Satz Servokabelverlängerungen in unterschiedlichen Längen besorgen, damit alle Ihre Servokabel Ihre Controller-Platine erreichen.

Servos werden wie folgt angeschlossen:

  • Position 0 - Basisservo
  • Position 1 - Schulterservo (Servo Y-Kabel)
  • Position 2 - Winkelservo
  • Position 3 - Handgelenk 1 Servo
  • Position 4 - Greifer-Servo
  • Position 5 - Handgelenk 2 Servo

Außerdem sind VCC und V+ beide mit +5 Volt verbunden und GND ist mit Masse verbunden.

HINWEIS 1: Ein GROSSER Hinweis hier: Die Versorgungsspannung für das gesamte Projekt wird über den Stromanschlussblock auf der Servosteuerungsplatine zugeführt. Der V+-Pin des Servocontrollers versorgt den Rest der Schaltung tatsächlich mit Strom vom Klemmenblock. Wenn Sie Ihren Uno programmieren müssen, empfehle ich dringend, den V+-Pin zu trennen, bevor Sie den Uno an Ihren PC anschließen, da die Stromaufnahme von den Servos Ihren USB-Anschluss beschädigen könnte.

HINWEIS 2: Ich verwende einen 6-V-AC-DC-Wandadapter, um das Projekt mit Strom zu versorgen. Ich empfehle einen Adapter, der mindestens 4 A Strom liefern kann, damit, wenn ein oder mehrere der Servos gebunden werden, die plötzliche Stromspitze Ihr System nicht ausschaltet und Ihr Arduino zurücksetzt.

Der 16X2-LCD-Bildschirm wird an den Adafruit LCD-Rucksack angeschlossen, um die I2C-Schnittstelle zu nutzen, die bereits vom Servocontroller verwendet wird. Der SCL am Servo Controller und der CLK am Rucksack sind beide mit Pin A5 am Uno verbunden. Ebenso werden der SDA am Servo Controller und der DAT am Rucksack beide mit Pin A4 am Uno verbunden. Zusätzlich sind 5V mit +5 Volt und GND mit Masse verbunden. LAT auf dem Rucksack ist mit nichts verbunden.

Schließlich ist die RGB-LED mit den Pins 7 (ROT), 6 (Grün) und 5 (Blau) des Uno verbunden. Der Masseschenkel der LED ist über einen 330 Ohm Widerstand mit Masse verbunden.

wird bearbeitet

Zu guter Letzt sind die restlichen oben nicht aufgeführten Arduino-Anschlüsse wie folgt: Pin 5V ist mit +5 Volt verbunden und GND ist mit Masse verbunden.

In meinem Setup habe ich die Seitenschienen des Steckbretts verwendet, um alle Strom- und Masseleitungen sowie die I2C-Pins für alle Geräte zusammenzubinden.

Schritt 4: Code

Code
Code

Wie bereits erwähnt, habe ich dieses Projekt ursprünglich als Demonstration für meine lokale Maker Faire gebaut. Ich wollte, dass es etwas für Kinder und Erwachsene ist, mit dem sie an unserem Stand spielen können. Es stellte sich heraus, dass es viel beliebter war, als ich es mir vorgestellt hatte - so sehr, dass sich die Kinder darüber stritten. Als die Zeit für eine Neufassung kam, habe ich einen "Demo-Modus" eingebaut, der ein Zeitlimit implementiert.

Der Arm sitzt dort und wartet darauf, dass jemand einen Joystick bewegt, und wenn er dies tut, startet er einen 60-Sekunden-Timer. Am Ende der 60 Sekunden nimmt es keine Eingaben vom Benutzer mehr an und "ruht" für 15 Sekunden. Kurze Aufmerksamkeitsspannen sind das, was sie sind, diese Ruhezeit reduzierte den Streit um die Stickzeit erheblich.

Grundbetrieb

Der unten im Referenzabschnitt aufgeführte Code ist ziemlich einfach. Ein Array verfolgt die 6 Gelenke mit minimalen, maximalen Ausdehnungen, einer Ausgangsposition und der aktuellen Position. Wenn der Arm eingeschaltet wird, definiert die Startfunktion die Bibliotheken, die für die Kommunikation mit dem MCP3008, dem LCD-Rucksack (und anschließend dem Bildschirm) erforderlich sind, und definiert die LED-Pins. Von dort führt es eine grundlegende Systemüberprüfung durch und fährt mit dem Start des Arms fort. Die Home-Funktion beginnt beim Greifer und arbeitet sich bis zur Basis vor, so dass die Wahrscheinlichkeit eines Verklemmens unter normalen Bedingungen minimiert wird. Wenn der Arm vollständig ausgefahren ist, ist es möglicherweise am besten, den Arm manuell zu positionieren, bevor Sie ihn einschalten. Da generische Servos keine Rückmeldung über ihre Position liefern, müssen wir jeden an einem vordefinierten Punkt platzieren und verfolgen, wie weit jeder bewegt wurde.

Die Hauptschleife beginnt zunächst in einem Wartemodus - sucht nach den Joysticks, um sich von ihrer Mittelposition zu entfernen. Sobald dies geschieht, ändert die Hauptschleife den Zustand in den Countdown-Zustand. Wenn der Benutzer jeden Joystick bewegt, wird die relative Position des Joysticks von der Mitte aus zur aktuellen bekannten Position hinzugefügt oder davon abgezogen und das entsprechende Servo aktualisiert. Sobald ein Servo seine definierte Grenze in eine Richtung erreicht hat, stoppt der Joystick. Der Benutzer muss den Joystick in die andere Richtung bewegen, um ihn erneut zu bewegen. Dies ist ein Software-Limit, das den Servos unabhängig von ihren Hardware-Stopps auferlegt wird. Mit dieser Funktion können Sie die Bewegungen des Arms bei Bedarf innerhalb eines bestimmten Betriebsbereichs halten. Wenn der Joystick in die Mitte losgelassen wird, stoppt die Bewegung.

Dieser Code ist nur ein allgemeiner Ausgangspunkt. Sie können nach Belieben eigene Modi hinzufügen. Ein Beispiel kann ein zeitgeberloser Dauerlaufmodus sein oder die Joystick-Drucktasten als Eingaben hinzufügen und einen Aufnahme-/Wiedergabemodus schreiben.

Schritt 5: Links und Ressourcen

Arm-Referenzen

  • Beitrag, der dieses Projekt inspiriert hat
  • Blogposts von Original DesignersMein eigener RoboterarmMeine Mini-Servogreifer und der fertige Roboterarm Multiplizieren Sie den Roboterarm und die Elektronik
  • Thingiverse-Arm
  • Thingiverse Mini-Servogreifer

Softwarebibliotheken

  • Ressourcen für PWM/Servo-Controller von Adafruit
  • MCP3008-Bibliothek
  • MCP3008 Datenblatt

Bedienfeld und Code

  • Tinkercad-Zeichnung des Panels, das ich gemacht habe
  • Aktuelles Code-Repository

Empfohlen: