TigerJython | xx für Gymnasien |
Der Pi2Go hat 4 fest eingebaute, nach oben gerichtete Lichtsensoren, die mit LS_FRONT_LEFT, LS_FRONT_RIGHT, LS_REAR_LEFT, LS_REAR_RIGHT oder mit den IDs 0, 1, 2, 3 bezeichnet werden. Die Lichtsensoren können die Helligkeit der Umgebung messen. Die Funktion getValue() gibt die Werte zwischen 0 und 1000 zurück. Je heller, umso grösser ist der Sensorwert. |
Beispiel 1: Beim Lichtsignal anhalten Im Simulationsmodus wir die Lichtquelle mit einem grauen, halbtransparenten Kreis simuliert. Dieser wird im RobotContext mit useTorch() definiert und kann im Grafikfenster beliebig positioniert werden.
|
Ausführen mit Webstart |
Erklärungen zum Programmcode:
v = ls.getValue(): Gibt den Sensorwert zurück. Die Sensorwerte werden mit Pollen abgefragt | |
if v > 950 and not isBright: Das Flag isBright ist zu Beginn False und wird gesetzt, wenn der Roboter in den hellen Bereich eintritt. Gleichzeitig werden im if-Block die Leds eingeschaltet und der Roboter während der Wartezeit angehalten. Nach der Wartezeit fährt der Roboter weiter, befindet sich aber immer noch im hellen Gebiet. Der Block wird aber nicht erneut ausgeführt, da isBright erst dann zurückgesetzt wird, wenn der Roboter aus dem hellen Gebiet herausgefahren ist | |
RobotContext.useTorch(1, 150, 250, 100): Definiert eine Lichtquelle mit der Leistung 1, an der Position(150, 250) und mit der Höhe 100 über der Grundfläche. Die Helligkeit nimmt mit dem Quadrat des Abstandes ab |
Beispiel 2: Einer Lichtquelle folgen |
Realmodus |
Simulationsmodus. Ausführen mit Webstart |
|||
|
|
|||
|
|
Erklärungen zum Programmcode:
vL = lsL.getValue(): Gibt den Lichtwert des linken vorderen Sensors zurück | |
d = (vL - vR) / (vL + vR) : Für die Nachführung ist die relative Differenz zuständig | |
if d > -s and d < s : Wenn die Differenz klein ist, fährt der Roboter vorwärts. Sonst muss er auf dem linken bzw. rechten Kreisbogen fahren |
Anmerkung: Falls sich die Taschenlampe hinten dem Roboter befindet, funktioniert das Programm nicht. Bessere Lösung zeigt Beispiel 3.
Beispiel 3: Vier Lichtsensoren verwenden, um einer Lichtquelle folgen |
Realmodus |
Simulationsmodus. Ausführen mit Webstart |
|||
|
|
|||
|
|
Erklärungen zum Programmcode:
ls[i] = LightSensor(i): Die Lichtsensoren werden mit der ID 0, 1, 2 und 3 erzeugt | |
if v[2] + v[3] > v[0] + v[1]: : Wenn die Sensoren 3 und 4 den grössen Wert zurückgeben, befindet sich die Lichtquelle hinter dem Roboter. Der Roboter dreht danach am Ort gegen rechts |
Beispiel 4: Im Tunnel Leds einschalten Im Simulationsmodus wird mit useTorch() eine Lichtquelle erzeugt und mit useShadow() ein Schatten geworfen. Der Lichtsensorwert im Schattenbereich ist 0. |
Realmodus |
Simulationsmodus. Ausführen mit Webstart |
|||
|
|
|||
|
|
Erklärungen zum Programmcode:
isOn = False: Da die Lichtwerte mit Pollen ständig abgefragt werden, wird ein Flag isOn verwendet. Dadurch werden die Leds bei der Überschreitung der Helligkeitsschwelle nur einmal ein- bzw. ausgeschaltet. | |
ledRear.setColor(20, 0, 0) : Die hinteren Leds leuchten nur schwach, damit sie die Helligkeitsmessung der Lichtsensoren nicht beeinflussen | |
RobotContext.useTorch(1, 250, 220, 100): Erzeugt eine Lichtquelle | |
RobotContext.useShadow(100, 150, 400, 350): Erzeugt einen Schatten mit dem gegebenen linken oberen und rechten unteren Ecke | |
if (v1 == 0 or v2 == 0) and not isOn: Der simulierte Lichtsensor gibt den Wert 0 zurück, wenn sich der Roboter im Schatten befindet |
Aufgaben Serie 8: |
1) |
Der Roboter mit einem Lichtsensor soll 5 Mal bei einer Lichtschranke durchfahren. Er bewegt sich auf einer Kreisbahn und zählt die Runden. Sobald er zum fünften Mal die Lichtschranke passiert, hält er an.
|
2) |
Der Roboter soll mit seinem Lichtsensor seine Fahrbahn so regeln, dass er sich wie ein Satellit auf einer Kreisbahn immer im gleichen Abstand von einer Lichtquelle befindet. Löse die Aufgaben im Simulationsmodus. |