8 Den Infrarotsensor verwenden

Mit dem Infrarotsensor nimmt dein Roboter seine Umgebung wahr, indem er mittels Infrarotlicht den Abstand zu Objekten ermittelt. Zusätzlich dient er als Empfänger für Signale der IR-Fernsteuerung (auch Sender genannt). Der Sensor erkennt, wenn Knöpfe auf der Fernsteuerung gedrückt werden, wie weit sie etwa entfernt ist und die relative Richtung und Position des Roboters. dazu.

Du kannst alle diese Funktionen durch einen der vier Modi des Infrarotsensors in deinen Programmen nutzen: Nähemodus, Fernsteuerungsmodus, Signal-Nähe und Signal-Richtung (siehe Abbildung 8-1). Du kannst Infrarotlicht eines Senders mit einer Digitalkamera sehen, wie du sie vielleicht in einem Smartphone besitzt. Außerdem siehst du im Nähemodus ein schwaches Licht aus dem Sensor kommen. In diesem Kapitel lernst du, wie die einzelnen Modi funktionieren und wie du Programme schreibst, mit denen der EXPLOR3R Hindernissen ausweicht, auf Fernsteuerungssignale reagiert und einen Sender findet.

Der Nähemodus

Der Roboter misst im Nähemodus den Abstand des Sensors zu einem Objekt. Statt die Strecke in Zentimetern zu messen, gibt dir der Sensor den Wert als Prozentangabe zwischen 0% (sehr nah) und 100% (weit weg) an. Gehe zur Anschlussansicht des EV3-Steins, wähle Eingang 4 und IR-PROX (kurz für Infrarot Proximity), um die Sensorwerte zu erhalten.

Der Sensorwert basiert auf der von einem Objekt zurückgeworfenen Lichtmenge, wenn es vom Sensor angestrahlt wird. Je näher das Objekt am Sensor ist, desto mehr Licht wird von ihm reflektiert. Manche Oberflächen reflektieren Licht besser als andere, sodass sie näher am Sensor zu sein scheinen. Eine weiße Wand scheint z.B. näher zu sein als eine schwarze, auch wenn beide genau gleich weit entfernt sind.

Image

Abbildung 8-1: Die Betriebsmodi des Infrarotsensors. Die rot gestrichelten Linien zeigen die unsichtbaren Strahlen des Infrarotlichts. Wenn du den Weg zwischen Sensor und Fernsteuerung unterbrichst, erhält der Sensor keine korrekte Messung.

Hindernissen ausweichen

Der Sensor kann zwar nicht die genaue Distanz zu einem Objekt ermitteln, trotzdem kann er gut erkennen, ob sich eines im Weg befindet. Der Sensorwert beträgt 100%, wenn nichts zu erkennen ist, und verringert sich bis auf etwa 30%, wenn sich der Roboter einer Wand nähert. Wenn du den Roboter programmierst, vorwärts zu fahren, aber auszuweichen, sobald der Sensorwert 65% unterschreitet, hast du schon einen Roboter, der Hindernisse umfährt. Das Programm ProximityAvoid in Abbildung 8-2 verwendet einen Warteblock, um auf Messwerte unter 65% zu reagieren.

Sensoren kombinieren

Du bist in deinen Programmen nicht auf einzelne Sensoren beschränkt. Alle EV3-Sensoren können in einem Programm kombiniert werden. Dadurch reagiert dein Roboter zuverlässiger.

Der Infrarotsensor sieht z.B. kleine Objekte, die im Weg liegen, nicht immer, der Berührungssensor aber schon. Andererseits reagiert der Berührungssensor nicht auf bestimmte weiche Objekte, wie eine Gardine, der Infrarotsensor aber schon. Wenn du die Sensorwerte kombinierst, wird der EXPLOR3R weniger oft irgendwo hängenbleiben, wenn er herumfährt.

Eine Möglichkeit, Sensormessungen zu kombinieren, besteht darin, einen Schalterblock innerhalb eines Schalterblocks zu verwenden, was zu einem Programm wie in Abbildung 8-3 führt. Erstelle das Programm CombinedSensors, das einen Entscheidungsbaum wie in Abbildung 8-4 umsetzt, und führe es aus.

HINWEIS Vergiss nicht, den Berührungssensor aus Kapitel 6 wieder anzubauen. Der Sensor sollte an Eingabeanschluss 1 angeschlossen werden.

Image

Abbildung 8-2: Erstelle ein neues Projekt, EXPLOR3R-IR, und ein programm namens ProximityAvoid und konfiguriere die Blöcke wie gezeigt. Beachte die Ähnlichkeit zum Programm TouchAvoid in Kapitel 6.

Image

Abbildung 8-3: Das Flussdiagramm für CombinedSensors

Image

Abbildung 8-4: Das Programm CombinedSensors. Passe die Schalt- und Schleifenblöcke in der Größe an, wenn nötig.

Der Fernsteuerungsmodus

Im Fernsteuerungsmodus erkennt der Infrarotsensor, welche Knöpfe auf der Fernsteuerung gedrückt wurden, sodass dein Programm darauf reagieren kann. So konntest du deinen Roboter auch in Kapitel 2 fernsteuern. Die Anwendung IR-Fernsteuerung des EV3-Steins ist in Wirklichkeit ein Programm, das den Roboter abhängig vom gedrückten Knopf in verschiedene Richtungen lenkt. Der Sensor kann 12 Knopfkombinationen, Button-IDs genannt, erkennen, wie in Abbildung 8-5 gezeigt.

Mit einem Schalterblock im Messmodus kannst du für jeden Sensorwert die auszuführenden Blöcke festlegen, in diesem Beispiel für jede Button-ID. Das Programm CustomRemote nutzt einen Schalterblock, um den EXPLOR3R vorwärts fahren zu lassen, wenn die beiden oberen Knöpfe gedrückt werden (Button-ID 5). Es steuert nach links, wenn der Knopf oben links gedrückt wird (ID 1), und nach rechts, wenn der Knopf oben rechts gedrückt wird (ID 3), und hält an, wenn kein Knopf gedrückt wird (ID 0). Der Standardwert ist anhalten, sodass der Roboter anhält, wenn eine ungültige Kombination gedrückt wird.

Image

Abbildung 8-5: Der Infrarotsensor erkennt 12 Knopfkombinationen (Button-IDs) der Fernsteuerung. Gedrückte Knöpfe sind rot dargestellt.

Image

Abbildung 8-6: Das Programm CustomRemote

Da das Programm so konfiguriert ist, dass es auf Kanal 1 der Fernsteuerung reagiert, sollte diese auf Kanal 1 eingestellt sein (siehe Abbildung 2-10). Wenn du einen weiteren EV3-Roboter hast, verwende für ihn einen anderen Kanal (2, 3 oder 4), um Interferenzen zu vermeiden. Erstelle jetzt das Programm und führe es aus (siehe Abbildung 8-6) und lasse den Roboter mit der Fernsteuerung herumfahren.

Diese Technik ist besonders nützlich (und lustig), denn jetzt kannst du ein eigenes Fernsteuerprogramm für alle Roboter erstellen. In Kapitel 12 baust du z.B. einen Formel-1-Rennwagen, der anders lenkt und steuert als der EXPLOR3R. Die normale IR-Fernsteuerung funktioniert damit nicht, aber du kannst das Problem umgehen, indem du ein eigenes Programm für die Steuerung des Rennwagens schreibst.

Der Modus Signal-Nähe

Zusätzlich zur Erkennung gedrückter Fernsteuerungsknöpfe kann der Infrarotsensor auch die Signalstärke und –richtung erkennen. Der Roboter kann diese Informationen verwenden, um die Fernsteuerung (also den Sender) zu orten und darauf zuzufahren.

Im Modus Signal-Nähe verwendet der Sensor die Signalstärke des Senders, um eine relative Distanz von 1% (der Sender ist sehr nah am Sensor) und 100% (er ist sehr weit weg) zu errechnen. Die besten Ergebnisse erhältst zu, wenn sich der Sender auf gleicher Höhe wie der Empfänger befindet oder nur wenig darüber und die »Augen« auf den Roboter gerichtet sind (siehe Abbildung 8-1).

Das kleine grüne Licht auf dem Sender zeigt an, wenn ein Signal gesendet wird. Es spielt keine Rolle, welcher Knopf gedrückt wird, wenn es um die Ermittlung von Abstand oder Richtung geht, am besten passt jedoch der Knopf oben (Button-ID 9). Das grüne Licht leuchtet, wenn du den Knopf drückst, und erlischt, wenn du ihn erneut drückst, sodass du ihn nicht die ganze Zeit betätigen musst.

Jetzt erstellt du das Programm BeaconSearch1, das den Roboter wiederholt »Searching« sagen lässt, bis der Infrarotsensor eine Signal-Nähe von weniger als 10% erkennt. Mit anderen Worten sagt der Roboter so lange »Searching«, bis du die Fernsteuerung nah an den Sensor hältst. Das erreichst du mit einem Schleifenblock, der wie in Abbildung 8-7 konfiguriert ist. Wenn die Schleife beendet ist, sagt der Roboter »Detected«.

HINWEIS Der Sensor kann auch erkennen, ob er überhaupt ein Signal empfängt. Du kannst den Roboter anhalten lassen, wenn er kein Signal mehr erkennt. Hierzu verwendest du einige neue Blöcke, auf die wir in Kapitel 14 zurückkommen.

Image

Abbildung 8-7: Das Programm BeaconSearch1

Der Modus Signal-Richtung

Im Modus Signal-Richtung kann der Sensor die Richtung des Senders erkennen. Die Richtung gibt dem Roboter eine grobe Vorstellung, in welchem Winkel sich die Fernsteuerung befindet. Die Messwerte liegen zwischen -25 und 25, wie in Abbildung 8-8 gezeigt. Der Sensor erkennt keine genauen Winkel, aber die Werte sind gut genug, um zu entscheiden, ob der Sender sich links (negative Werte) oder rechts (positive Werte) vom Roboter befindet.

Der Sensor kann den Sender in allen Richtungen erkennen, auch wenn er sich hinter dem Sensor befindet, aber im grünen Bereich in Abbildung 8-8 ist die Messung an genauesten. Ein Richtungswert von 0 bedeutet, entweder, dass der Sensor genau vor oder hinter dem Roboter ist, oder, dass kein Signal empfangen wird.

Image

Abbildung 8-8: Die Werte für die Signal-Richtung reichen von -25 bis 25. Negative Werte bedeuten, dass sich der Sender links vom Sensor befindet, positive Werte bedeuten rechts. Ein Wert von 0 zeigt an, dass der Roboter den Sender genau vor- oder hinter sich hat.

Die Information, ob sich der Sender links oder rechts vom Roboter befindet, reicht aus, um ihn auf den Sender zufahren zu lassen. Sieht der Sensor den Sender auf der linken Seite, sollte der Roboter nach links fahren. Sieht er ihn rechts, sollte er nach rechts fahren. Du kannst mit einem Schalterblock prüfen, ob der Wert kleiner als 0 ist (<), was bedeutet, dass sich der Sender links befindet.

Wenn du die Lenkung kontinuierlich an den Sensorwert anpasst und gleichzeitig vorwärts fährst, findet das Programm und damit der Roboter den Sender. Entferne die Klangblöcke aus dem vorherigen Programm und füge einen Schalterblock mit zwei Bewegungslenkungsblöcken ein, um das BeaconSearch2-Programm fertigzustellen, wie in Abbildung 8-9. Die Schleife lässt den Roboter nach dem Sender suchen, bis die Nähe (Entfernungswert) unter 10% sinkt. Dann ist das Programm beendet.

HINWEIS Der Sender muss kontinuierlich senden, entweder durch Drücken eines beliebigen Knopfes oder durch Einschalten des Senders über den Knopf ganz oben (Button-ID 9), sodass die grüne Lampe ständig leuchtet.

Image

Abbildung 8-9: Der Programm BeaconSearch2 lässt den Roboter auf den Sender zufahren und anhalten, wenn er ganz nahe ist. Wenn du dich um den Roboter herumbewegst, folgt dir der Roboter.

Sensormodi kombinieren

Mehrere Betriebsmodi des Infrarotsensors in einem Programm zu kombinieren kann zu unerwartetem Verhalten führen, da der Sensor zwischen den Modi umschalten muss. (Signal-Nähe und Signal-Richtung sind die einzigen Modi des Infrarotsensors, zwischen denen du ohne Pause umschalten kannst.)

Nimm an, du möchtest den Schleifenblock im Programm CustomRemote (siehe Abbildung 8-6) laufen lassen, bis er eine Nähe (Entfernungswert) unter 10% erkennt. Ein Schalterblock würde den gedrückten Knopf im Fernsteuerungsmodus erkennen und eine Schleife die Entfernung im Nähemodus. Da der Sensor aber von einem zum anderen Modus umgeschaltet werden muss, würde das Programm sehr langsam laufen und dein Roboter nur verzögert auf die Fernsteuerung reagieren. (Wenn du möchtest, probiere es aus.)

Wenn das Timing nicht kritisch ist, kannst du verschiedene Modi in einem Programm kombinieren. Das MultiMode-Programm in Abbildung 8-10 funktioniert wie erwartet. Zuerst wartet es, bis du den Knopf oben rechts auf der Fernsteuerung drückst (Button-ID 3), worauf du einen Piepton hörst. Dann sagt es »Yes«, wenn die Nähe (Entfernungswert) kleiner als 30% ist und sonst »No«. Zwischen dem Piepton und dem gesprochenen Wort hörst du eine Pause. Das ist die Verzögerung durch das Umschalten vom Fernsteuerungs- zum Nähemodus.

Weitere Experimente

Mit dem Infrarotsensor kann der Roboter Objekte in seiner Umgebung aus der Ferne erkennen. Zusammen mit der Fernsteuerung kann der Sensor als Empfänger und Signaldetektor dienen. Du weißt jetzt auch, wie der Berührungssensor und der Infrarotsensor den Roboter Hindernisse sicherer erkennen lassen. Natürlich kannst du auch den Farbsensor hinzufügen und in den Selbst-entdecken-Aufgaben noch ausgefeiltere Programme schreiben!

Image

Abbildung 8-10: Das Programm MultiMode. Das Timing ist hier nicht kritisch, sodass Fernsteuerungs- und Nähemodus im selben Programm verwendet werden können.

SELBST KONSTRUIEREN 9:
EIN BAHNÜBERGANG

Bau: Image Programmierung: Image

Kannst du einen automatischen Bahnübergang für die Lego-Modelleisenbahn bauen? Verwende einen Motor, um eine Schranke zu bewegen, der verhindert, dass Autos über die Gleise fahren, während ein Zug durchfährt. Setze den Infrarotsensor ein, um festzustellen, ob sich eine Modellbahn nähert und wann die Schranke geschlossen und wieder geöffnet werden soll.

SELBST KONSTRUIEREN 10:
EIN NARRENSICHERER ALARM

Bau: Image Programmierung: Image

Kannst du mit allen drei Sensoren im EV3-Kasten einen Einbruchsalarm bauen, der niemals fehlschlägt? Verwende den Berührungssensor, um zu erkennen, ob eine Tür geöffnet wird (siehe Selbst konstruieren 4 auf Seite 74), den Farbsensor, um Personen in der Tür zu erkennen (Selbst konstruieren 7 auf Seite 88), und den Infrarotsensor im Nähemodus, um Bewegungen in der Nähe eines interessanten Objekts, wie einem Telefon, aufzuspüren.

TIPP Baue deinen Roboter und dein Programm so, dass du (und nur du) den Raum immer noch betreten kannst, ohne dass Alarm ausgelöst wird.