Arduino – Aluminium 2DOF Klaue

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.

2DOF Aluminium Klaue (fertig aufgebaut)
2DOF Aluminium Klaue (fertig aufgebaut)

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)
Unboxing 2DOF Aluminium Klaue
Unboxing 2DOF Aluminium Klaue

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.

Ruderhorn für Servomotor MG996R
Ruderhorn für Servomotor MG996R

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

Zusammenbau eines 2DOF Bausatzes - Teil1: Klaue

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

Zusammenbau eines 2DOF Bausatzes - Teil2: Das Gerüst

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.

Batteriehalter 4xAA
Batteriehalter 4xAA

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

Gamepad K845037
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

Aufbau 2DOF Klaue mit Gamepad K845037 am Arduino UNO.
Aufbau 2DOF Klaue mit Gamepad K845037 am Arduino UNO.

Die Schaltung ist wie folgt aufgebaut:

Aufbau der Schaltung mit dem Steckbrett.
Aufbau der Schaltung mit dem Steckbrett.

Da die Software Fritzing keine Stromversorgungssymbol für 5V hat habe ich hier eine 4,7V Batterieversorgung gewählt. Ich habe die Servos auch mit sollch einer 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); 
}

Video

2DOF Klaue am Arduino UNO

Download

3 Kommentare

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert