DAS PROJEKT
Der Edison Roboter besitzt Lichtsensoren vorne links und rechts. Die Sensoren messen das Licht in Werten zwischen 0 (dunkel) bis über 1000 (sehr hell). Mit dem entsprechenden EdScratch-Programm verhält sich Edison wie eine Straßenlaterne und schaltet seine LEDs bei Dunkelheit ein. Der Roboter kann aber auch wie eine Motte dem Licht folgen oder wie eine Kellerassel vor dem Licht flüchten.
Die Lichtsensoren unterscheiden nicht zwischen verschiedenen Lichtquellen. Die Experimente mit Licht funktionieren am besten mit einer Taschenlampe in halbdunklen Räumen und ohne direkte Sonneneinstrahlung auf den Edison. Falls andere Lichtquellen dazukommen, kann der Roboter die Lichtstärke nicht richtig messen und reagiert unvorhersehbar.
DEINE MISSION
Für dieses Projekt benötigst du eine Taschenlampe (möglichst LED-Taschenlampe) als helle Lichtquelle in einem mäßig beleuchteten Raum.
Um die Funktion eines Lichtsensors zu prüfen, schreibe folgendes Programm:
- Wenn der linke Lichtsensor einen Helligkeitswert > 700 feststellt, soll der Roboter piepen.
- Wenn der Lichtsensor abgedeckt wird, soll das Piepen aufhören.
- Das Programm soll als endlose Schleifen laufen und wird manuell mit der viereckigen Stopptaste beendet.
- Den erforderlichen Block “light level of left light sensor” (Lichtstärke des linken Lichtsensors) findest du in Kategorie “Sensing”.
- Du kannst dein Programm testen, indem du den linken Lichtsensor abwechselnd abdeckst und ins Licht hältst.
So haben wir aus Edison einen “Lichtdetektor” gemacht (edison_licht1_1.ees):
- Das Programm läuft in einer unendlichen Schleife (Block “forever”). Wir stoppen es manuell mit der viereckigen Stopptaste.
- Wenn der linke Lichtsensor eine Lichtstärke größer 700 misst, wird eine Schleife mit Piepen ausgeführt.
- Die Schleife mit dem Piepen wird fünfmal durchlaufen. Danach ist dieser Wiederholungsblock beendet und es geht in der Forever-Schleife weiter. Dann steht die nächste Auswertung des Lichtsensors an.
Im nächsten Schritt wollen wir wissen, ob das Licht von links oder rechts kommt. Lass uns ein Programm schreiben, in dem wir die Werte der beiden Lichtsensoren vergleichen:
- Wenn der linke Lichtsensor einen größeren Helligkeitswert misst, als der rechte Lichtsensor, soll die linke LED blinken. Wenn es rechts heller ist, soll die rechte LED blinken.
- Das Programm läuft als endlose Schleife und du stoppst es manuell mit der viereckigen Stopptaste.
- Du kannst dein Programm testen, indem du die Lichtsensoren abwechselnd mit der Hand abdeckst.
Wir haben das Programm so umgesetzt (edison_licht2_2.ees):
- Das Programm läuft in einer unendlichen Schleife (Block “forever”). Wir stoppen es manuell mit der viereckigen Stopptaste.
- Wir haben uns für eine If-Else-Klammer entschieden, um die Abfrage “Ist linker Lichtwert größer als rechter Lichtwert” durchzuführen.
- Wenn der linke Lichtwert größer ist, blinkt die linke LED dreimal, ansonsten blinkt die rechte LED dreimal.
- Nach dem Blinken beginnt die forever-Schleife von vorn und vergleicht erneut die Messwerte der Sensoren.
Nun programmieren wir den Edison mit automatischer Beleuchtung wie bei modernen Autos:
- Wenn es dämmert (Lichtwert < 700) , blinkt Edison mit beiden LEDs.
- Bei Dunkelheit (Lichtwert < 200) leuchten beide LEDs dauernd.
- Ist es hell (Lichtwert ≧ 700), sind beide LEDs aus.
- Dazu werten wir den Lichtsensor aus, der den größten Helligkeitswert misst. Das kann mal der rechte oder der linke Lichtsensor sein.
In diesem Programm (edison_licht3_1.ees) arbeiten wir mit der Variablen “licht”, um mit dem gemessenen Lichtwert Vergleiche anzustellen.
- Zuerst prüfen wir, ob es auf der linken oder der rechten Seite heller ist. Dazu vergleichen wir wieder die Lichtwerte der beiden Sensoren.
- Dann setzen wir den Wert der Variablen “licht” auf den höheren Lichtwert. Das kann der linke oder der rechte Lichtsensor sein.
- Danach untersuchen wir mit If-Else-Blöcken die drei Fälle dunkel (Lichtwert < 200), mittel (Lichtwert < 700) und hell (Lichtwert ≧ 700).
- Den drei Fällen haben wir die passenden LED-Aktionen zugeordnet.
Als “Motte” folgt der Edison dem Licht.
- Wenn das Licht auf Edisons linker Seite ist, soll der Roboter nach links fahren. Ist das Licht rechts geht auch die Fahrt nach rechts.
- Wenn sich die Lichtwerte von links und rechts kaum unterscheiden (Differenz < 10), soll der Roboter vorwärts fahren.
- Der Testraum sollte leicht schattig und ohne helle Lichtquellen sein. Der Roboter muss das Licht deiner Taschenlampe eindeutig erkennen können.
Schaue dir die Demo “Follow_a_torch” (Folge einer Taschenlampe) an. Die Demo enthält eine einfache Lösung ohne Vorwärtsfahrt.
Lösungsvorschlag:So haben wir unser Programm für die “Motte” geschrieben (edison_licht4_1.ees):
- Zuerst vergleichen wir die Lichtwerte für den linken und den rechten Sensor. Wir verzweigen das Programm für die linke und die rechte Seite, je nachdem woher das Licht einfällt.
- Wir bilden dann die Differenz von den beiden Lichtsensoren und setzen damit den Wert der Variablen “licht”. Wenn das Licht von links und rechts ungefähr gleich ist, ist die Differenz zwischen beiden Sensoren gering (<10). Bei geringer Differenz fährt der Roboter 10 cm geradeaus.
- Ist die Differenz ≧ 10 fährt der Roboter auf das Licht zu, indem er einen Kurvenfahrt vorwärts auf die Lichtquelle zu macht. Für die Kurvenfahrt haben wir einen 30°-Bogen gewählt.
- Nach der Fahraktion beginnt die forever-Schleife von vorn.
Wir drehen die Reaktion auf Licht um und lassen den Roboter von der Lichtquelle weg fahren. Der Roboter wird zu einer Kellerassel, die vor dem Licht flieht:
- Der Roboter soll stehen bleiben, wenn es relativ dunkel ist (Lichtwert < 200).
- Wird der Roboter mit einer Taschenlampe angestrahlt, soll er von der Lichtquelle weg fahren.
- Achte auf einen abgedunkelten Testraum ohne helle Lichtquellen. Der Roboter muss das Licht deiner Taschenlampe eindeutig erkennen können.
Unsere “Kellerassel” funktioniert mit diesem Programm edison_licht5_1.ees:
- Zuerst vergleichen wir die Werte der Lichtsensoren, um zu klären, woher das Licht kommt.
- Kommt das Licht von links, wird die Variable “licht_links” auf Wert 1 gesetzt. Die Variable “licht” erhält den Lichtwert des linken Sensors.
- Kommt das Licht von rechts, wird die Variable “licht_links” auf Wert 0 gesetzt. Die Variable “licht” erhält den Lichtwert des rechten Sensors.
- Bei Dunkelheit (Lichtwert < 200) werden die Motoren gestoppt.
- Ansonsten (Lichtwert >= 200) macht der Roboter eine Kurven- und eine Vorwärtsfahrt. Die Richtung führt von der Lichtquelle weg.
Das waren unsere ersten Ideen zum Experimentieren mit Licht. Vielleicht hast du noch ein paar eigene Ideen – dann nichts wie los!
Was du bei diesem Projekt lernen kannst:
- Die Lichtsensoren des Edison messen Licht mit Werten zwischen 0 und 1000.
- Durch Experimentieren kannst du herausfinden, welcher Wert welcher Helligkeit entspricht. Wir haben für uns die Werte dunkel (<200), mittel (200 – 700) und hell (>700) angenommen.
- Abhängig von den Lichtwerten lassen sich verschiedene Aktionen ausführen. Mit den entsprechenden Fahraktionen simulieren wir eine “Motte” oder eine “Kellerassel”.