INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Servo mit ungewollten Pausen
02.12.2020, 18:48
Beitrag #1
Servo mit ungewollten Pausen
Hallo zusammen,

ich befasse mich mal wieder mit Servos und habe ein Verständnisproblem Huh

Habe mal den Beispielsketch Servo Sweep mal um eine serielle Ausgabe erweitert.

Code:
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
    Serial.begin(115200);
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 15ms for the servo to reach the position
  }
  Serial.println(pos);
  
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(10);                       // waits 10ms for the servo to reach the position
  }
  Serial.println(pos);
}

lt. Terminal fährt das Servo 0 - 180 und dann 180 - 0

also alles OK

allerdings ist nach dem ersten Weg 0 - 180 eine Pause von ca. 500 ms
und nach 180 - 0 wieder eine Pause von ca. 500 ms

Habt Ihr vielleicht eine Erklärung?

Danke und Gruß

Jürgen


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 19:21 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2020 19:50 von hotsystems.)
Beitrag #2
RE: Servo mit ungewollten Pausen
Bedingt durch deine for-Schleife hast du das genauso programmiert.
Dein Servo braucht diese Zeit und danach wird erst der Wert in den seriellen Monitor geschrieben. Es ist keine Pause.

Mach es ohne for-Schleife, also direkt
Code:
myservo.write(180);

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 20:18 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2020 20:47 von juergen001.)
Beitrag #3
RE: Servo mit ungewollten Pausen
(02.12.2020 19:21)hotsystems schrieb:  Bedingt durch deine for-Schleife hast du das genauso programmiert.
Dein Servo braucht diese Zeit und danach wird erst der Wert in den seriellen Monitor geschrieben. Es ist keine Pause.

Mach es ohne for-Schleife, also direkt
Code:
myservo.write(180);

Hallo Dieter,
vielen Dank für die schnelle Antwort

habe mich vielleicht falsch ausgedrückt, sorry

auch wenn ich die serielle Ausgabe weglasse, macht das Servo eine Pause nach der jew. halben Umdrehung.
Mir ist schon klar, dass das delay keine elegante Lösung ist. Aber auch mit diesem Code macht das Servo die Pausen
Code:
#include <Servo.h>

Servo myservo1;  // Servo-Objekt zur Steuerung eines Servos erstellen

unsigned long myservo1_movetime = 0; // Zeit in Millis Servo nächster Schritt
int myservo1_zPos = 0; // Zielposition
int myservo1_aPos = 0; // aktuelle postion servo1

int pos1 = 0;    // Variable zum Speichern der Servoposition Servo1
int aPos1;       // aktuelle position
int zPos1;       // Zielposition

int tDelay1 = 10; // Verzögerung zwischen den Bewegungen
//int tDelay2 = 15;

void setup() {
  myservo1.attach(9);

//  Serial.begin(115200);
}

void loop() {

  //##########  Servo1  ##########
  aPos1 = myservo1.read();
  if (aPos1 == 0) zPos1 = 180;
  if (aPos1 == 180) zPos1 = 0;
  if (aPos1 != zPos1 && millis() >= myservo1_movetime)
  {
    if (aPos1 < zPos1) myservo1.write(aPos1 + 1);
    if (aPos1 > zPos1) myservo1.write(aPos1 - 1);
    myservo1_movetime = millis() + tDelay1;
  }

  // Serial.println(aPos2);
  //  Serial.print(zPos2);
}

Gruß
Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 20:27
Beitrag #4
RE: Servo mit ungewollten Pausen
Fahr mal nicht von 0..180, sondern nur von 20..160 und zurück.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 20:52 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2020 20:58 von juergen001.)
Beitrag #5
RE: Servo mit ungewollten Pausen
(02.12.2020 20:27)MicroBahner schrieb:  Fahr mal nicht von 0..180, sondern nur von 20..160 und zurück.

Hallo Franz-Peter, lieben Dank.Smile

Das war der entscheidende Hinweis.
Auch mein Sketch ohne delay funktioniert jetzt.

Gruß

Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 21:58
Beitrag #6
RE: Servo mit ungewollten Pausen
Zitat:habe mich vielleicht falsch ausgedrückt, sorry

auch wenn ich die serielle Ausgabe weglasse, macht das Servo eine Pause nach der jew. halben Umdrehung.
Ok, das ist dann was anderes. Hat allerdings def. nichts mit der seriellen Ausgabe zu tun, sondern mit deiner Schleife. Das hast du wiederum falsch verstanden.
Aber der wahre Grund ist ja jetzt gefunden.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 22:15
Beitrag #7
RE: Servo mit ungewollten Pausen
(02.12.2020 21:58)hotsystems schrieb:  
Zitat:habe mich vielleicht falsch ausgedrückt, sorry

auch wenn ich die serielle Ausgabe weglasse, macht das Servo eine Pause nach der jew. halben Umdrehung.
Ok, das ist dann was anderes. Hat allerdings def. nichts mit der seriellen Ausgabe zu tun, sondern mit deiner Schleife. Das hast du wiederum falsch verstanden.
Aber der wahre Grund ist ja jetzt gefunden.

Hallo Dieter,
vielen Dank für Dein Feedback, Rolleyes
So Leute wie Dich machen dieses tolle Forum aus. Freue mich, dass ich dabei sein darf.
Liebe Grüße und danke
Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.12.2020, 22:20
Beitrag #8
RE: Servo mit ungewollten Pausen
(02.12.2020 22:15)juergen001 schrieb:  Hallo Dieter,
vielen Dank für Dein Feedback, Rolleyes
So Leute wie Dich machen dieses tolle Forum aus. Freue mich, dass ich dabei sein darf.
Liebe Grüße und danke
Jürgen

Hallo Jürgen,
das freut mich und ich gebe das gern zurück.
Es macht auch Spass Leuten zu helfen, die gerne mitarbeiten.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Servo Ruckt komisch Arduino DMX Master 22 2.675 09.05.2021 20:56
Letzter Beitrag: Bitklopfer
  Servo funktioniert nicht richtig an Arduino Nano Maxcruiser 25 3.629 14.03.2021 17:11
Letzter Beitrag: hotsystems
  Attiny85 / Digispark : Dual Servo möglich? Clubsport 7 1.675 10.09.2020 11:14
Letzter Beitrag: Clubsport
  Servo per Mosfet steuern in4go2 18 5.715 04.02.2020 09:19
Letzter Beitrag: MicroBahner
  [Problem] Servo läuft im Loop ichhalt033 12 3.916 08.05.2019 19:15
Letzter Beitrag: Tommy56
  Spannung anlegen bei Servo herby 12 4.882 31.10.2018 23:51
Letzter Beitrag: Bitklopfer
  SunFounder 16 Channel 12 Bit PCA9685 PWM Servo I2C Driver Shield Bikandajyo 31 13.795 15.01.2018 15:11
Letzter Beitrag: Bikandajyo
  Servo Problem Winkel ansteuerung HaiAusDerDOse 7 3.940 22.09.2017 16:34
Letzter Beitrag: MicroBahner
  Scheibenwischermotor als servo Idteler 1 3.217 15.12.2016 19:47
Letzter Beitrag: Binatone
  Servo zu wenig Leistung eddykett 9 6.079 25.08.2015 21:08
Letzter Beitrag: diode1990

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste