9 Die Stein-Tasten und Motorumdrehungssensoren verwenden

Zusätzlich zum Berührungs-, Farb- und Infrarotsensor bietet der EV3 auch zwei integrierte Sensoren: Stein-Tasten und Motorumdrehungssensoren, die wir hier Drehsensoren nennen. Mit den Stein-Tasten auf dem EV3 kannst du Programme beeinflussen oder steuern, die gerade laufen. Zum Beispiel könnte das Programm über eine Taste abfragen, was der Roboter als Nächstes tun soll.

Jeder EV3-Motor hat einen eingebauten Drehsensor, der die Position des Motors bestimmt, sodass du Räder oder andere Mechanismen genau steuern kannst. Der Sensor misst auch die Motorgeschwindigkeit, damit kannst du erkennen, ob der Motor schneller oder langsamer dreht, als er sollte.

Die Stein-Tasten verwenden

Du kannst die Stein-Tasten Links, Rechts, Oben, Unten und Mitte in Programmen verwenden wie den Berührungssensor. Dein Roboter kann auf einen Tastendruck reagieren, indem er z.B. einen Klang abspielt. Du kannst den Roboter auch warten lassen, bis eine Taste losgelassen oder angetippt wird (also gedrückt und gleich wieder losgelassen).

Ein interessanter Weg, mehrere Tasten in einem Programm zu verwenden, ist, ein Menü auf dem EV3-Display anzuzeigen, in dem man die nächste Programmaktion wählen kann. Das Programm ButtonMenu in Abbildung 9-1 spielt einen von drei Klängen ab, den der Anwender per Taste wählt.

Zwei Anzeigeblöcke zeigen ein einfaches Menü auf dem Display an und fragen den Anwender, ob der Roboter »Hello«, »Okay« oder »Yes« sagen soll. Dann wartet ein Warteblock (im Modus Stein Image Tasten Image Vergleichen), darauf, dass der Anwender entweder Links, Mitte oder Rechts drückt.

Image

Abbildung 9-1: Das Programm ButtonMenu. Der Warteblock ist im Modus Stein-Tasten Image Vergleichen konfiguriert und der Schalterblock im Modus Stein-Tasten Image Messen.

Jetzt entscheidet ein Schalterblock (im Modus Stein-Tasten Image Messen), welche Taste gedrückt wurde, und der Roboter spielt den passenden Klang. Ist der Warteblock beendet, kommt der Schalterblock so schnell dahinter, dass die Taste noch immer gedrückt ist, wenn er den Tastenzustand prüft, selbst wenn du glaubst, die Taste sofort losgelassen zu haben.

Den Drehsensor verwenden

Wenn du den Roboter mit dem Bewegungslenkungsblock drei Umdrehungen vorwärts fahren lässt, weiß das Fahrzeug, wann es anhalten muss, weil der Drehsensor im EV3-Motor dem EV3 mitteilt, wie weit er sich gedreht hat. Ein Programm kann dir auch mitteilen, wie schnell sich der Motor dreht, indem es ermittelt, wie schnell sich die Motorposition ändert.

Du kannst die Motorposition in Warte-, Schleifen- und Schalterblöcken verwenden (im Grad-Modus oder Umdrehungen-Modus) sowie die Motorgeschwindigkeit (Modus Aktuelle Leistung).

Die Motorposition

Die Motorposition gibt an, wie weit sich ein Motor seit Programmstart gedreht hat. Verwende die Anschlussansicht auf dem EV3-Stein, gehe zu Motor B oder C und drehe die Motoren per Hand, um zu sehen, wie sich der Wert verändert.

Wenn du die Anschlussansicht das erste Mal startest (oder dein eigenes Programm), ist der Sensorwert 0. Der Wert wird positiv, wenn du den Motor vorwärts drehst, er wird negativ, wenn du ihn rückwärts über die 0 hinaus drehst, wie in Abbildung 9-2 gezeigt. Wenn du den Motor z.B. 90 Grad vorwärts drehst und dann eine Umdrehung rückwärts (360 Grad), sollte der Motor eine Position von 270 Grad anzeigen.

Du kannst die Positionsmessung verwenden, um ein Programm zu schreiben, das einen Klang spielt, wenn du ein Rad 180 Grad vorwärts drehst, wie in Abbildung 9-3 gezeigt. Ein Warteblock im Modus Umdrehungen Image Vergleichen Image Grad wartet, bis der Drehsensor größer oder gleich 180 Grad ist. Da die Sensoren in die EV3-Motoren eingebaut sind, werden sie immer an die Ausgabeanschlüsse angeschlossen (in diesem Programm an Ausgang B).

Die Motorposition zurücksetzen

Nehmen wir an, wir möchten die Aktion in HandRotate in einer Schleife wiederholen, sodass der Klang erneut abgespielt wird, wenn du das Rad um weitere 180 Grad gedreht hast. Aber im ersten Durchlauf wurde der Motor ja bereits so weit gedreht, sodass die Bedingung zu Anfang des zweiten Durchlaufs schon erfüllt wäre und der Klang sofort abgespielt werden würde. Das wollen wir aber nicht.

Die Lösung besteht darin, den Drehsensorwert am Anfang der Schleife zurück auf 0 zu stellen, indem wir einen Motorumdrehungensblock im Modus Zurücksetzen verwenden, wie in Abbildung 9-4 gezeigt. (Du erfährst mehr über die anderen Funktionen dieses Blocks und der anderen Sensorblöcke später in Kapitel 14.)

Image

Abbildung 9-2: Wenn du einen großen oder mittleren Motor zur Vorwärtsdrehung programmierst, dreht er sich in Richtung des blauen pfeils und die Werte des Drehsensors werden positiv.

Image

Abbildung 9-3: Das programm HandRotate lässt den Roboter »okay« sagen, wenn du den Motor B um 180 Grad vorwärts drehst. Ein Warteblock mit der Konfiguration Motorumdrehungen Image Vergleichen Image Umdrehungen und einem Schwellenwert von 0,5 würde das gleiche tun.

Starte das Programm und prüfe, ob du den Klang jedes Mal hörst, wenn du das Rad um weitere 180 Grad gedreht hast.

Die Drehgeschwindigkeit

Der Drehsensor errechnet die Rotationsgeschwindigkeit eines Motors als Wert zwischen -100% und 100% abhängig von der Schnelligkeit der Positionsänderungen. Der Wert ist positiv, wenn der Motor vorwärts dreht (blauer Pfeil in Abbildung 9-2), negativ, wenn er rückwärts dreht (grüner Pfeil), und 0, wenn sich der Motor nicht dreht.

Beim großen Motor entspricht ein Sensorwert für Aktuelle Leistung von 50% einer Drehgeschwindigkeit von 85 Umdrehungen pro Minute (U/min). Diesen Wert kannst du entweder durch Drehung per Hand erreichen oder durch einen Bewegungsblock mit einer Leistungseinstellung von 50%.

HINWEIS Der Modus Aktuelle Leistung misst die Drehgeschwindigkeit und keinen Strom oder Stromverbrauch.

Image

Abbildung 9-4: Das programm HandRotateReset setzt den Sensorwert am Schleifenanfang durch den Motorumdrehungsblock im Zurücksetzen-Modus zurück auf 0. Die Wiedergabeart im Klangblock ist Einmal abspielen (1), sodass das programm nicht darauf wartet, dass der Klang fertig abgespielt wurde.

Die Rotationsgeschwindigkeit berechnen

Du kannst die mit dem Modus Aktuelle Leistung gemessene Drehgeschwindigkeit in Umdrehungen pro Sekunde wie folgt berechnen:

Großer Motor
Umdrehungen/min = Sensorwert x 1,70

Mittlerer Motor
Umdrehungen/min = Sensorwert x 2,67

Wenn die aktuelle Leistung eines großen Motors also bei 30% liegt, dreht der Motor mit 30 x 1,70 = 51 Umdrehungen/min. Da eine Umdrehung pro Minute auch sechs Grad je Sekunde entspricht, kannst du die Drehgeschwindigkeit in Grad pro Sekunde wie folgt berechnen:

Drehgeschwindigkeit (Grad/s) = Umdrehungen pro Minute x 6

In diesem Beispiel erhältst du 51 x 6 = 306 Grad pro Sekunde.

Image

Abbildung 9-6: Das Programm PushToStart

Die Drehgeschwindigkeit in einem Programm messen

Um die Drehgeschwindigkeit in einem Programm zu messen, verwendest du den Modus Aktuelle Leistung des Drehsensors, wie in Abbildung 9-6 gezeigt. Das Programm PushToStart verwendet einen Warteblock, der es anhält, bis Motor B einen Sensorwert von 30% (51 U/min) erreicht. Dann übernimmt ein Bewegungsblock mit derselben Geschwindigkeit. Starte das Programm und schiebe den EXPLOR3R per Hand vorwärts, bis er von selbst zu fahren beginnt.

Funktionsweise der Geschwindigkeitsregelung

Bis jetzt haben wir verschiedene Versionen der grünen Bewegungsblöcke verwendet, um den Roboter zu bewegen. Diese Blöcke lassen den Motor mit einer konstanten, geregelten Geschwindigkeit laufen. Wenn der Motor wegen eines Hindernisses oder einer Steigung langsamer wird, gibt ihm der EV3 mehr Strom, sodass die gewünschte Geschwindigkeit erhalten bleibt. Die Leistungseinstellung dieser Blöcke legt in Wirklichkeit die Geschwindigkeit fest, die der Motor aufrechtzuerhalten versucht. Daher kann ein großer Motor, der mit 20% Geschwindigkeit dreht (34 U/min), bei einer schweren Arbeit mehr Strom verbrauchen als ein Motor bei einer leichten Aufgabe bei 40% Geschwindigkeit (68 U/min).

Wenn du nicht möchtest, dass der EV3 dem Motor mehr Leistung zuführt, um die Geschwindigkeit zu erhalten, kannst du ungeregelte Motoren verwenden.

Geschwindigkeitsregelung in der Praxis

Um den Unterschied zwischen geregelter und ungeregelter Geschwindigkeit zu sehen, erstellt du ein Programm, das den Roboter eine Steigung hinauffahren lässt, z.B. einen schräg stehenden Tisch. Zuerst fährt der Roboter drei Sekunden ungeregelt und dann drei Sekunden geregelt.

Du benötigst zwei Blöcke vom Typ Ungeregelter Motor (einen für jeden Motor) auf der erweiterten Programmierpalette mit einer Leistungseinstellung von 20%, wie in Abbildung 9-7. Nach drei Sekunden hältst du die Motoren an, indem du ihre Leistung auf 0% setzt. Für eine geregelte Geschwindigkeit von 20% (34 U/min) verwendet das Programm einen Bewegungsblock wie vorher auch.

Setze den EXPLOR3R auf eine schräge Oberfläche und führe das Programm SteepSlope aus. Du wirst feststellen, dass der Roboter die Schräge in den ersten drei Sekunden recht langsam hinauffährt und danach drei Sekunden lang schneller.

Im ersten Teil der Fahrt schaltet der EV3 die Motoren ein und lässt sie drei Sekunden lang einfach laufen. Der Roboter bewegt sich langsam, da er mehr Kraft benötigt, einen Hügel hinaufzufahren, als in der Ebene. Im zweiten Teil melden die Drehsensoren dem Roboter, dass er langsam ist, und der EV3-Stein liefert mehr Leistung, damit der Roboter schneller wird.

Einen blockierten Motor stoppen

Wenn du versuchst, ein Rad zu bremsen, während ein Bewegungsblock läuft, merkst du, dass der Roboter versucht, dagegen anzuarbeiten. Bei Radfahrzeugen ist das sehr nützlich, aber bei Mechanismen, die keine ganze Umdrehung machen, häufig unerwünscht, z.B. bei einem Greifer.

Um dieses Problem zu vermeiden, kannst du den Ungeregelter-Motor-Block verwenden und den Drehsensor, um zu erkennen, wenn der Motor blockiert ist, wie im Programm WaitForStall gezeigt (siehe Abbildung 9-8). Das Programm schaltet Motor B mit 30% Leistung ein, wartet, bis die Geschwindigkeit unter 5% sinkt, was anzeigt, dass der Motor blockiert ist. Wenn du dieses Programm auf dem EXPLOR3R ausführst, sollte dein Roboter Kreise fahren, bis du ihn verlangsamst, indem du seinen Weg blockierst.

Image

Abbildung 9-7: Das Programm SteepSlope. Mit einer Weiterleitung habe ich das Programm zur besseren Lesbarkeit aufgeteilt, du musst dies aber nicht ungedingt tun.

Image

Abbildung 9-8: Das WaitForStall-programm dreht Motor B, bis er blockiert. Der erste Warteblock ist notwendig, damit der Motor auf eine gewisse Drehzahl kommt. Sonst wäre die Drehgeschwindigkeit bei der ersten Messung 0, sodass das Programm sofort anhalten würde.

Weitere Experimente

Jetzt hast du gelernt, mit allen Sensoren im EV3-Kasten umzugehen und Roboter zu bauen, die mit ihrer Umgebung interagieren. Der EXPLOR3R ist dafür nur ein Beispiel. Wenn du in diesem Buch weiterliest, findest du viele weitere Roboter mit Sensoren, die sie auf unterschiedliche Weise einsetzen.

Bislang hast du die Teile kennengelernt, die für den Bau eines Roboters unersetzlich sind: den EV3, Motoren, Sensoren und die EV3-Software. Die folgenden Kapitel erläutern jede Komponente genauer, sodass du ausgefeiltere und damit auch lustigere Roboter bauen kannst. Im folgenden Kapitel zeige ich dir, wie du Technic-Elemente mit dem EV3-Kasten verwendest, um eigene Roboter zu bauen.

Die folgenden Selbst-entdecken-Aufgaben helfen dir dabei, weitere Einsatzmöglichkeiten für Sensoren aus diesem Kapitel zu entdecken.

SELBST KONSTRUIEREN 11:
VOLLAUTOMATISCHES HAUS

Bau: Image Programmierung: Image

Hast du schon Häuser aus normalen Lego-Steinen gebaut? Nachdem du jetzt mit Motoren, Sensoren und Programmen umgehen kannst, warum baust du mit dem EV3 kein Roboterhaus?

TIPP Öffne die Tür automatisch mit einem Motor, wenn jemand den Klingelknopf drückt (den Berührungssensor), und richte einen Alarm ein, falls der Infrarotsensor jemand erkennt. Verwende einen weiteren Motor, um die Fensterläden je nach mit dem Farbsensor gemessener Lichtmenge zu öffnen und zu schließen.