Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Metallroboterarm-Kit ausrichten der Servomotoren

Posted on 25. Juli 202210. März 2024 by Stefan Draeger

In diesem Beitrag zeige ich dir, wie du mit einem Arduino UNO die Servomotoren des Metallroboterarm-Kit ausrichten kannst.

Eigentlich ist vorgesehen das Kit mit einem BBC micro:bit zu steuern, jedoch nutze ich hier einen Arduino UNO, da die benötigte Schaltung dazu etwas einfacher zu gestalten ist.

  • Benötigte Ressourcen
  • Aufbau der Schaltung
  • Quellcode für den Arduino UNO
  • Ausrichten der kleinen MG90S Servomotoren
    • Greifer / Klaue ausrichten
    • Servomotoren am Arm ausrichten
    • Unteren Servomotor ausrichten
  • Steuern des Metallroboterarms mit Arduino UNO & Drehpotentiometer

Benötigte Ressourcen

Für den Nachbau der Schaltung benötigst du:

  • Arduino UNO R3*,
  • USB Datenkabel*,
  • 50 kOhm Drehpotentiometer*,
  • 400 Pin Breadboard*,
  • Power Supply* für Breadboard
  • 9V Batterie mit passendem Clip und 2,1 mm center-positiv Jack Adapter
  • diverse Breadboardkabel*

Die Stromversorgung mit einer 9V Blockbatterie ist für die Servomotoren des Typs MG90S für den großen Servomotor MG996R benötigst du ein Netzteil mit min. 3 A*.

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!

Aufbau der Schaltung

Da die verbauten Servomotoren (Typ MG90S & MG996R) eine sehr hohe Stromaufnahme haben, muss hier zwingend eine externe Stromversorgung genutzt werden.

Quellcode für den Arduino UNO

Hier nun ein kleiner Sketch zum Steuern eines Servomotors mit einem Drehpotentiometer.

//Bibliothek für das ansteuern des Servomotors
#include "Servo.h" 

//Servomotor am digitalen Pin D6 angeschlossen
#define servoPin 6

//Drehpotentiometer am analogen Pin A0 angeschlossen
#define rotaryResistorPin A0

//maximaler / minimaler Wert am analogen Pin
const int ANALOG_MIN = 0;
const int ANALOG_MAX = 1023;

//maximaler / minimaler Winkel des Servomotors
const int SERVO_MIN = 0;
const int SERVO_MAX = 180;

//Instanz eines Servomotorobjektes
Servo servo;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  //zweisen des Servopins an das Servoobjekt
  servo.attach(servoPin);
}

void loop() {
  //auslesen des aktuellen Wertes des Drehptotentiometers
  int resistorValue = analogRead(rotaryResistorPin);
  //mappen des Wertes des Drehpotentiometers mit dem Winkel des Servos
  int servoValue = map(resistorValue, ANALOG_MIN, ANALOG_MAX, SERVO_MIN, SERVO_MAX);
  
  //ausgeben des ermittelten Winkels
  Serial.print("Winkel: ");
  Serial.println(servoValue);

  //setzen des Winkels
  servo.write(servoValue);
}

Ausrichten der kleinen MG90S Servomotoren

Greifer / Klaue ausrichten

Der Greifer hatte zunächst das Problem, dass diese zu dicht waren, d.h. es wurde keine 0 Stellung erreicht. Somit mussten diese ein paar Zahnstellungen auseinander geschraubt werden.

Servomotoren am Arm ausrichten

Die beiden Servomotoren am Arm werden im nächsten Schritt ausgerichtet.

Zunächst hatte ich festgestellt, dass die Schrauben an den Winkeln zu fest angezogen waren. Diese müssen ein sehr leichtes Spiel haben!

Des Weiteren musste ich zunächst den linken Servo demontieren, da das Ruderhorn ein paar Grad falsch ausgerichtet war.

Unteren Servomotor ausrichten

Der untere Servomotor vom Typ MG966R hat eine Leistungsaufnahme von 3 A bei 6 V. Dieses muss man bei der Stromversorgung einplanen!

Ich habe mir dafür extra ein Netzteil besorgt, welches 5V mit maximal 5A liefert und somit ausreichend Ressourcen dafür bietet.

Der untere Servomotor hat einen maximalen Winkel von 120° somit müssen wir diesen so ausrichten das er 60° nach links und rechts drehen kann.

Und natürlich den Quellcode entsprechend anpassen, so dass dieser nur die maximalen 120° drehen kann.

Steuern des Metallroboterarms mit Arduino UNO & Drehpotentiometer

Was mit einem Drehpotentiometer klappt, klappt natürlich auch mit vier 🙂 und so habe ich die Schaltung um weitere drei Drehpotentiometer erweitert.

Jedoch hat mein Labornetzteil eine Leistung von maximal 2 A und das liegt unter dem des Servomotors MG966R welcher mit 3 A läuft. Daher kann ich dir leider noch nicht zeigen, wie dieser gesteuert wird.

Metallroboterarm von Waveshare in Action
Dieses Video auf YouTube ansehen.

Hier nun noch der Quellcode zum Steuern der vier Servomotoren mit ebenso vier Drehpotentiometer.

//Bibliothek für das ansteuern des Servomotors
#include "Servo.h"

//Servomotoren
#define servoUntenPin 3
#define servoGreiferPin 6
#define servoLinksPin 5
#define servoRechtsPin 9

//Drehpotentiometer
#define rotaryResistor1Pin A0
#define rotaryResistor2Pin A1
#define rotaryResistor3Pin A2
#define rotaryResistor4Pin A3

//maximaler / minimaler Wert am analogen Pin
const int ANALOG_MIN = 0;
const int ANALOG_MAX = 1023;

//maximaler / minimaler Winkel des Servomotors
const int SERVO_MIN = 0;
const int SERVO_SMALL_MAX = 180;

const int SERVO_BIG_MAX = 120;

//Instanz eines Servomotorobjektes
Servo servoUnten;
Servo servoGreifer;
Servo servoLinks;
Servo servoRechts;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  //zweisen des Servopins an das Servoobjekt
  servoUnten.attach(servoUntenPin);
  servoGreifer.attach(servoGreiferPin);
  servoLinks.attach(servoLinksPin);
  servoRechts.attach(servoRechtsPin);
}

int mappingResistorValue(int resistorValue, int servoMax) {
  return map(resistorValue, ANALOG_MIN, ANALOG_MAX, SERVO_MIN, servoMax);
}

void loop() {
  //auslesen des aktuellen Werte der Drehptotentiometer
  int resistor1Value = analogRead(rotaryResistor1Pin);
  int resistor2Value = analogRead(rotaryResistor2Pin);
  int resistor3Value = analogRead(rotaryResistor3Pin);
  int resistor4Value = analogRead(rotaryResistor4Pin);

  //mappen des Wertes des Drehpotentiometers mit dem Winkel des Servos
  int servoGreiferValue = mappingResistorValue(resistor1Value, SERVO_SMALL_MAX);
  int servoLinksValue = mappingResistorValue(resistor2Value, SERVO_SMALL_MAX);
  int servoRechtsValue = mappingResistorValue(resistor3Value, SERVO_SMALL_MAX);
  int servoUntenValue = mappingResistorValue(resistor4Value, SERVO_BIG_MAX);

  servoUnten.write(servoUntenValue);
  servoGreifer.write(servoGreiferValue);
  servoLinks.write(servoLinksValue);
  servoRechts.write(servoRechtsValue);

  //ausgeben des ermittelten Winkels
  Serial.print("Greifer: " + String(servoGreiferValue, DEC) + "\t|\t");
  Serial.print("Links: " + String(servoLinksValue, DEC) + "\t|\t");
  Serial.print("Rechts: " + String(servoRechtsValue, DEC) + "\t|\t");
  Serial.println("Unten: " + String(servoUntenValue, DEC) + "\t|\t");

}

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}