Was erwartest Du was da passiert? Das Servo steht einfach fest an einer Position. Wenn das eh schon da steht passiert garnichts. Wenn man versucht, das Servo aus seiner Position zu bewegen, merkt man, dass es sich dagegen wehrt.
Bei mir funktioniert jedenfalls genau das.
N.B. es macht keinen Sinn, das writeMicroseconds öfter als alle 20ms aufzurufen. Wenn Du das alle 5ms machst, werden 3 Aufrufe ignoriert.
Hallo, sollte er sich nicht mit
myservo.writeMicroseconds(1000)
Bewegen?
Ich schalte den Arduino aus, bewege den Motor
von Hand irgendwo hin, schalte den Arduino
an und nichts passiert. Auch bei anderen Werten nicht.
noxx2:
Ich schalte den Arduino aus, bewege den Motor
von Hand irgendwo hin, schalte den Arduino
an und nichts passiert.
Ok, da sollte er sich schon einmal bewegen. Macht er bei mir auch. Am Sketch kann das nicht liegen.
P.S. Wenn ich das richtig sehe, ist das ein digitales Servo. Das reagiert auf Impulslängen außerhalb seines Arbeitsbereich garnicht. Aber bei Pulslängen von 1000...2000µs sollte es auf jeden Fall reagieren.
Rentner:
Warum arbeitest Du überhaupt mit myservo.writeMicroseconds(), was passiert bei myservo.write(pos) da wird dann normal die Position 0-180 angegeben.
Normal sind die writeMicroseconds, denn die Impulsbreiten sind das, was das Servo haben will. Mit write() wird nur libintern umgerechnet, bevor dann libintern doch wieder writeMicroseconds aufgerufen wird.
Zum Testen daher auf jeden Fall writeMicroseconds nehmen. Die Umrechnung Winkel->Pulslänge bringt nur einen zusätzlichen Unsicherheitsfaktor ins Spiel. Mit den echten Winkeln am Servo hat das meist eh wenig zu tun.
Was passiert, wenn Du im 2. Sketch zwischen 2 Pulsbreiten hin- und herschaltest, die sich nur wenig unterscheiden?
@Franz-Peter, ja stimmt du hast recht, mich wundert immer nur warum die Leute nicht mit einem Beispiel aus der lib anfangen und damit was rumspielen bis es verstanden ist.
Zum Einen: Die Servo-Lib erzeugt die Impulse per Timerinterrupt. Deshalb muss das kein PWM fähiger Ausgang sein, das funktioniert mit jedem Digitalpin.
Zum Anderen: Ich habe das ja mit meinen Servos auch probiert, da funktioniert das problemlos. Grundsätzlich könntest Du es mit meinen MobaTools probieren. Aber im Prinzip ist das auch nicht viel anders. Nur wann der erste Impuls erzeugt wird ist anders gelöst.
Ich tippe daher eher auf irgendwelche Besonderheiten bei den Servos. Wie versorgst Du die denn mit Strom? Gerade beim Anlaufen könnten die schon einiges brauchen
Die hängen an einem schaltnetzteil, da sollte es keine Problem sein. Mit SKETCH #1, der For Schleife, gibt's es kein Problem. Auch SKETCH #4 läuft, wenn er am Anfang in der Nähe ist (1100)....
Ist der Abstand von der aktueller Position zur Soll-Position zu groß (>50) macht der Motor nichts...
Habe hier ein schönes Testscript gefunden, Zielposition werden per SerialMonitor übergeben
SKETCH #6
/*
Try this test sketch with the Servo library to see how your
servo responds to different settings, type a position
(0 to 180) or if you type a number greater than 200 it will be
interpreted as microseconds(544 to 2400), in the top of serial
monitor and hit [ENTER], start at 90 (or 1472) and work your
way toward zero (544) 5 degrees (or 50 micros) at a time, then
toward 180 (2400).
*/
#include <Servo.h>
Servo servo;
void setup() {
// initialize serial:
Serial.begin(9600); //set serial monitor baud rate to match
servo.write(90);
servo.attach(2);
prntIt();
}
void loop() {
// if there's any serial available, read it:
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
int pos = Serial.parseInt();
pos = constrain(pos, 0, 2400);
servo.write(pos);
prntIt();
}
}
void prntIt()
{
Serial.print(" degrees = ");
Serial.print(servo.read());
Serial.print("\t");
Serial.print("microseconds = ");
Serial.println(servo.readMicroseconds());
}
a) Beantworte beide Fragen von Uwe
b) Mach ein Schaltbild auf Papier was du wie angeschlossen hast und stell es hier ein
c) Mach ein Echtbild dessen was du verkabelt hast in einer Form, dass wir wirklich jedes einzelne Kabel identifizieren können was wo angeschlossen ist und stelle es hier ein
die Masse des Arduino mit dem Minuspol der Stromversorgung Servo verbunden? --> JA ist die Stromversorgung der Servo stark genug? --> JA, Schaltnetzteil 5V 20A
noxx2:
Kann man ggf einen 180° Servo umbauen, das er 270° macht?
Gruß
Das kommt auf den Servo an, genauer auf das darin verbaute Poti. Ich hatte da schon öfters Servos, deren Potti nur für gut 180° gebaut war, da liessen sich die Pottis gar nicht mehr als 180° drehen.
Geht also nur, wenn sich das darin verbaute Potti einen Weg von 270° hat, und zwar sowol elektrisch als auch mechanisch.
Dann musst Du noch die Mechanische begrenzung am Abtriebs-Zahnrad und im Gehäuse so bearbeiten, das 270° drehwinkel möglich werden. Eine Garantie, dass der Servo das auch wirklich mitmacht, hast Du aber nicht.
Bei manchen geh es , bei andern geht es nicht. Ich habe auch keine Liste darüber geführt, welche Servos man umbauen kann, und welche nicht. Habe das auch seit gut 32 Jahren nicht mehr gemacht, und inzwischen brauche ich das auch nicht mehr, da es ja 270° Servos gibt, die auch erschwinglich sind. (sah damals preislich noch ganz anders aus).