{"id":406,"date":"2021-01-25T13:22:22","date_gmt":"2021-01-25T12:22:22","guid":{"rendered":"https:\/\/followthescore.org\/schueler-labor\/?p=406"},"modified":"2021-02-17T18:18:11","modified_gmt":"2021-02-17T17:18:11","slug":"servos","status":"publish","type":"post","link":"https:\/\/followthescore.org\/schueler-labor\/servos\/","title":{"rendered":"Servos"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"600\" height=\"429\" src=\"https:\/\/followthescore.org\/schueler-labor\/wp-content\/uploads\/2021\/01\/Servo-Motor.jpg\" alt=\"\" class=\"wp-image-409\" srcset=\"https:\/\/followthescore.org\/schueler-labor\/wp-content\/uploads\/2021\/01\/Servo-Motor.jpg 600w, https:\/\/followthescore.org\/schueler-labor\/wp-content\/uploads\/2021\/01\/Servo-Motor-300x215.jpg 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.amazon.de\/Queta-Flugzeug-Helicopter-Airplane-Control\/dp\/B07MPPF5CS\/\">Servos<\/a> sind preiswerte kleine Stellmotore, die \u00fcber ein PWM-Signal (Pulsweitenmodulation) angesteuert werden. Sie besitzen einen Arm, der sich um 180\u00b0 (oder etwas mehr) drehen l\u00e4\u00dft. Ein bestimter Duty-Cycle (Puls-Pausen-Verh\u00e4ltnis) entspricht einer bestimmten Winkelstellung.<\/p>\n\n\n\n<p>Es gibt Bibliotheken, um Servos anzusteuern. Wir verwenden die &#8222;ESP32Servo&#8220; &#8211; Bibliothek.<\/p>\n\n\n\n<p>Im Web haben wir ein <a href=\"https:\/\/randomnerdtutorials.com\/esp32-servo-motor-web-server-arduino-ide\/\">Beispielsprogramm<\/a> gefunden, das gleich noch einen kleinen Webserver mitbringt.<\/p>\n\n\n\n<p>Wir m\u00fcssen dort das #include von &gt;Servo.h&gt; auf &lt;ESP32Servo.h&gt; ab\u00e4ndern und die Zugansdaten unseres WLAN eintragen. Dann k\u00f6nnen wir vom Browser aus die Position des Arms einstellen.<\/p>\n\n\n\n<h2>Webserver<\/h2>\n\n\n\n<p>Fast alle IoT (Internet of Things) Ger\u00e4te bieten heute eine Web-Oberfl\u00e4che, d.h sie besitzen einen eingebauten Webserver. Das ist nur selten eine &#8222;ausgewachsener&#8220; Apache-Server. Viel h\u00e4ufiger sind es ein paar Zeilen Code, die sich auf eine WiFi\/WebServer-Bibliothek st\u00fctzen und eingehende Nachrichten auf Port 80 erkennen. Das Programm bekommt die jeweilige Nachricht \u00fcbergeben und muss seinerseits eine Antwort (HTTP Response) erzeugen. Steckt in der Nachricht ein Sollwert f\u00fcr den Servo, so wird dieser entsprechend positioniert. Hat sich der Client ohne einen Sollwert gemeldet, so erf\u00e4hrt er einfach die aktuelle Position.<\/p>\n\n\n\n<p>In unserem Beispiel erzeugt der Server den HTML-Code, den er an den Client liefern m\u00f6chte, einfach direkt per &#8222;print&#8220; Anweisung. Alternativ k\u00f6nnte er auch eine &#8222;index.html&#8220; Datei ausliefern, aber dann m\u00fcssen wir auf dem ESP32 ein Dateisystem einrichten (SPIFFS) und das macht die Sache in klein wenig komplizierter (und langsamer).<\/p>\n\n\n\n<p><br>Was passiert, wenn wir die URL des ESP32 von zwei verschiedenen Rechnern (oder von zwei Browserfenstern) aufrufen? Der jeweils letzte Befehl beh\u00e4lt recht &#8211; aber der andere Web-Client bekommt eine Ver\u00e4nderung nur mit, wenn er den Dialog aktualisiert. Der ESP32 merkt sich n\u00e4mlich nicht, von wem er beauftragt wurde, den Motor zu verstellen. Au\u00dferdem k\u00f6nnte er als Server einen (ehemaligen) Client gar nicht erreichen: Das (normale) Web-Protokoll setzt immer voraus, dass der Client die Initiative ergreift. Es gibt Tricks, \u00fcber die ein Client seine Anzeige laufend aktuell halten kann (Hintergrund-Polling, WebSockets), aber darauf verzichten wir hier.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>Vorschl\u00e4ge zur Weiterentwicklung<\/h2>\n\n\n\n<p>Wie erweitert man das Programm so, dass es zwei Servos ansteuern kann?<\/p>\n\n\n\n<p>Wie schnell kann ein Servo maximal laufen?<\/p>\n\n\n\n<p>K\u00f6nnen wir die Arme beider Servos im Takt bewegen? Parallel, gegenl\u00e4ufig, phasenverschoben? Mit ganzzahligem Teilungsverh\u00e4ltnis (z.B. 3:2)?<br><br>Wenn es genau sein soll, m\u00fcssten wir sehr viele sehr kleine Winkel\u00e4nderungen \u00fcbertragen. Dabei wird uns irgendwann das Netzwerk bremsen. Besser w\u00e4re es, wenn wir einen Befehl f\u00fcr einen ganzen &#8222;Winke-Zyklus&#8220; definieren und diesen dann autonom auf dem ESP32 ausf\u00fchren. Zweckm\u00e4\u00dfig w\u00e4re es allerdings, wenn der Client ihn jederzeit unterbrechen k\u00f6nnte&#8230;<\/p>\n\n\n\n<p>Wenn wir an einen Arm einen Faden binden und ein kleines Gewicht herunterh\u00e4ngen lassen: Wie stark k\u00f6nnen wir das Gewicht ins Schaukeln bringen? Und zwar entweder interaktiv oder durch ein Progamm, das die Bewegungen des Arms geschickt auf die Pendelbewegungen des Gewichts abstimmt.<\/p>\n\n\n\n<p>Wenn wir den Faden durch einen sehr d\u00fcnnen Stab (Fahrradspeiche) ersetzen: K\u00f6nnen wir dann das Gewicht zum \u00dcberschlag bringen?<\/p>\n\n\n\n<p>K\u00f6nnen wir eine R\u00fcckkoppelung einbauen, so dass der Rechner immer wei\u00df, wo sich das Gewicht gerade befindet? Vielleicht \u00fcber einen optischen Sensor oder \u00fcber einen <em>Hall<\/em>-Effekt-Sensor? Letzterer erfasst Magnetfeld\u00e4nderungen. Wenn wir als Gewicht einen kleinen Magneten verwenden, k\u00f6nnte es sogar mit dem Sensor funktionieren, der auf der ESP32 Platine ohnehin verbaut ist. Durch sanftes Ansto\u00dfen (=Energiezufuhr passend zur Eigenfrequenz) k\u00f6nnen wir das Pendel endlos in Bewegung halten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Servos sind preiswerte kleine Stellmotore, die \u00fcber ein PWM-Signal (Pulsweitenmodulation) angesteuert werden. Sie besitzen einen Arm, der sich um 180\u00b0 (oder etwas mehr) drehen l\u00e4\u00dft. Ein bestimter Duty-Cycle (Puls-Pausen-Verh\u00e4ltnis) entspricht einer bestimmten Winkelstellung. Es gibt Bibliotheken, um Servos anzusteuern. Wir verwenden die &#8222;ESP32Servo&#8220; &#8211; Bibliothek. Im Web haben wir ein Beispielsprogramm gefunden, das gleich noch&hellip; <a class=\"more-link\" href=\"https:\/\/followthescore.org\/schueler-labor\/servos\/\"><span class=\"screen-reader-text\">Servos<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/posts\/406"}],"collection":[{"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/comments?post=406"}],"version-history":[{"count":3,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/posts\/406\/revisions"}],"predecessor-version":[{"id":493,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/posts\/406\/revisions\/493"}],"wp:attachment":[{"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/media?parent=406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/categories?post=406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/followthescore.org\/schueler-labor\/wp-json\/wp\/v2\/tags?post=406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}