Video 6: Ansteuerung des Servos

  • Hallo René,

    danke für deine ausführliche Beantwortung. Mit dem Sketch kann man super hinter die Kulissen schauen und im Detail nachvollziehen, was da passiert. Mir war es ein Rätsel, woher der aktuelle Winkel die Null zugewiesen bekommt. Die Implementierung von augen.init() ist mir dabei ganz entgangen. Da fiel doch gleich der Schuppen von den Augen^^!

    Ich wünsch dir kühlen Kopf bei den Temperaturen.


    Gruss

    Matthias

  • Hallo Matthias

    Ein Servo fährt ja die gewünschte Position sehr schnell an. Wenn ich eine langsame Bewegung haben möchte, muss ich den Servo schrittweise in die gewünschte Richtung bewegen. Das ist leider gar nicht so einfach, da es keine fertige Funktion dafür gibt. das kann also nicht in einem einzigen Befehl geschehen, so dass der Code gar nicht so einfach zu verstehen ist.

    Voraussetzung ist, dass das Programm immer weiss, in welcher Position der Servo steht. Das ist immer bekannt, da beim Einschalten augen.init() aufgerufen wird, das den Servo auf Position 0 stellt. Winkelveränderungen werden immer mit setRichtung() durchgeführt, so dass in der Variablen aktuellerWinkel immer der tatsächliche Winkel steht.

    Beim Aufruf von langsam() gebe ich den gewünschten Zielwinkel und den Schritt ein, den der Aufruf in die richtige Richtung machen soll. Der Winkel wird jetzt in Richtung Ziel verändert. Der Vergleich (zielWinkel == aktuellerWinkel) gibt true zurück, wenn der Winkel erreicht wurde.

    Der Code erscheint etwas kompliziert. Zuerst müssen wir sicherstellen, dass der nächste Schritt nicht über das Ziel hinaus schiesst. Notfalls wird schritt etwas verkleinert. Danach muss festgestellt werden, in welche Richtung wir uns bewegen müssen. Dann wird die Bewegung ausgeführt und wir testen, ob das Ziel schon erreicht wurde. langsam() wird also so lange aufgerufen, bis wir das Ziel erreicht haben. Falls das geschafft ist, wird das Vorzeichen des Ziels geändert und die Augen bewegen sich in die entgegengesetzte Richtung.


    Wenn du das sichtbar machen möchtest, kannst du folgenden Code verwenden:


    Gruss

    René

  • Hallo, an alle Freunde des wolkenlosen Himmels :cursing:!

    Die Ansteurung des Servo ist mir schon einigermassen klar, nur wenn ich mir den Sketch im Deteil anschaue, gehen da so einige Türen wieder zu.

    Im Hauptprogramm gibts da eine, mir bis dahin neue if - Abfrage mit der Funktion if (augen.langsam(ziel,schritt)). Ich deute das so, dass die Funktion aktiv is,t sobald die Parameter in Klammern vorhanden sind, ausser schritt = 0. Wenn das Ziel erreicht ist wird true zurückgegeben und die Klammer wird ausgeführt, also das Ziel wird dann positiv (+90) und das Spiel beginnt von vorn. Meine Frage, der typ boolean kennt doch nur false und true aber in der Funktion boolean Augen :: langsam(int winkel, int schritt) wird return (zielWinkel == aktuellerWinkel) zurückgegeben und wohin?

    Wie gross ist der aktuelleWinkel beim ersten Durchlaufen der Funktion? Der könnte ja nur 0 sein, aber hat ja theoretisch noch keinen Wert, erst wenn die Funktion int Augen :: setRichtung (int winkel) aufgerufen wird bekommt sie den Wert des übergebenen Winkels.

    Vielleich kann das Szenerio an hand von Zahlen mal durchspielt werden wenn mal Zeit ist !


    Gruss

    Matthias





    ,

  • Der Roboter soll sich 'umschauen' können. Dazu müssen wir den Servo ansteuern. Die übliche Servo-Library funktioniert wegen eines Konfliktes nicht. Also müssen wir hier selbst Hand anlegen. Da wir im Arduino - Kurs die Klassen eingeführt haben, werden wir diese auch hier nutzen. Hier geht's zu Video.


    Das Begleitmaterial findest du unter

    https://www.hobbyelektroniker.ch/resources/Turtle6.zip


    Diskussionen, Fragen und Antworten auf

    https://community.hobbyelektroniker.ch


    Grundlagen zu Klassen im Arduinokurs:

    https://youtu.be/VF2k8pr7af0


    Grundlagen zum Servo im Arduinokurs:

    https://youtu.be/sWHGFm24RhA


    Der Roboter bei Keyestudio:

    https://www.keyestudio.com/new…no-robot-p0050-p0050.html


    Anleitung zum Roboter:

    https://wiki.keyestudio.com/Ks…_Little_Turtle_Robot_V2.0


    Der Arduino-Kurs:

    https://www.youtube.com/playli…c3b29m2h3-0wUUTNVDoM5MmnJ


    Diskussionen, Fragen und Antworten auf

    https://community.hobbyelektroniker.ch


    Falls du mich unterstützen möchtest:

    Paypal: https://www.paypal.me/hobbyelektroniker

    Patreon: https://www.patreon.com/hobbyelektroniker


    Für Unterstützer auf Patreon steht das Video werbefrei zur Verfügung.