DAS PROJEKT
Edison hat verschiedene Sensoren, um Dinge in seinem Umfeld zu erkennen. Der Roboter kann Linien erkennen und an ihnen entlang fahren. Dazu verwendet er eine rote LED und einen Lichtsensor auf seiner Unterseite.
Willst du mehr wissen...Der Roboter strahlt mit der roten LED den Boden an und der Lichtsensor stellt fest, ob viel oder wenig Licht vom Boden reflektiert wird.
Ein heller Untergrund reflektiert viel und ein dunkler Untergrund wenig Licht. Der Roboter erkennt die schwarze Linie, weil sie wenig Licht reflektiert. Siehe auch unser Projekt “EDBLOCKS 3 – EINER LINIE FOLGEN“.
Außerdem kann Edison Hindernisse vor sich erkennen. Er verwendet dazu zwei Infrarot-LEDs (abgekürzt IR-LEDs) und einen Infrarot-Empfänger (IR-Empfänger) auf der Vorderseite.
Willst du mehr wissen...Die IR-LEDs senden Infrarotlicht aus, das für das menschliche Auge nicht sichtbar ist. Hindernisse reflektieren dieses Licht und das erkennt der Roboter mit seinem IR-Empfänger.
Hinweise zur Linienerkennung:
- In EdScratch-Programmen muss die Linienerkennung ausdrücklich eingeschaltet werden mit Block “turn line tracking LED on” aus Kategorie “Sensing”.
- Damit die Linienerkennung funktioniert, muss Edison die Fahrt auf hellem Untergrund beginnen. Der Roboter speichert nämlich beim Starten das erste reflektierte Licht als “heller Untergrund” ab.
- Der Roboter benötigt Zeit, um auf die Erkennung zu reagieren. Fahre deshalb mit langsamster Geschwindigkeit.
Hinweise zur Hinderniserkennung:
- Auch die Hinderniserkennung muss ausdrücklich eingeschaltet werden mit Block “turn obstacle detection beam on” aus Kategorie “Sensing”.
- Hindernisse sollten mindestens 15 cm hoch und hell (NICHT transparent) sein.
- Falls dein Edison Hindernisse nicht erkennt, siehe unsere Seite EDISON – MOTOREN/HINDERNISERKENNUNG EINSTELLEN.
- Wiederum benötigt der Roboter Zeit, um auf die Erkennung zu reagieren. Fahre deshalb mit langsamster Geschwindigkeit.
DEINE MISSION
Zum Start werden wir Edisons Linienerkennung testen:
- Bereite die Testfahrten mit einer der folgenden Möglichkeiten vor:
– entweder lade dir unser Dokument Edison Barcodes TOP 5 herunter und drucke die erste Seite aus (enthält eine Teststrecke).
– oder setze eine Edison-Aktivitätsmatte (PDF) ein.
– oder klebe einen geschlossenen Kreis oder ein Oval mit schwarzem Klebeband auf eine helle Unterlage. - Erstelle ein Programm, in dem der Roboter vorwärts fährt, bis er auf eine dunkle Linie trifft. Dann soll er anhalten.
Für uns reichen diese zwei Zeilen (edison_liniefolgen1_1.ees):
- Mit dem ersten Block “turn line tracking led on” wird die Linienerkennung eingeschaltet.
- Wir fahren mit langsamster Geschwindigkeit (1) vorwärts. In den Befehlsblock ist der Ereignisblock “line tracker on non-reflective surface” (Linienerkennung auf nicht-reflektierender Oberfläche) aus der Kategorie “Sensing” (Sensoren) eingefügt. Zusammengesetzt lautet der Befehl “fahre vorwärts, bis die Linienerkennung auf einer dunklen Fläche ist”.
Lass uns den Edison so programmieren, dass er innerhalb eines geschlossenen Bereichs fährt. Wenn er auf eine dunkle Linie trifft, soll er drehen und wieder vorwärts fahren. Das Ganze soll der Roboter drei Mal durchführen. Um Programmieraufgaben zu lösen, hilft dir ein sogenannter Pseudo-Code. Dabei schreibst du in einfacher verständlicher Sprache auf, wie das Programm ablaufen soll. Der Pseudo-Code für dieses Programm könnte so aussehen:
Start
Linienerkennung an
Wiederhole 3-mal
Vorwärtsfahrt bis dunkle Linie
Drehung nach rechts um 120°
Ende
- Verändere das Programm von oben so, dass es dem Pseudo-Code entspricht.
Das ist unsere Umsetzung (edison_liniefolgen2_1.ees):
- Die Fahraktionen “Vorwärtsfahrt bis zur Linie” und “Drehung” sollen 3-mal wiederholt werden. Also setzen wir eine Schleife mit 3 Wiederholungen (repeat 3) ein.
- Wir haben uns für eine Drehung von ca. 120° nach rechts (spin right for 120 degrees) entschieden. Du kannst natürlich auch eine Linksdrehung und andere Winkel ausprobieren.
Nach dem Fahren innerhalb von Grenzen wollen wir den Roboter an einer Linie entlang fahren lassen. Auch dazu benutzen wir die Linienerkennung. Aber wie kann der Roboter an einer Linie, deren Verlauf wir nicht kennen, entlang fahren? Wir suchen eine Lösungsanweisung (auch Algorithmus genannt) für die Aufgabe “Fahren an einer Linie” und haben nur einen Liniensensor zur Verfügung.
Die Idee für eine Linienfahrt lautet: fahre, bis du auf eine Linie triffst. Bist du auf einer Linie, dann fahre vorwärts. Wenn du die Linie verlässt, dann fahre zurück auf die Linie.
Dazu müssen wir zwei Fragen beantworten:
- Wie findet Edison eine Linie?
- Wie kann Edison eine Linie wiederfinden, wenn er sie verlassen hat?
Unser Lösungsansatz: wir lassen den Roboter eine Kurve fahren, um eine Linie in seiner Nähe zu finden. Wenn er eine Linie gefunden hat, fahren wir eine Kurve in die andere Richtung. Verlässt er die Linie, fahren wir mit einer Kurve zurück bis zur Linie. So “wackelt” der Roboter mit Rechts- und Linkskurven an der Linie entlang. Durch die Richtungswechsel bei den Kurven haben wir eine gute Chance, eine Linie in der Nähe zu finden. Mit Geradeaus-Fahrten würde das nur bei viel Glück funktionieren.
Ergänze das vorhandene Programm:
- Der Roboter fährt innerhalb von Grenzen und dreht dreimal an einer dunklen Linie um. Dieser Teil ist schon programmiert.
- Danach soll Edison an der Linie entlang fahren. Zum Stoppen des Programms drückst du die viereckige Stopptaste.
So sieht unser Programm aus (edison_liniefolgen3_1.ees):
- Wir fügen dem vorhandenen Programm eine unendliche Schleife (Block “forever”) an.
- In dem Schleifenblock lassen wir die zwei Fahraktionen “Rechtskurve vorwärts” (turn forwards right) und “Linkskurve vorwärts” (turn forwards left) nacheinander ausführen.
- Die Rechtskurve endet, wenn die Linienerkennung eine dunkle Fläche feststellt (until line tracker on non-reflective surface).
- Die Linkskurve endet, wenn die Linienerkennung eine helle Fläche feststellt (until line tracker on reflective surface).
Lass uns die Linienerkennung mit der Hinderniserkennung kombinieren. Edison durchläuft sein Programm, fährt innerhalb von Grenzen und folgt dann der Linie. Wenn wir die Hand vor den Roboter halten, soll der Roboter für ein paar Sekunden stehen bleiben, zurücksetzen und in der entgegengesetzten Richtung an der Linie weiterfahren. Ergänze dazu das vorhandene Programm:
- Wenn du eine Hand vor den Roboter hältst, soll er für drei Sekunden anhalten. Danach soll er zurücksetzen und in der entgegengesetzten Richtung an der Linie weiterfahren.
Tipps: Die Hinderniserkennung muss beim Start des Programms ausdrücklich aktiviert werden. Manche Sensoren wie die Hinderniserkennung speichern die letzte Erkennung. In deinem Programm solltest du nach jeder Erkennung die Sensordaten löschen (Block “clear obstacle detector sensor data” aus Kategorie “Sensing”).
Lösungsvorschlag:Hier unser Programm für das Fahren in Grenzen, das Folgen einer Linie und die Hinderniserkennung (edison_liniefolgen4_1.ees):
- Wir aktivieren die Hinderniserkennung mit Block “turn obstacle detection beam on” aus Kategorie “Sensing”.
- Ein Hindernis vor dem Edison wird als Ereignis mit Block “Obstacle detected ahead” verarbeitet.
- Nachdem das Unterprogramm durch die Erkennung eines Hindernisses gestartet wurde, löschen wir die Sensordaten mit Block “clear obstacle detector sensor data”. So kann der Hindernissensor wieder neue Ereignisse verarbeiten.
- Wir stoppen die Fahrt mit Block “stop both motors” und warten (wait) 3 Sekunden.
- Nach der Pause setzen wir mit einer Kurvenfahrt rückwärts nach rechts um 180° zurück.
- Die Fahrtrichtung des Roboters hat sich geändert und das Programm wird fortgesetzt.
Was du bei diesem Projekt lernen kannst:
- Edison besitzt Sensoren für die Linienerkennung und die Hinderniserkennung. In EdScratch-Programmen müssen diese Sensoren aktiviert werden.
- Die Linienerkennung funktioniert mit einer roten LED und einem Lichtsensor. Der Roboter strahlt mit der roten LED den Boden an und der Lichtsensor stellt fest, ob viel oder wenig Licht vom Boden reflektiert wird. Ein heller Untergrund reflektiert viel und ein dunkler Untergrund wenig Licht. Der Roboter erkennt die schwarze Linie, weil sie wenig Licht reflektiert. Damit die Linienerkennung funktioniert, muss Edison die Fahrt auf hellem Untergrund beginnen. Der Roboter speichert nämlich beim Starten das erste reflektierte Licht als “heller Untergrund” ab.
- Zur Hinderniserkennung verwendet Edison zwei Infrarot-LEDs und einen Infrarot-Empfänger. Die IR-LEDs senden Infrarotlicht aus, das für das menschliche Auge nicht sichtbar ist. Hindernisse reflektieren dieses Licht und das erkennt der Roboter mit seinem IR-Empfänger. Hindernisse sollten mindestens 15 cm hoch und hell (NICHT transparent) sein.
- Bei Linien- und Hinderniserkennung benötigt der Roboter Zeit, um auf Ereignisse zu reagieren. Für gute Ergebnisse solltest du die langsamste Fahrgeschwindigkeit einstellen.
- Manche Sensoren wie z.B. die Hinderniserkennung speichern die letzte Erkennung. Damit Programm und Sensor gut funktionieren, sollte der Sensorspeicher nach jeder Erkennung gelöscht werden.
- Du kannst Programme mit Pseudo-Code planen, indem du den gedachten Programmablauf in einfacher Sprache aufschreibst.
- Es gibt einen einfachen Algorithmus für das Folgen einer Linie, wenn man nur einen Liniensensor zur Verfügung hat. Dabei wechseln sich in der Vorwärtsfahrt Rechts- und Linkskurven gegenseitig ab.