Ameisen Roboter Ant Hexapod Robot

Hallo,

ich habe ein halb fertiges Projekt bekommen, das nicht richtig funktioniert mit der Bitte, dass ich mich darum mal kümmern soll.
Es geht um den Ameisen Roboter, der nicht laufen mag.

Ant Project

Ich komme eher aus der Netzwerk-Technik Schiene und hab mit Arduino noch nicht viel gemacht geschweige denn viel programmiert.
Genutzt wird hierbei der Arduino Mega 2560 mit einem selbst gelöteten Shield. Somit ist die Stromversorgung gesichert.

Das Problem, das ich habe ist, dass die Servos (Tower Pro MG 996R) sich nicht so Verhalten wie sie sollen.
Ich habe sie mit write, high und auch mit writeMicroseconds angesprochen, was dabei passiert ist, dass sie ab 80 Grad komplett in die eine Endposition fahren und versuchen weiterzufahren.
Unter 80 Grad fahren sie wieder zurück in die andere Endposition und versuchen auch dort weiter zu fahren.
Ich habe schon das Schild weggelassen und einen Servo direkt an den Arduino Mega angeschlossen. Ich habe auch noch einen Arduino One der sich genauso verhält.

Die Servos kommen wohl aus China.

Ich hoffe von euch hat einer eine Idee.

Ganz vergessen. Ich habe von einem Nachbar einen Servo Tester bekommen und
wenn ich an dem Regler drehe, kann ich jede Position des Servos frei wählen.
Das verwundert mich umso mehr.

Info Video 1

Info Video 2

Gruß Snoopy_76

(deleted)

Wenn Du hier die Fragen genau so wenig beantwortest, wie nebenan, wird das wohl nichts werden.

Gruß Tommy

Die Videos sagen wenig aus.

Ist das ein Kit oder hast Du Dir die Teile selbst ausgedruckt/ zusammengesucht?

Was wir brauchen ist ein Schaltplan, wie Du den Servo angeschlossen hast. Die Videoschwenks des VIDEO 2 geben nie die gesamte Shaltung wieder und somit weiß ich nicht ob die Schaltung richtig ist.

Zeichne den Schaltplan und fotografiere ihn.

Welchen Strom kann das Netzteil liefern?

Die Bibliothek servo.h kann auf dem MEGA2560 48 Servos ansteuern auf beliebigen Pins.
Die Spannungsversorgung ist kritisch da die Servos auch schon mal 1A pro Stück brauchen. Das sind bei 18 Servos fast 20A !!!!

Die Frequenz ist fix 50Hz.

Anstatt die Extremwerte zu nehmen versuch mal eine kleinen Winkel von 5° zb 88 und 92.

Wenn Du den Fuß abschraubst dreht sich dann der Servo dann dauernd in die eine bzw andere Richtiung? Wenn das so ist dann sind das DauerdrehServos (auch 360° genannt die nicht für Deinen Zweck geeignet sind. Du brauchst normale 180° Servos.
Grüße Uwe

uwefed:
Wenn Du den Fuß abschraubst dreht sich dann der Servo dann dauernd in die eine bzw andere Richtiung? Wenn das so ist dann sind das DauerdrehServos (auch 360° genannt die nicht für Deinen Zweck geeignet sind. Du brauchst normale 180° Servos.

Bis auf die Tatsache, dass sie sich an einem Servotester 'normal' verhalten, spräche einiges dafür. Diese Servos gibt es wohl als 180° und auch als 360° Version. Da es digitale Servos sind, sollten die sonst eigentlich nie an die Anschläge fahren, da der interne Prozessor das verhindern sollte.
Und wie Uwe schon sagte, braucht die servo.h keine PWM fähigen Pins, die funktioniert mit allen digitalen Pins.

Google mal nach "PCA9685"
Damit kann man 16 Servos ansteuern.
Reicht das nicht, nimmt man mehr von den Controllern

Ob du nun 1000us...1500us...2000us auf 0°...90°...180° oder -90°...0°...90° definierst.....ist egal, das ist das gleiche.

Du gibts mit diesem Ansteuerimpuls nur die Sollposition vor. Die Elektronik im Servo fährt diese Sollposition dann so schnell es kann an.
Wenn man langsamer fahren will, dann muss man die Sollposition in vielen kleinen Schritten so langsam wie man möchte auf die Endposition hin ändern. Jede kleine Positionsänderung von einem Schritt zum nächsten fährt das Servo dann wieder so schnell es geht an. Da man die Sollposition aber nur langsam ändert fährt das Servo dann auch entsprechend langsam.

Lieben Gruß,
Chris

Entschuldige Chris
Hast Du das Problem des TO gelesen?
Grüße Uwe

Ja, hab auch das Video gesehen. Was hab ich denn nicht bedacht?

  1. 'PCA9685' -> er hat kein Problem mit der Zahl der steuerbaren Servos. Sein Mega kann die alle ansteuern, da braucht er nichts zusätzliches

2)'langsam fahren' -> er hat nicht das Problem, dass die Zielposition zu schnell angefahren wird. Sein Problem ist, dass die Zielposition garnicht korrekt angefahren wird. Da helfen auch keine kleinen Positionsänderungen.

@To: Die Videos bringen nicht viel. Wenn dann höchstens ein ganz kurzes, dass die Servobewegung zeigt. Ein ordentlicher Schaltplan, wie alles verdrahtet ist, und den Sketch hier posten ist einfacher und besser.

MicroBahner:
@To: Die Videos bringen nicht viel. Wenn dann höchstens ein ganz kurzes, dass die Servobewegung zeigt. Ein ordentlicher Schaltplan, wie alles verdrahtet ist, und den Sketch hier posten ist einfacher und besser.

Offensichtlich hat der TO kein Interesse mehr, sonst hätte er ja schon mal was posten können.

HotSystems:
Offensichtlich hat der TO kein Interesse mehr, sonst hätte er ja schon mal was posten können.

Gebt dem armen TO doch etwas Zeit. Man kann wohl nicht erwarten daß er den ganzen Nachmittag/ Abend vorm PC sitzt und auf unsere Antworten wartet um sie promt zu beantworten.
Grüße und gute Nacht
Uwe

Wenn das hilft?

#include <Servo.h>

Servo myservo;  



void setup() {
  myservo.attach(22);  
}

void loop() {
    myservo.write(50);
    delay(5000);

    myservo.write(120);
    delay(5000);
}

Ve

snoopy_76:
Wenn das hilft?

Verstehe ich jetzt nicht.

Du schreibst eingangs du machst es mit "writeMicroseconds", hier machst du es mit delay und millisekunden.
Was denn nun ?

Und wenn du den Datenpin D8 am Arduino nimmst, musst du auch den definieren.

Also Sketch und Schaltung passen nicht zusammen.

Möchtest du uns noch die richtigen Informationen liefern ?

Ich gehe mal davon aus, dass der gepostete Sketch rein zum Testen des Servo war. Und wenn das mit dem unterschiedlichen Pin im Sketch und Schaltbild nur eine Verwechslung beim Zeichnen war, dann sollte der Sketch auch funktionieren. Wenn nicht, hat entweder dein Board oder dein Servo eine Macke.

@MicroBahner DANKE
@Tommy56 Ich versuche nur das Problem mit allen Mittel zu lösen.

Man sollte doch etwas Vertrauen in die Personen besitzen und glaube, dass Sie es hinbekommen
mal einen anderen Port zu benutzen. :wink:

Das Szenario dient nur zum Test des Servos und ich habe natürlich (wie beschrieben) schon
andere Möglichkeiten probiert den Servo anzusprechen.

Hier im Forum gab es einen Beitrag der ein ähnliches Problem hatte.
Servo digital vs. analog

Der hatte auch komische Werte was die Range für das High angeht. (500-2500)

Kann es sein das mein Servo deswegen auch spinnt ?
Dann man die Range irgendwie auslesen?

Gruß Snoopy_76

Und da ich jetzt doch ein wenig neugierig war, habe ich den von dir geposteten Sketch getestet.

Der funktioniert bei mir.

Somit liegt dein Fehler am falsch angeschlossenen Servo oder wie Franz-Peter auch schon schrieb, da ist was kaputt.

MicroBahner:
Wenn nicht, hat entweder dein Board oder dein Servo eine Macke.

Wie gesagt, mit einem Servo Tester gehen die Servos und das Problem ist ja nicht nur bei
einem Servo sondern bei 20 Stück die da verbaut sind. :slight_smile:

Ich habe auch den Servo getestet der bei dem UNO dabei war.
Der funktioniert. Nur die gekauften aus China spinnen.
Und am Board liegt es nicht da ich es mit UNO und Mega getestet hatte.

Ich würde ja auch auf Produktionsfehler tippen, wenn der Servo am Tester nicht geklappt hat.
Aber da lief er

snoopy_76:
Wie gesagt, mit einem Servo Tester gehen die Servos und das Problem ist ja nicht nur bei
einem Servo sondern bei 20 Stück die da verbaut sind. :slight_smile:

Ich habe auch den Servo getestet der bei dem UNO dabei war.
Der funktioniert. Nur die gekauften aus China spinnen.
Und am Board liegt es nicht da ich es mit UNO und Mega getestet hatte.

Dann zeig doch mal einen Link, wo du den her hast.

Den Servo versorgst du aber nicht von einem digitalen Pin, sondern direkt von einem 5V Anschluss, der mehr als ein paar mA bereitstellt?

snoopy_76:
Der hatte auch komische Werte was die Range für das High angeht. (500-2500)

Da ist eigentlich nichts komisches dran. Die 'Standardwerte' für die Impulslänge, die allle Servos können sollten geht von 1000-2000. Alles darüber ist 'Kür'.
Die Geschichte mit den 'Winkeln' bei der Servolib darf man auch nicht so wörtlich nehmen. Die macht nichts anderes als ein Mapping des Bereiches 0...180 im write-Kommando auf einen Impulslängenbereich von 544-2400µs ( Defaultwerte, sind änderbar ). Was das Servo dann daraus macht, ist eine ganz andere Frage. Dass das dann wirklich den Winkelwerten entspricht ist eher Zufall. Vor allem die default-Grenzwerte bei 0 bzw 180 sind für viele Servos ein Problem, denn sie liegen ausserhalb der Spezifikation. Ob das Servo da noch mitspielt ist auch wieder eher Glückssache. Analoge Servos fahren da meist schon an die Anschläge. Digitale Servos prüfen, ob die Impulslänge innerhalb ihres Verfahrbereiches liegt, und ignorieren Impuls ausserhalb des Bereiches einfach. Das kann dann auch sehr verwirrend sein, da das Servo z.B. bei write(0) dann einfach gar nichts macht.
Welche Pulslängen ein digitales Servo noch akzeptiert, steht in den technischen Daten üblicherweise nicht dabei, das muss man ausprobieren. Deine 50° bzw 120° im Testsketch führen aber auf jeden Fall zu Impulslängen, die das Servo akzeptieren muss.

Ganz anders ist die Sache bei 360° Servos. Die drehen endlos, und da ist die Pulslänge keine Positionsvorgabe, sondern eine Geschwindigkeitsvorgabe. Die werden im Modellbau z.B. als Windenservos eingesetzt.

Da die Servos mit einem Servotester aber funktionieren, kann man 360° Servo wohl ausschließen. Ist alles etwas mysteriös. Eigentlich kommt man wohl nur mit einem Oszi weiter, mit dem man den Unterschied bei der Ansteuerung über Arduino bzw. Servotester dann genau untersuchen kann. Auch die Stromversorgung kann ein Problem sein, denn diese 'Power' Servos dürften schon ordentlich ziehen - jedenfalls deutlich mehr, als das beim Uno-Kit beiliegende Servo.