langsame Servobewegung mit millis()

  • Danke Dir Rene für die Information zu .writeMicroseconds(). Es leuchtet ein, daß bei kleineren Schritten der Bewegungsablauf geschliffener wirken sollte.

    Ich vermute dann mal, daß ich grundsätzlich nicht mit Grad arbeiten darf. Und die Endstellungen, des Servos, sicher auch in Microseconds festgelegt werden müssen.

    Das ruckeln enttstand allerdings bei kleineren Pausen als 100 millis. Bei 100 millis war der Lauf einigermaßen flüssig. (Analoger Conrad Servo für 4-5 Euro)

  • Hallo Beduino,


    je grösser die Pause ist, um so mehr ruckelt der Servo. Wenn du kleinere Pausenwerte möchtest, musst du die Schritte verkleinern. Mit .write() arbeitest du immer mit Grad im Bereich 0 bis 180. Du kannst aber auch .writeMicroseconds() verwenden. Hier arbeitest du in einem Bereich von etwa 500 bis etwa 2500. Dadurch hast du 1500 Schritte anstelle von 180.


    Das muss ich aber selbst noch ausarbeiten, darum wird es noch eine Weile dauern.


    Gruss

    René

  • Jetzt habe ich eine Variante gefunden. Geht so, nur der Servo ruckelt leicht. Es jedenfalls optisch sichtbar bei Pausenwerten unter 100 millis.

    Der Sketch ist noch nicht vollständig auskommentiert.

    Servosteuerung: an Pin 9

    Taster als Pulldown: an Pin 4 und 7


  • Guten Tag Rene,


    Nochmal herzlichen Dank für Deinen Lehrgang.


    Das Servothema interessiert mich brennend. Insbesondere der zweite angeführte Fall, <einen Winkel langsam anfahren> .

    Der Sensor sollte dabei nur einen kurzen Impuls geben dürfen.


    MfG

    Beduino

  • Guten Tag KaiR,

    Da der Servo nicht genau bei 90 anhält sondern erst bei 91 versucht er sich ständig zu justieren. Dieses Gebrumme nervt einfach. Mit >detache< konnte ich es vorerst abstellen. Ich weiß, dass der Servo damit nicht vollständig abgeschalten wird.


    Für einen Versuch habe ich Schleifen angewendet ( siehe Quellcode) , aber da bekomme ich die >millis()< nicht rein. Der Sketch funktioniert soweit auch, hat aber beim Startverhalten noch ein paar Macken. Die bekomme ich eventuell über den Eprom ausgeglichen. Ich möchte aber das >delay<

    aus dem Code verschwinden lassen.


    Ich habe einfach noch heftig viel Wissenslücken.



  • Hallo Beduino,


    ich bereite momentan ein Video zu diesem Thema vor. Die Klasse für ein langsames Servo deckt zwei Fälle ab:


    - In eine Richtung langsam bewegen, bis der Knopf losgelassen wird.

    - Einen bestimmten Winkel langsam anfahren.


    Ich werde das in einer 'Plauderei' kurz vorstellen und das später im Rahmen des Arduino - Kurses genauer erklären. Es ist eine gute Übung in objektorientierter Programmierung, da die neue Klasse von der ursprünglichen Servo - Klasse abgeleitet wird. Das solltest du eigentlich für deine Anwendung anpassen können.


    Gruss

    René

  • Du wirst den Code in deinen beiden Funktionen in eine Schleife packen müssen, damit die Funktion nicht verlassen wird, bevor der Servo seine Endposition erreicht hat.


    Die Funktion macht ja nur eine IF-Abfrage, bewegt den Servo um Eins weiter und wird anschließend nach einer weiteren IF-Abfrage verlassen. Darum ist es notwendig, den Taster gedrückt zu halten, wenn der Servomotor mehr als einen Schritt bewegt werden soll. Der Servo wird dann auch z.B. bei der Funktion "weicheLinks()" 90 mal "attached" und nur einmal "detached" ... Warum machst Du das?


    Wenn du Funktionsparameter verwendest, kannst du das auch in eine Funktion packen und brauchst z.B. nur einen Zeitspeicher. Der Wert ist ja für beide Bewegungen identisch.


    Gruß Kai

  • Guten Abend!

    Ich habe mal versucht eine verlangsamte Servobewegung mit millis() zu gestalten. Das ist mir soweit auch gelungen.

    Jetzt möchte ich das ganze auf Tastendruck steuern. Leider gelingt mir dieses nicht so recht.

    Für die Bewegung des Servos darf ich den Taster bis zum erreichen der Endstellung nicht loslassen.


    Wie kann ich den Taster zu einen Schalter programmieren ? Also ein einmalig kurzer Tastendruck (Signal HIGH oder 1) soll dazu führen, daß der Servo die nächste Endstellung selbstständig

    erreicht.

    Mit einer LED bekomme ich das gebacken, aber nicht mit diesen Servofunktionen.

    Für Hilfe wäre ich dankbar.


    MfG