Servos eines Roboterarms bewegen sich unkontrolliert schnell

Guten Abend,

ich habe mal eine Frage und zwar habe ich mir einen Roboterarm gekauft, wenn ich diesen anschließe rast er unkontrolliert zu einer Position hin kann man dies über den Code verlangsamen? Also ich möchte ihm eine Parkposition geben und wenn ich sage fahre zu den und den Positionen also Grad rast er plötzlich los.

Gruß

Ghost

Ist der sprachgesteuert? :joy:

Du musst uns schon deutlich mehr Informationen zu deinem Projekt geben (Hardware und Software ), Wenn Du Servos langsam bewegen willst, muss Du das entsprechend programmieren - von allein bewegen sich Servos immer mit ihrer Maximalgeschwindigkeit.
Wie gesagt, brauchen wir mehr Informationen, aber meine MobaTools Lib kann Servos langsam bewegen.

Hi, ja entschuldige nein sie sind nicht sprach gesteuert, ich habe einen arduino nano sowie 6 tower pro mg996r servo motoren

#include <Servo.h>

// Array für 6 Servos
Servo servos[6];

// Pins der Servos
int servoPins[6] = {2, 3, 4, 5, 6, 7};

// Zielpositionen für jeden Servo
int targetPos[6] = {2, 50, 70, 45, 60, 20}; // deine gewünschten Positionen

void setup() {
for (int i = 0; i < 6; i++) {
servos[i].attach(servoPins[i]);
}
}

void loop() {
// jeden Servo nacheinander fahren lassen
for (int i = 0; i < 6; i++) {
moveServo(servos[i], targetPos[i]);
delay(500); // kleine Pause nach jedem Servo
}
}

// Funktion für langsame Bewegung zu Zielposition
void moveServo(Servo &s, int pos) {
int currentPos = 2; // Startposition Mitte, kann angepasst werden
if (currentPos < pos) {
for (int p = currentPos; p <= pos; p++) {
s.write(p);
delay(20); // langsame Bewegung
}
} else {
for (int p = currentPos; p >= pos; p--) {
s.write(p);
delay(20);
}
}
}

Ich denke mal “sagen” wirst du es ihn nicht. Sondern das Programm macht es. Daher wäre es Sinnvoll, wenn auch wir das Programm kennen, mit dem du es ihm “sagen” willst. Und welche Schaltung, welcher Roboterarm, wäre wuch noch sinnvoll zu wissen.

OK, der MikroBahner war schneller. :grinning_face:

es ist dieser hier

und hier der schaltplan

Das dürfte Deine "Ausgangsposition" sein.
Mit der Zuweisung des Pins wird der initialisiert, und damit der Servo in eine Ausgangsstellung gebracht.

sry ich verstehe nicht ganz was du mir damit sagen möchtest

wenn du den servo initialisierst (am Anfang vom Programm) - dann geht er in eine Stellung.
Dieses einmalig schnelle kannst du nicht vermeiden.

Den Rest kannst im Code "langsam" machen.

Mit Delay hast du das in deinem Mustersketch.

Ohne Delay und mit millis() zeige ich dir hier:

1 Like

Wenn Du ein Servo langsam und ohne Startruck bewegen willst, musst Du die tatsächliche Startposition des Servos kennen. Irgendeine Position als Start zu verwenden - wie in deinem Sketch - funktioniert nicht.
Problem ist dabei, dass Du beim Starten des Sketches die Position nicht kennst. Die erste Bewegung wird also ohne spezielle Maßnahmen immer mit max. Tempo sein.
Meine MobaTools sind da übrigends weitgehend kompatibel zur servo.h - ausser dass du das Bewegungstempo vorgeben kannst.

1 Like