In diesem Beitrag möchte ich dir die 2DOF Klaue aus Aluminum vorstellen und zeigen wie diese zusammengebaut und programmiert wird.
Die Aluminium 2DOF Klaue habe ich über ebay* erstanden und wurde komplett zerlegt in einem kleinen Karton geliefert. Bei der Bestellung ist darauf zu achten, dass die benötigten Servomotoren enthalten sind bzw. diese extra bestellt werden müssen.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Unboxing
Als Erstes machen wir eine “Bestandsaufnahme”:
- 2 Servos (MG996R) (links im Bild)
- Winkel (oben rechts im Bild)
- Schrauben
- Aluminium Klaue (unten rechts im Bild)
Zusammenbauen
Um das Gerät zusammenzubauen, bedarf es eigentlich nur einer Anleitung, aber diese ist nicht Bestandteil des Pakets und im Internet ist auch nichts Adäquates zu finden, daher nutzte ich Grafiken und YouTube-Videos von fertigen Bauteilen bzw. von 6DOF Bausätzen. Dabei ist folgende Anleitung herausgekommen:
Benötigte Werkzeuge
- 4 mm Ringgabelschlüssel / Maulschlüssel, oder
- Engländer,
- Kreuzschraubendreher, (mittel und klein)
- Spitzzange,
- Geduld
Diese Aufbauanleitung habe ich wie eingangs im Kapitel erwähnt selber aus den Bildern und Videos “entwickelt” sicherlich gibt es noch andere Wege dieses Set zusammen zu setzen.
Qualität
Das Material der Schrauben ist nicht so hochwertig, daher sollte man beim Festziehen der Verbindungen aufpassen, quasi “Nach fest kommt ab!”.
Schritt 1 – die Klaue
1.1 Montage des Servomotors
Der Servomotor wird auf die vormontierten Stifte der Klaue montiert. Dazu werden 4 Schrauben benötigt.
Vorsicht beim Eindrehen der Schrauben, die “Mutter” ist aus Aluminium und bei zu viel Kraft und einer verkanteten Schraube kann hier ein neues schräges Gewinde geschnitten werden.
Dem Servo sind mehrere Ruderhörner beigefügt, für diesen Aufbau wird das aus Aluminium benötigt, denn dieses ist etwas flacher als das schwarze aus Plastik. Diese paar Millimeter sind entscheidend das die Zahnräder der Klaue korrekt ineinander greifen.
Links das Ruderhorn aus Aluminium mit einer Höhe von 5 mm und rechts das Ruderhorn aus Plastik mit einer Höhe von 6 mm.
1.2 Prüfen der “restlichen” Schrauben & Muttern
Da die Klaue ziemlich klapperte habe ich nochmal alle Verschraubungen nachgezogen.
Video
Die Teile an der Klaue waren Werkseitig montiert aber auch sehr lose daher habe ich diese nachdem zusammensetzen etwas angezogen.
Schritt 2 – das Gerüst
Bei der Montage des Gerüstes hat das Video einen deutlichen Vorteil gegenüber der Textbeschreibung, denn es sind 3 Winkel welche verbunden werden müssen.
2.1 Verbinden der Winkel
Der Winkel, an welchem der Servomotor montiert wird, wird über das Kugellager, einer Schraube und einer Mutter an den äußeren Winkel montiert. Danach wird an diesem der kleine Winkel mit 2 Schrauben und Muttern montiert.
2.3 Montage des Servomotors
Sind die Winkel montiert kann der Servomotor montiert werden, dazu wird zuerst das Ruderhorn aufgesteckt (noch nicht festgeschraubt!) und der Servo in die Halterung eingesetzt, ggf. muss hier etwas an dem Winkel gedrückt werden. Wenn der Servomotor in der korrekten Position sitzt, kann dieser nun mit den restlichen Schrauben, 5 Stück für das Ruderhorn und 4 stück für das Gehäuse des Servomotors festgeschraubt werden.
2.4 Montage der Klaue
Die Klaue wird im letzten Schritt montiert, hier ist nur eine passende Schraube & Mutter übrig geblieben. Für einen besseren Halt werde noch eine Schraube und Mutter aus “eigenem” Bestand nach rüsten.
Video
Fazit
Mit einer Aufbauanleitung wäre dieses Set von Anfang an frustfrei aufzubauen gewesen. Die Winkel und Schrauben sind aus einem leichten Material und daher mit etwas weniger Kraft zu bearbeiten.
Betrieb
In diesem Bausatz sind zwei Servos vom Typ MG996R verbaut.
Technische Daten:
- Gewicht ca. 55g
- Drehmoment 10 kg /cm
- Arbeitsgeschwindigkeit (bei 4.8V) 0,2 Sek / 60°
- Betriebsspannung 4.8V bis 7.2V
Da die Servos mit einer Spannung von min. 4.8V arbeiten könnte man meinen diese an den Arduino anzuschließen, um diese dort nicht nur mit Daten, sondern auch mit Strom zu versorgen, aber dieses ist keine gute Idee, denn der Arduino kann maximal 40mA pro Ausgang bereitstellen.
Stromversorgung
Die maximale Betriebsspannung der Servos liegt bei 7.2V und die Stromaufnahme zwischen 500mA und 900mA (max. 2.5A). Diese Daten können bei weitem nicht vom Arduino geliefert werden, daher nutze ich eine Batterie bzw. 4 AA-Batterien mit jeweils 1,5 V somit ergibt dieses eine Spannung von 6V.
Nachdem mir die Batterien ausgegangen sind habe ich zum 5V Netzteil gewechselt und muss sagen das dieses zuverlässiger ist als die Batterieversorgung.
Programmierung
Wie man einen Servomotor programmiert habe ich im Tutorial Arduino, Lektion 16: Servo ansteuern ausführlich erläutert.
Für die Steuerung der 2 DOF Klaue habe ich ein Gamepad organisiert welches die beiden Servos steuern soll.
Gamepad K845037
Dieses Gamepad verfügt über 4 Tasten welche kreuzweise angeordnet und mit den Bezeichnungen SW1..SW4 markiert sind. Zusätzlich ist noch ein Taster mit der Bezeichnung SW5 vorhanden, welcher aber in diesem Projekt nicht benutzt wird.
Das Gamepad wird über 3,3V betrieben und liefert je nach betätigtem Taster eine andere Spannung an den analogen Eingang des Arduinos. In meinem Fall habe ich das Gamepad an den Terminal angeschlossen und geprüft welcher Wert mir geliefert wird denn ich einen bestimmten Taster betätige. Dabei ist folgender Sketch entstanden welchen ich nun weiter verwenden möchte.
#define keyPadInput 0 void setup() { Serial.begin(9600); //Beginn der Seriellen Kommunikation } void loop() { //Lesen des Wertes auf dem Analogen Eingang int in = analogRead(keyPadInput); if(in == 0){ //Wenn der Wert gleich 0 ist Serial.println("SW1"); } else if(in >= 19 && in <= 20){ //Wenn der Wert zwischen 19 und 20 ist Serial.println("SW2"); } else if(in >= 56 && in <= 57){ //Wenn der Wert zwischen 56 und 57 ist Serial.println("SW3"); } else if(in >= 108 && in <= 109){ //Wenn der Wert zwischen 108 und 109 ist Serial.println("SW4"); } else if(in >= 230 && in <= 231){ //Wenn der Wert zwischen 230 und 231 ist Serial.println("SW5"); } }
Aufbau
Die Schaltung ist wie folgt aufgebaut:
Da die Software Fritzing kein Stromversorgungssymbol für 5V hat, habe ich hier eine 4,7V Batterieversorgung gewählt. Ich habe die Servos auch mit solch einem Batteriepack betreiben können, jedoch waren diese sehr langsam unterwegs.
Quellcode
#include <Servo.h> #define keyPadInput 0 #define buzzerPin 6 Servo servo1; Servo servo2; const int defaultServoPos1 = 65; const int defaultServoPos2 = 35; const int maxServo2Position = 89; const int minServo2Position = 35; const int maxServo1Position = 175; const int minServo1Position = 30; int servo1Position = defaultServoPos1; int servo2Position = defaultServoPos2; void setup() { servo1.attach(8); servo2.attach(10); Serial.begin(9600); } void loop() { //Lesen des Wertes auf dem Analogen Eingang int in = analogRead(keyPadInput); if(in == 0){ //Wenn der Wert gleich 0 ist wurde der Taster SW1 betätigt servo2Position--; setServo2Position(); } else if(in >= 19 && in <= 20){ //Wenn der Wert zwischen 19 und 20 ist wurde der Taster SW2 betätigt servo1Position++; setServo1Position(); } else if(in >= 56 && in <= 57){ //Wenn der Wert zwischen 56 und 57 ist wurde der Taster SW3 betätigt servo1Position--; setServo1Position(); } else if(in >= 108 && in <= 109){ //Wenn der Wert zwischen 108 und 109 ist wurde der Taster SW4 betätigt servo2Position++; setServo2Position(); } else if(in >= 230 && in <= 231){ //Wenn der Wert zwischen 230 und 231 ist wurde der Taster SW5 betätigt doReset(); } } void setServo1Position(){ setServoPosition(servo1,servo1Position, maxServo1Position, minServo1Position); } void setServo2Position(){ setServoPosition(servo2,servo2Position, maxServo2Position, minServo2Position); } void setServoPosition(Servo servo,int servoPosition, int maxServoPosition, int minServoPosition){ if(servoPosition <= maxServoPosition && servoPosition >= minServoPosition){ servo.write(servoPosition); } else { playTone(); } } void doReset(){ servo1Position = defaultServoPos1; servo2Position = defaultServoPos2; setServo1Position(); delay(1250); setServo2Position(); } void playTone(){ tone(buzzerPin, 1000); delay(250); noTone(buzzerPin); }
Danke für diesen tollen Blog. War sehr interessant zu lesen.