Counter und Servo

@Mahimus: Dann geht gar nix mehr. D.h. der Servo bewegt sich nicht mehr,

Ihr müsst die Parameter bei Servo.write schon verstehen und richtig interpretieren.

Ein Servo wird über Pulse definierter Länge gesteuert. Nominal sind die Pulse zwischen 1ms und 2ms lang, und wiederholen sich alle 20ms.
Bei der Servolib werden die Impulslängen in µs angegeben. Also Servo.write(1000) erzeugt einen Puls von 1ms.
Sehr kleine Werte (<= 180) werden nicht direkt als Pulslänge, sondern als 'Winkel' interpretiert, und nach einem internen Mapping in Pulse umgesetzt.
Standardmässig erzeugt write(0) einen Puls von 544µs und write(180) einen Puls von ca. 2400µs. Ob das wirklich die Winkel 0 und 180 sind, hängt vom Servo ab. In der Regel darf man das mit den Winkeln nicht so wirklich ernst nehmen. (Man kann das Mapping aber an den eigenen Servo anpassen und so die Winkel etwas passender machen)

Weiteres Problem: digitale Servos begrenzen den Bereich der Pulslängen, die sie akzeptieren. Pulse die zu kurz oder zu lang sind werden ignoriert. Da der Pulsbereich bei Vorgabe der 'Winkelwerte' sehr groß ist (0,54...2,4ms), ignorieren viele digitale Servos sehr kleine oder sehr große 'Winkelwerte' der Servolib. Das kann dann auch zu den beschriebenen Effekten führen.

@MicroBahner: Sehr interessant. Danke fürs diese Erklärung.

Jetzt kann ich Werte zwischen servo1.write(2000); und servo1.write(1000); eingeben, um die genaue Bewegung des Servos zu steuern. Das funktioniert Tip Top. :slight_smile:

Ohne dieses Forum, wäre ich jeweils völlig aufgeschmissen :slight_smile: Besten Dank für euere Hilfe.

Das ist echt interessant, erklärt aber nicht, warum der Sketch in #12 nicht funktioniert. Oder gabs da einen Wackelkontakt im Aufbau?!

Jedenfalls schön dass es jetzt geht.

Draht:
Jetzt kann ich Werte zwischen servo1.write(2000); und servo1.write(1000); eingeben, um die genaue Bewegung des Servos zu steuern. Das funktioniert Tip Top. :slight_smile:

Viele Servos akzeptieren schon auch etwas kleiner oder größere Werte. Reicht der Schwenkbereich zwischen 1000...2000 nicht aus, kann man den dann etwas erweiteren. Wieweit das bei eienm speziellen Servo geht, kann man aber letztendlich nur durch Versuche ermitteln.

Wenn man dann mit den 'Winkelwerten' arbeiten will, kann man beim attach als zusätzliche Parameter die Pulsbreiten für '0' und '180' mit angeben und so das Mapping an das eigene Servo anpassen.

Mahimus:
erklärt aber nicht, warum der Sketch in #12 nicht funktioniert.

Da müsste man wissen, was für ein Servo er hat. Wenn es ein digitales ist, kann es durchaus sein, das es die standardmäßigen Pulswerte für '10' und/oder '170' nicht akzeptiert.

Mahimus:
Das ist echt interessant, erklärt aber nicht, warum der Sketch in #12 nicht funktioniert. Oder gabs da einen Wackelkontakt im Aufbau?!

Jedenfalls schön dass es jetzt geht.

@Mahimus: Nein, es gab keinen Wackelkontakt, sondern ich hab den Sketch so nicht zum laufen bekommen, sondern eine Fehlermeldung bekommen.

MicroBahner:
Da müsste man wissen, was für ein Servo er hat. Wenn es ein digitales ist, kann es durchaus sein, das es die standardmäßigen Pulswerte für '10' und/oder '170' nicht akzeptiert.

@MicroBahner: Das Servo ist ein Modelcraft MC 410

MicroBahner:
Viele Servos akzeptieren schon auch etwas kleiner oder größere Werte. Reicht der Schwenkbereich zwischen 1000...2000 nicht aus, kann man den dann etwas erweiteren. Wieweit das bei eienm speziellen Servo geht, kann man aber letztendlich nur durch Versuche ermitteln.

Wenn man dann mit den 'Winkelwerten' arbeiten will, kann man beim attach als zusätzliche Parameter die Pulsbreiten für '0' und '180' mit angeben und so das Mapping an das eigene Servo anpassen.

@MicroBahner: Wäre das dieser Part? (aus den Arduino Servo-Sketchbeispielen

val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}

@Draht

Man kann auch in EINEM Post mehreren Leuten antworten - wäre Mal einen Versuch wert - SO macht das Lesen nämlich keinen Spaß.

MfG

Edit
Das V von Versuch war klein :confused:
PS: Ich lese hier die ganze Zeit Counter Strike ... muß ich mir Sorgen machen? Hatte das Spiel noch nicht Mal ...

postmaster-ino:
@Draht

Man kann auch in EINEM Post mehreren Leuten antworten - wäre Mal einen versuch wert - SO macht das Lesen nämlich keinen Spaß.

MfG

I will do my best :wink:

Draht:
@MicroBahner: Wäre das dieser Part? (aus den Arduino Servo-Sketchbeispielen

val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}

Nein, das hat damit nichts zu tun. Da wird ja nur ein Poti-Input auf die 0...180 gemapt. Aber wenn Du z.B. schreibst:

servo1.attach(7,1000,2000);

dann wird bei 0..180 ein Impuls von 1000....2000ms erzeugt.

N.B. dein Servo ist ein analog-Servo. Das macht keine Überprüfung der Grenzwerte. Da kann man kaum vorhersagen, was es bei sehr extremen Impulslängen macht. u.U. fährt es einfach an die Anschläge. Das würde evtl. auch die Geräusche erklären, von denen Du geschrieben hast.

Draht:
@Mahimus: Nein, es gab keinen Wackelkontakt, sondern ich hab den Sketch so nicht zum laufen bekommen, sondern eine Fehlermeldung bekommen.

Der Sketch in #12 enthielt Syntax Fehler: Vor dem loop fehlte das void, und bei den delays war eine Klammer zuviel.

@MicroBahner: ok, danke.

Die Fehler im Nr. 12 Sketch, hatte ich korrigiert ging aber trotzdem nicht. Mir war allerdings nicht klar ob ich diesen loop in meinem Sketch einsetzen sollte und testen oder wie. Ist ja jetzt aber auch egal, da der Sketch so jetzt funktioniert. :wink:

MicroBahner:
Der Sketch in #12 enthielt Syntax Fehler

Sorry, ich meinte den Sketch in #13. der enthielt ja Grad-werte, und die haben es offenbar einmal getan und dann nicht mehr?! Sehr komisch!

Aber wenn mit den nun verwendeten Pulsbreiten alles klappt ist das ja wie gesagt super.

@Mahimus: Ja, du hast recht das ist etwas sehr seltsam, aber ich hab da nicht mehr weiter geforscht und es einfach mal so stehen gelassen: :wink: