DU LERNST HIER... |
wie der EV3 mit seinen Lichtsensoren die Helligkeit der Unterlage messen kann. |
WIE FUNKTIONIERT EIN LICHTSENSOR? |
Er ist mit einer roten Leuchtdiode (LED) und einer Fotodiode ausgestattet. Die LED beleuchtet die darunterliegende Fläche, die Fotodiode misst die Intensität des reflektierten Lichts. Die Sensorwerte liegen zwischen 0 und 1023 (je heller umso grösser ist der Wert). |
MUSTERBEISPIELE |
from grobot import * repeat: v = ls3.getValue() if v < 500: rightArc(0.2) else: leftArc(0.2) delay(100) Du kannst das Programm auch im Simulationsmodus ausführen. Dazu musst du gerade nach der Importzeite folgende zwei Zeilen einfügen: RobotContext.useBackground("sprites/blackarea.gif")
RobotContext.setStartPosition(430, 350)
Die erste Zeile fügt das Hintergrundbild "blackarea.gif" hinzu, die zweite Zeile bestimmt die Position, an der der Roboter zu Beginn erscheint. (Das Grafikfenster ist 500 x 500 Pixel gross, die Koordinate (0,0) ist oben links). Alle Bilder, die in den Beispielen und Aufgaben verwendet werden, sind in der TigerJython-Distribution enthalten (Bilderbibliothek). Du kannst auch eigene Hintergrundbilder verwenden.
Im Realmodus werden die Zeilen mit RobotContext nicht berücksichtigt. Du kannst das gleiche Programm auch im Realmodus ausführen. Du siehst bereits im Simulationsmodus, dass die Robotersteuerung vom Radius des Links- bzw. Rechtsbogen abhängig ist. Ist er zu klein (z.B. 0.05), bewegt sich der Roboter sehr langsam und unruhig. Ist er zu gross (z.B. 0.6), so verliert er oft die Spur.
from grobot import * RobotContext.useBackground("sprites/trail.gif") setSpeed(20) repeat: vR = ls1.getValue() vL = ls2.getValue() if vL < 500 and vR < 500: forward() elif vL > 500 and vR < 500: rightArc(0.1) elif vL < 500 and vR > 500: leftArc(0.1) delay(100) Für die Simulation verwendest du das Hintergrundbild trail.gif. Im Realmodus musst du je nach grösse der nachgebauten Vorlage die Geschwindigkeit und den Radius der Kreisbögen anpassen. Auch der Schwellenwert 500 muss je nach Helligkeit der Unterlage angepasst werden. Mit print(vR) und print(vL) kannst du die Messwerte im Terminalfenster anzeigen. Beispiel 3: Quadrat fahren
from grobot import * RobotContext.useBackground("sprites/field1.gif") RobotContext.setStartPosition(380, 400) def keepOnTrack(): if vL < 500 and vR < 500: forward() elif vL < 500 and vR > 500: leftArc(0.1) elif vL > 500 and vR < 500: rightArc(0.1) repeat: vR = ls1.getValue() vL = ls2.getValue() if vL > 500 and vR > 500: left() delay(500) else: keepOnTrack() delay(100) Für die Simulation verwendest du das Hintergrundbild field1.gif. |
MERKE DIR... |
Mit einem Lichtsensor kannst du die Helligkeit der Unterlage messen. Der Befehl ls1.getValue() liefert den Wert des Lichtsensors, der am Sensorport 1 angeschlossen ist, als Wert zwischen 0 und 1023. Je grösser der Wert, umso heller ist die Unterlage. Mit zwei Lichtsensoren, lässt sich der Roboter beim Fahren auf den Tracks besser steuern. |
ZUM SELBST LÖSEN |
|
ANMERKUNG |
Die Bibliothek grobot enthält nur die Lichtsensor-Funktionen des Colorsensors. Falls du den Colorsensor auch für die Farberkennung verwenden willst, musst du die OOP-Bibliothek ev3robot verwenden (siehe Colorsensor). |
Viele Hintergrundbilder für die Simulation stehen im TigerJython zur Verfügung (siehe "Hilfe/APLU-Dokumentation/Bilderbibliothek").
Du kannst auch eigene Hintergrundbilder erstellen. Sie müssen 500x500 Pixel gross und im gif- oder png-Format sein. Du muss sie im auf deinem Computer im Unterverzeichnis /bin des TigerJython-Installationsvezeichnisses speichern (dort wo siche die Datei tigerjython2.jar befindet). Wenn du im Unterverzeichnis /bin einen Ordner sprites einrichtest, kannst du die Bilder in deinem Programm wie gewöhnt aufrufen mit:
Unter Windows z.B.
RobotContext.useBackground("c:/users/UrsMeier/desktop/bilder/mybackground.gif")
oder RobotContext.useBackground("d:/bilder/bild.gif")
Unter MacOS z.B.
RobotContext.useBackground("/Users/UrsMeier/Desktop/Bilder/mybackground.gif")
Unter Windows kannst du die eigenen Hintergrundbilder auch im Unterverzeichnis sprites des Unterverzeichnisses /bin des Installationsverzeichnisses speichern. Dann werden die Bilder mit
RobotContext.useBackground("sprites/mybackground.gif")
automatisch in deinem Programm integriert.
Zu Beginn wird die Zustandsvariable s auf null gesetzt. In der while-Schleife schaltet man den Zustand um:
.... s = 0 forward() repeat: v = ls1.getValue() if v < 500 and s == 0: # Bei Haltestelle s = 1 ... if v > 500 and s == 1: # Auf weisser Zwischenfahrt s = 2 if v < 500 and s == 2: # Am Endbahnhof ...