Projekt 23: Nachbau eines Roboters "LittleArm": Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:ProjekteET_MTR_BSE_WS2017]] | [[Kategorie:ProjekteET_MTR_BSE_WS2017]] | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
'''Autoren:''' [[ | '''Autoren:''' [[Benutzer:Joseph Balmer|Joseph Balmer]] und [[Benutzer:Fabian Linnemann|Fabian Linnemann]] | ||
'''Betreuer:''' [[Benutzer:Mirekgoebel|Prof. Dr. Mirek Göbel]] | '''Betreuer:''' [[Benutzer:Mirekgoebel|Prof. Dr. Mirek Göbel]] | ||
[[Datei:LittleArmBig.JPG|400px|thumb|right|(Abb.1) LittleArmBig <ref> [https://create.arduino.cc/projecthub/slantconcepts/littlearm-big-bcc093?ref=platform&ref_id=424_trending___&offset=172 create.arduino.cc] </ref>]] | |||
==Einleitung== | ==Einleitung== | ||
Der folgende Artikel befasst sich mit dem Projekt 23: ''Nachbau eines Roboters "LittleArm"'' des | Der folgende Artikel befasst sich mit dem Projekt 23: ''Nachbau eines Roboters "LittleArm"'' des [http://193.175.248.52/wiki/index.php/Kategorie:ProjekteET_MTR_BSE_WS2017 GET-Fachpraktikums], welches im fünften Semester des Studiengangs Mechatronik an der Hochschule Hamm-Lippstadt bearbeitet wurde. | ||
==Aufgabenstellung== | ==Aufgabenstellung== | ||
Das Projekt befasste sich mit der Entwicklung und dem Aufbau eines interaktiven 6-Achs-Roboter. Erwartungen der Projektlösung waren dabei: | 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 | *Recherche bisheriger Lösungen | ||
*Entwurf der Schaltung, Konstruktion des Tischaufbaus und Beschaffung der Bauteile inkl. 3D-Druck | *Entwurf der Schaltung, Konstruktion des Tischaufbaus und Beschaffung der Bauteile inkl. 3D-Druck | ||
Zeile 19: | Zeile 21: | ||
==Projektplan== | ==Projektplan== | ||
Folgender Abschnitt | Folgender Abschnitt listet unsere zuvor geplante Durchführung des Projektes auf. Die Punkte sind dabei als einzelne Schritte zu sehen. | ||
# Recherche | # Recherche | ||
Zeile 47: | Zeile 49: | ||
| 3 | | 3 | ||
| Tower Pro Micro Servo Motor MG90S | | Tower Pro Micro Servo Motor MG90S | ||
| | | [https://www.littlearmrobot.com/store/p10/MG90Sservo littlearmrobot.com] | ||
| ~ 4,15 (4,99$) | | ~ 4,15 (4,99$) | ||
|- | |- | ||
Zeile 53: | Zeile 55: | ||
| 3 | | 3 | ||
| Tower Pro Digi High Speed Servo Motor MG995 | | Tower Pro Digi High Speed Servo Motor MG995 | ||
| | | [https://www.littlearmrobot.com/store/p28/MG995 littlearmrobot.com] | ||
| ~ 8,20 (9,99$) | | ~ 8,20 (9,99$) | ||
|- | |- | ||
Zeile 59: | Zeile 61: | ||
| 1 | | 1 | ||
| Arduino Uno Rev3 | | Arduino Uno Rev3 | ||
| | | [https://store.arduino.cc/arduino-uno-rev3 arduino.cc] | ||
| 20,00 | | 20,00 | ||
|- | |- | ||
| 4 | | 4 | ||
| 1 | | 1 | ||
| LittleArm Big 3D CAD-Zeichnung | | LittleArm Big 3D CAD-Zeichnung | ||
| | | [https://www.littlearmrobot.com/store/p15/LittleArm_Big_3D_Printing_Files.html littlearmrobot.com] | ||
| ~ 16,40 (20,00$) | | ~ 16,40 (20,00$) | ||
|} | |} | ||
Zeile 76: | Zeile 78: | ||
Im folgenden Absatz werden jeweilige Teile kurz dargestellt und beschrieben. | Im folgenden Absatz werden jeweilige Teile kurz dargestellt und beschrieben. | ||
[[Datei:Base.JPG|200px|thumb|right|(Abb.2) Basis <ref> Eigenes Bild </ref>]] | |||
====Basis==== | ====Basis==== | ||
Bei der Basis handelt es sich um die Grundfläche des ''LittleArm''. Diese ist mit einem Tower Pro Digi High Speed MG995 Servo Motor ausgestattet | Bei der Basis (Abb.2) handelt es sich um die Grundfläche des ''LittleArm''. Diese ist mit einem [http://193.175.248.52/wiki/index.php/Projekt_23:_Nachbau_eines_Roboters_%22LittleArm%22#Tower_Pro_Digi_High_Speed_Servo_Motor_MG995 Tower Pro Digi High Speed MG995 Servo Motor] ausgestattet | ||
welche den Arm bei Bedarf um 120° drehen kann, 60° in jede Richtung. | welche den Arm bei Bedarf um 120° drehen kann, 60° in jede Richtung. | ||
Außerdem | Außerdem befinden sich in der Basis, Löcher in welche man Saugnäpfe befestigen kann damit der ''LittleArm'' stabil auf Oberflächen stehen kann. | ||
---- | |||
[[Datei:Schulter.JPG|200px|thumb|right|(Abb.3) Schultergelenk <ref> Eigenes Bild </ref>]] | |||
====Schultergelenk==== | ====Schultergelenk==== | ||
Das Schultergelenk 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. | 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 | 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. | ||
---- | |||
[[Datei:Oberarm.JPG|200px|thumb|right|(Abb.4) Oberarm <ref> Eigenes Bild </ref>]] | |||
====Oberarm==== | ====Oberarm==== | ||
Der Oberarm ist | Der Oberarm (Abb.4) ist ein 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. | ||
---- | |||
[[Datei:Ellenbogen.JPG|200px|thumb|right|(Abb.5) Ellenbogen <ref> Eigenes Bild </ref>]] | |||
====Ellenbogen==== | ====Ellenbogen==== | ||
Der Ellenbogen 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''. | 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. | Er ist durch eine Klebverbindung an der Manschette befestigt. | ||
---- | |||
[[Datei:Manschette.JPG|200px|thumb|right|(Abb.6) Manschette <ref> Eigenes Bild </ref>]] | |||
====Manschette==== | ====Manschette==== | ||
Die Manschette ist ähnlich wie das Schultergelenk ein Verbindungsstück zwischen dem Greifmechanismus und dem Rest des ''LittleArm''. | 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. | Die Manschette ist via Klebeverbindung an dem Ellenbogen und durch den [http://193.175.248.52/wiki/index.php/Projekt_23:_Nachbau_eines_Roboters_%22LittleArm%22#Tower_Pro_Micro_Servo_Motor_MG90S Tower Pro Micro Servo Motor MG90S] mit dem Greifgelenk verbunden. | ||
---- | |||
[[Datei:Wrist.JPG|200px|thumb|right|(Abb.7) Greifgelenk <ref> Eigenes Bild </ref>]] | |||
====Greifgelenk==== | ====Greifgelenk==== | ||
Das Greifgelenk 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. | 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. | Am Greifgelenk wird unter anderem der Greifer montiert, welcher auch mit einem Tower Pro Micro Servo Motor MG90S gesteuert wird. | ||
---- | |||
[[Datei:Greifer.JPG|200px|thumb|right|(Abb.8) Greifer <ref> Eigenes Bild </ref>]] | |||
[[Datei:Finger.JPG|200px|thumb|right|(Abb.9) Finger <ref> Eigenes Bild </ref>]] | |||
====Greifer==== | ====Greifer==== | ||
Der Greifer besteht aus drei Einzelteilen: | Der Greifer besteht aus drei Einzelteilen: | ||
Zeile 105: | Zeile 165: | ||
*Finger | *Finger | ||
*Finger mit Servo | *Finger mit Servo | ||
Dabei ist die Hand mit dem Greifgelenk 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. | 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 | 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. | ||
---- | |||
[[Datei:Fritzing Skizze.jpg|200px|thumb|right|(Abb.10) Fritzing Skizze <ref> Eigenes Bild </ref>]] | |||
===Elektrische Komponenten=== | ===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. | Wie die Motoren mit dem Arduino verbunden sind kann man in der [http://193.175.248.52/wiki/index.php/Projekt_23:_Nachbau_eines_Roboters_%22LittleArm%22#Anschlusstabelle_der_Motoren Anschlusstabelle] nachschauen. Dabei wird kurz erläutert welcher Motor auf welchen Pin gesteckt wird. | ||
[[Datei:MG995.JPG|mini|thumb|right|(Abb.11) Tower Pro Digi High Speed Servo Motor MG995 <ref>[http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf Tower Pro Digi High Speed Servo Motor MG995 Data Sheet] </ref>]] | |||
[[Datei:MG90S.JPG|mini|thumb|(Abb.12) Tower Pro Micro Servo Motor MG90S <ref>[https://engineering.tamu.edu/media/4247823/ds-servo-mg90s.pdf Tower Pro Micro Servo Motor MG90S Data Sheet] </ref>]] | |||
====Tower Pro Digi High Speed Servo Motor MG995==== | ====Tower Pro Digi High Speed Servo Motor MG995==== | ||
Bei dem Tower Pro Digi High Speed Servo Motor MG995 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. | Bei dem Tower Pro Digi High Speed Servo Motor MG995 <ref>[http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf Tower Pro Digi High Speed Servo Motor MG995 Data Sheet] </ref> (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==== | ====Tower Pro Micro Servo Motor MG90S==== | ||
Bei dem Tower Pro Micro Servo Motor MG90S 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. | Bei dem Tower Pro Micro Servo Motor MG90S <ref>[https://engineering.tamu.edu/media/4247823/ds-servo-mg90s.pdf Tower Pro Micro Servo Motor MG90S Data Sheet] </ref> (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== | |||
{| class="mw-datatable" | |||
! style="font-weight: bold;" |Motor | |||
! style="font-weight: bold;" |PIN/Anschluss | |||
! style="font-weight: bold;" |GND | |||
! style="font-weight: bold;" |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 | |||
|} | |||
[[Datei:M995PWM.JPG|mini|thumb|left|(Abb.13) Anschlüsse des M995 Servo Motors <ref>[http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf Tower Pro Digi High Speed Servo Motor MG995 Data Sheet] </ref>]] | |||
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 Pulsweitenmodulation. Dies bedeutet, dass die Motoren durch schnelles An- und Ausschalten unterschiedlich schnell drehen können. Einen Ein-und Ausschalt-Durchlauf bezeichnet man als Periode. | |||
[[Datei:LittleArmGui.PNG|300px|thumb|right|(Abb.14) Grafische Oberfläche <ref> Eigenes Bild </ref>]] | |||
==Programm== | |||
Um den ''LittleArm'' anzusteuern steht eine Software [[https://www.littlearmrobot.com/uploads/3/8/4/8/38484491/littlearm_big_software.zip 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:''' | |||
<syntaxhighlight lang="python" line='line'> | |||
// 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 | |||
</syntaxhighlight> | |||
==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 Finetuning. | |||
==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 [[https://www.youtube.com/watch?v=FcD7hHUAh6w Video]]. | |||
Eine weitere Möglichkeit, welche denkbar wäre ist die Verbindung zu einer Kinect-Kamera mit Gestenerkennung [[http://193.175.248.52/wiki/index.php/Projekt_15:_Gestenerkennung_der_Kinect_zur_Ansteuerung_von_LED,_Servos_u.s.w. 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== | |||
[https://www.littlearmrobot.com/ Website Little Bots] | |||
[https://www.arduino.cc/ Website Arduino] | |||
[https://www.hshl.de/ Website Hochschule Hamm-Lippstadt] | |||
[http://www.towerpro.com.tw/ Website Tower Pro] | |||
==YouTube Video== | |||
t.b.a. (wird bei Vollendung des ''LittleArm'' gedreht) | |||
==Korrektur/Rückmeldungen== | |||
== Literaturverzeichnis == | |||
<references /> |
Aktuelle Version vom 21. Januar 2018, 20:34 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 befinden 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 ein 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.
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 Pulsweitenmodulation. Dies bedeutet, dass die Motoren durch schnelles An- und Ausschalten unterschiedlich schnell drehen können. Einen Ein-und Ausschalt-Durchlauf bezeichnet man als Periode.
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 Finetuning.
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. (wird bei Vollendung des LittleArm gedreht)
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