Projekt 23: Nachbau eines Roboters "LittleArm": Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 449: | Zeile 449: | ||
t.b.a. | t.b.a. | ||
==Korrektur/Rückmeldungen== | |||
== Literaturverzeichnis == | == Literaturverzeichnis == | ||
<references /> | <references /> |
Version vom 21. Januar 2018, 16:59 Uhr
Autoren: Joseph Balmer und Fabian Linnemann
Betreuer: Prof. Dr. Mirek Göbel
Einleitung
Der folgende Artikel befasst sich mit dem Projekt 23: Nachbau eines Roboters "LittleArm" des GET-Fachpraktikums, welches im fünften Semester des Studiengangs Mechatronik an der Hochschule Hamm-Lippstadt bearbeitet wurde.
Aufgabenstellung
Das Projekt befasste sich mit der Entwicklung und dem Aufbau eines interaktiven 6-Achs-Roboter (Abb.1). Erwartungen der Projektlösung waren dabei:
- Recherche bisheriger Lösungen
- Entwurf der Schaltung, Konstruktion des Tischaufbaus und Beschaffung der Bauteile inkl. 3D-Druck
- Realisierung der Schaltung durch Fertigung eines prototypischen Arduino-Uno-Shields
- Programmierung und Visualisierung
- Erstellen eines Videos
- Test und wissenschaftliche Dokumentation
Projektplan
Folgender Abschnitt listet unsere zuvor geplante Durchführung des Projektes auf. Die Punkte sind dabei als einzelne Schritte zu sehen.
- Recherche
- Besorgen der Materialien
- CAD-Zeichnung des Roboters
- 3D-Druck der Einzelkomponenten
- Montage der Einzelteile
- Suchen/Erstellen eines Programmes
- Simulieren der Funktionen
- Testen des Roboters
- Anpassen des Programmes oder des Roboters
- Test des Roboters
- Mögliche optische Anpassungen
- Dokumentation
Einkaufsliste/Bill of Material(BOM)
Folgende Liste zeigt die für das Projekt verwendeten Materialen an.
Pos. | Anzahl | Bauteil | Quelle | Stückpreis in € |
---|---|---|---|---|
1 | 3 | Tower Pro Micro Servo Motor MG90S | littlearmrobot.com | ~ 4,15 (4,99$) |
2 | 3 | Tower Pro Digi High Speed Servo Motor MG995 | littlearmrobot.com | ~ 8,20 (9,99$) |
3 | 1 | Arduino Uno Rev3 | arduino.cc | 20,00 |
4 | 1 | LittleArm Big 3D CAD-Zeichnung | littlearmrobot.com | ~ 16,40 (20,00$) |
Bauteile
Mechanische Komponenten
Bei den mechanischen Komponenten des LittleArm handelt es sich um eine Basis, ein Schultergelenk, einen Oberarm, eine Manschette, einen Ellenbogen und einen Greifer inklusive Gelenk. Im folgenden Absatz werden jeweilige Teile kurz dargestellt und beschrieben.
Basis
Bei der Basis (Abb.2) handelt es sich um die Grundfläche des LittleArm. Diese ist mit einem Tower Pro Digi High Speed MG995 Servo Motor ausgestattet welche den Arm bei Bedarf um 120° drehen kann, 60° in jede Richtung. Außerdem befindeen sich in der Basis, Löcher in welche man Saugnäpfe befestigen kann damit der LittleArm stabil auf Oberflächen stehen kann.
Schultergelenk
Das Schultergelenk (Abb.3) ist die Verbindungskomponente zwischen der Basis und dem Oberarm. Das Schultergelenk ist mit der Basis via dem Tower Pro Digi High Speed MG995 Servo Motor verbunden und kann sich um 120° drehen. Außerdem verbindet ein weiterer Tower Pro Digi High Speed MG995 Servo Motor den Oberarm mit dem Schultergelenk, der Motor hat dann auch die Möglichkeit den Oberarm um 120° vertikal zu bewegen.
Oberarm
Der Oberarm (Abb.4) ist das mechanische Bauteil welches fast ausschließlich aus einem langen Quader besteht, dieses fasst Motoren und Kabel. Der Oberarm ist für die vertikale Höhe des LittleArm zuständig. In dieser Komponente befinden sich zwei Tower Pro Digi High Speed MG995 Servo Motoren, einer verbindet, wie zuvor beschrieben den Oberarm mit dem Schultergelenk und der andere Motor steuert den Ellenbogen.
Ellenbogen
Der Ellenbogen (Abb.5) befindet sich zwischen dem Oberarm und der Manschette. Er ist in der Lage sich um 120° zu bewegen und steuert auch die vertikale Bewegung des LittleArm. Er ist durch eine Klebverbindung an der Manschette befestigt.
Manschette
Die Manschette (Abb.6) ist ähnlich wie das Schultergelenk ein Verbindungsstück zwischen dem Greifmechanismus und dem Rest des LittleArm. Die Manschette ist via Klebeverbindung an dem Ellenbogen und durch den Tower Pro Micro Servo Motor MG90S mit dem Greifgelenk verbunden.
Greifgelenk
Das Greifgelenk (Abb.7) wird durch den Tower Pro Micro Servo Motor MG90S an der Manschette befestigt und hat dadurch die Möglichkeit sich um 180° zu drehen, 90° in jede Richtung. Am Greifgelenk wird unter anderem der Greifer montiert welcher auch mit einem Tower Pro Micro Servo Motor MG90S gesteuert wird.
Greifer
Der Greifer besteht aus drei Einzelteilen:
- Hand
- Finger
- Finger mit Servo
Dabei ist die Hand mit dem Greifgelenk (Abb.8) verbunden und sorgt dafür, dass der LittleArm "um die Ecke" greifen kann. Durch den Tower Pro Micro Servo Motor MG90S ist die Winkeleinstellung von 180° möglich. Die Hand ist wiederum mit den zwei Fingern (Abb.9) verbunden, wobei einer durch einen weiteren Tower Pro Micro Servo Motor MG90S angesteuert wird. Da die Finger durch Zahnräder verbunden sind, können diese Objekte greifen und loslassen.
![](/wiki/images/thumb/3/3e/Fritzing_Skizze.jpg/200px-Fritzing_Skizze.jpg)
Elektrische Komponenten
Wie die Motoren mit dem Arduino verbunden sind kann man in der Anschlusstabelle nachschauen. Dabei wird kurz erläutert welcher Motor auf welchen Pin gesteckt wird.
Tower Pro Digi High Speed Servo Motor MG995
Bei dem Tower Pro Digi High Speed Servo Motor MG995 [13] (Abb.11) handelt es sich um einen Servo Motor der Marke Tower Pro. Der Servomotor ist auf einen Winkel von 60° je Richtung begrenzt und kann somit einen Winkel von 120° abdecken. Der Motor wird durch den Arduino auf 5V betrieben, da er eine Betriebsspannung von 4.8V bis 7.2V hat.
Tower Pro Micro Servo Motor MG90S
Bei dem Tower Pro Micro Servo Motor MG90S [14] (Abb.12) handelt es sich um einen Servo Motor der Marke Tower Pro. Der Servomotor ist auf einen Winkel von 90° je Richtung begrenzt und kann somit einen Winkel von 180° abdecken. Der Motor wird durch den Arduino auf 5V betrieben, da er eine Betriebsspannung von 4.8V bis 6V hat.
Anschlusstabelle der Motoren
Motor | PIN/Anschluss | GND | 5V |
---|---|---|---|
M995 (Basis) | ~3 | x | x |
M995 (Schulter) | ~5 | x | x |
M995 (Ellenbogen) | ~6 | x | x |
M90S (Manschette) | ~9 | x | x |
M90S (Greifer) | ~10 | x | x |
M90S (Finger) | ~11 | x | x |
Bei den Anschlüssen, die mit "~" gekennzeichnet sind handelt es sich um PWM Anschlüsse. Bei PMW (engl. für Pulse Width Modulation) handelt es sich um eine Pulsbreitenmodulation. Dies bedeutet, dass die Motoren durch schnelles an- und ausschalten unterschiedlich schnell drehen können. Einen Ein-und Ausschalt-Durchlauf wird als Periode bezeichnet.
Programm
Um den LittleArm anzusteuern steht eine Software [Download] der Firma LittleBots zur Verfügung. Diese bietet eine Grafische Oberfläche (Abb.14) um den LittleArm zu steuern oder Bewegungen aufzunehmen und abzuspielen. Zusätzlich ist der Einblick in den Quellcode möglich, wobei man diesen bearbeiten kann um zum Beispiel die Anschlusspins der Motoren zu ändern. Programm und Quellcode sind Open-Source und stehen frei zur Verfügung.
Quellcode:
// LittleArm 2C arduino code
// Allows serial control of the LittleArm Big 3D printed robot arm so that it can commmunicate with the Android or Windows App
// Designed for Arduino Nano with Meped Board
// Created by Slant Concepts
#include <Servo.h> //arduino library
#include <math.h> //standard c library
Servo baseServo;
Servo shoulderServo;
Servo elbowServo;
Servo wristRotServo;
Servo wristFlexServo;
Servo gripperServo;
struct jointAngle{
int base;
int shoulder;
int elbow;
int wRot;
int wFlex;
};
struct jointAngle desiredAngle; //desired angles of the servos
int desiredGrip;
int gripperPos;
int command;
int desiredDelay;
int servoSpeed = 15;
int ready = 0;
//+++++++++++++++FUNCTION DECLARATIONS+++++++++++++++++++++++++++
int servoParallelControl (int thePos, Servo theServo );
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup()
{
Serial.begin(9600);
baseServo.attach(3); // attaches the servo on pin 3 to the servo object
shoulderServo.attach(5);
elbowServo.attach(6);
wristRotServo.attach(9);
wristFlexServo.attach(10);
gripperServo.attach(11);
Serial.setTimeout(50); //ensures the the arduino does not read serial for too long
Serial.println("started");
//baseServo.write(90); //intial positions of servos
//shoulderServo.write(100);
//elbowServo.write(110);
ready = 0;
}
//primary arduino loop
void loop()
{
if (Serial.available()){
ready = 1;
desiredAngle.base = Serial.parseInt();
desiredAngle.shoulder = Serial.parseInt();
desiredAngle.elbow = Serial.parseInt();
desiredAngle.wRot = Serial.parseInt();
desiredAngle.wFlex = Serial.parseInt();
desiredGrip = Serial.parseInt();
desiredDelay = Serial.parseInt();
if(Serial.read() == '\n'){ // if the last byte is 'd' then stop reading and execute command 'd' stands for 'done'
Serial.flush(); //clear all other commands piled in the buffer
Serial.print('d'); //send completion of the command
}
}
int status1 = 0;
int status2 = 0;
int status3 = 0;
int status4 = 0;
int status5 = 0;
int status6 = 0;
int done = 0 ;
while(done == 0 && ready == 1){
//move the servo to the desired position
status1 = servoParallelControl(desiredAngle.base, baseServo, desiredDelay);
status2 = servoParallelControl(desiredAngle.shoulder, shoulderServo, desiredDelay);
status3 = servoParallelControl(desiredAngle.elbow, elbowServo, desiredDelay);
status4 = servoParallelControl(desiredAngle.wRot, wristRotServo, desiredDelay);
status5 = servoParallelControl(desiredAngle.wFlex, wristFlexServo, desiredDelay);
status6 = servoParallelControl(desiredGrip, gripperServo, desiredDelay);
if (status1 == 1 & status2 == 1 & status3 == 1 & status4 == 1 & status5 ==1 & status6 == 1){
done = 1;
}
}// end of while
}
//++++++++++++++++++++++++++++++FUNCTION DEFINITIONS++++++++++++++++++++++++++++++++++++++++++
int servoParallelControl (int thePos, Servo theServo, int theSpeed ){
int startPos = theServo.read(); //read the current pos
int newPos = startPos;
//int theSpeed = speed;
//define where the pos is with respect to the command
// if the current position is less that the actual move up
if (startPos < (thePos-3)){
newPos = newPos + 1;
theServo.write(newPos);
delay(theSpeed);
return 0;
}
else if (newPos > (thePos + 3)){
newPos = newPos - 1;
theServo.write(newPos);
delay(theSpeed);
return 0;
}
else {
return 1;
}
} //end servo parallel control
Ergebnis
- Beschaffung der Bauteile
- CAD-Zeichnung
- Komponenten des Armes im Druck
- Realisierung einer Schaltung
- Programmierung und Visualisierung
Fazit
Vorerst ist anzumerken, dass die komplette Vervollständigung des Projektes nicht durchführt werden konnte, dies ist mit Sicherheit einer fehlerhaften Zeitplanung zuzuschreiben. Die Hürde bei dem Projekt war dabei, dass keiner der Studenten, Erfahrungen mit Projektplänen hatte und der zeitliche Aufwand stark unterschätzt wurde. Des weiteren waren die nötigen Materialien nicht auf Rechnung bestellbar, weswegen die Bauteile, bis auf den noch in Arbeit befindenden 3D-Druck, privat besorgt wurden. Erstellung und die Arbeit mit den Programmen fand nicht auf praktischer Basis statt, da ein Zusammenspiel der Hard-und Software nicht möglich war.
Zum vervollständigen des Projektes fehlt noch der fertige 3D-Druck, mit möglichen Änderungen, die Montage des fertigen LittleArm, der Test mit der zugehörigen Software und dem dementsprechenden Finetunig.
Weiters Vorgehen
Nachdem der 3D-Druck erfolgt ist wird der LittleArm montiert und die nötigen Programme getestet. Des weiteren könnten Sensoren angeschlossen werden um den Arm zu steuern [Video]. Eine weitere Möglichkeit, welche denkbar wäre ist die Verbindung zu einer Kinect-Kamera mit Gestenerkennung [Projekt15: Gestenerkennung der Kinect zur Ansteuerung von LED, Servos u.s.w. aus dem WS 17/18: Fachpraktikum Elektrotechnik (MTR)] und die darauf folgende Gestensteuerung.
Persönliche Reflektion
Was wir persönlich aus der Projekt mitgenommen haben ist, dass mehr Wert auf die Komponente der Zeit bei der Projektplanung zu legen ist. Dadurch dass wir die Dauer des 3D-Drucks unterschätzen war es wie zuvor erwähnt nicht möglich den Arm zu montieren und ihn in der Praxis zu testen. Dies werden wir in folgenden Projekten berücksichtigen und uns besser vorbereiten. Es gibt viele Möglichkeiten das Projekt auszubauen oder neue zu bearbeiten.
Weblinks
Website Hochschule Hamm-Lippstadt
YouTube Video
t.b.a.
Korrektur/Rückmeldungen
Literaturverzeichnis
- ↑ create.arduino.cc
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Eigenes Bild
- ↑ Tower Pro Digi High Speed Servo Motor MG995 Data Sheet
- ↑ Tower Pro Micro Servo Motor MG90S Data Sheet
- ↑ Tower Pro Digi High Speed Servo Motor MG995 Data Sheet
- ↑ Tower Pro Micro Servo Motor MG90S Data Sheet
- ↑ Tower Pro Digi High Speed Servo Motor MG995 Data Sheet
- ↑ Eigenes Bild