Edison Robotik: Lektion 8
Arbeitsblatt 8.1 - Zeilensensor
In dieser Lektion erfährst du mehr über den Zeilensensor des
Edison-Roboters und wie Edison mit diesem Sensor feststellen
kann, ob er sich auf einer reflektierenden oder nicht
reflektierenden Oberfläche befindet.
Wie funktioniert der
Zeilensensor von Edison?
Ihr Edison-Roboter ist mit einem
Zeilensensor ausgestattet, der sich in der Nähe des
Netzschalters an der Unterseite des Roboters befindet. Dieser
Sensor besteht aus zwei elektronischen Hauptkomponenten:
1.
eine rote Leuchtdiode (LED) und
2. ein Fototransistor
(Lichtsensor).
Dieses Bild zeigt einen Querschnitt des
Edison-Zeilensensors:
Die LED des Zeilensensors beleuchtet
die Oberfläche, auf der der Edison-Roboter fährt.
Die
Fototransistorkomponente ist ein Lichtsensor. Der Fototransistor
misst die Lichtmenge, die von der Oberfläche unter Edison
reflektiert wird.
Du bist dran:
Aufgabe 1: Schwarz gegen
Weiß
Wenn mehr Licht zurück zum Fototransistor von Edison
reflektiert wird, ergibt sich ein höherer Lichtwert.
Experimentiere, um festzustellen, ob eine weiße oder eine
schwarze Oberfläche mehr Licht reflektiert.
Verwende
Übungsblatt 8.1 oder ein Stück weißes und ein Stück schwarzes
Papier. Schalte Edison ein und drücke die runde Taste zweimal,
damit die LED für die Linienverfolgung aufleuchtet. Hebe Edison leicht
vom Papier ab und betrachte den
runden Lichtpunkt, den die LED auf der Oberfläche ausstrahlt.
Vergleiche, wie hell der Lichtfleck auf einer schwarzen und
dann auf einer weißen Fläche erscheint.
1. Erscheint der
LED-Lichtfleck auf einer schwarzen oder weißen Oberfläche
heller?
Aufgabe 2: Rot, Grün und
Blau
Wie du in Aufgabe 1 gesehen hast, wird von einer
weißen Oberfläche mehr Licht reflektiert als von einer schwarzen
Oberfläche. Deshalb erscheint das Licht auf einer weißen
Oberfläche heller.
Befindet sich der Fototransistor auf einer
weißen Oberfläche, ergibt sich ein höherer Lichtwert als auf
einer schwarzen Oberfläche. Eine schwarze Fläche wird daher als
„nicht reflektierend“ und eine weiße Fläche als „reflektierend“
eingestuft.
Die Fähigkeit des Fototransistors zu bestimmen,
ob sich Edison auf einer reflektierenden oder nicht
reflektierenden Oberfläche befindet, ermöglicht es, den Roboter
so zu programmieren, dass er auf die Oberfläche reagiert, auf
der er fährt.
2. Überlege, wie der Line Tracker auf die
folgenden Oberflächenfarben reagieren würde. Würde der Line
Tracker jede Farbe als reflektierend oder nicht reflektierend
sehen?
Denke daran, dass Edisons Line-Tracker-LED rotes Licht
aussendet. (Hinweis: Du kannst deine Antworten mit dem
Übungsblatt 8.1 testen.)
Rote Fläche ________________________
Grüne Fläche ________________________
Blaue Oberfläche
________________________
Arbeitsblatt 8.2 - Fahren Sie bis zu
einer schwarzen Linie
In dieser Lektion schreibst du
ein Programm, mit dem dein Edison-Roboter auf einer weißen (reflektierenden) Oberfläche
vorwärts fährt, bis eine schwarze (nicht reflektierende) Linie
überschritten wird.
Schau dir folgendes Programm an:
Schaue dir Zeile 13 an. Diese Zeile ruft die Funktion Ed.LineTrackerLed () auf
und setzt den Status auf "Ein".
Genau wie beim
Hinderniserkennungsstrahl von Edison musst du den Sensor zuerst
einschalten, um den Zeilensensor in einem Programm zu verwenden. Durch
Einschalten des Zeilensensors wird auch die rote LED des Zeilensensors
aktiviert.
Schaue dir nun Zeile 19 an. Diese Zeile ruft die
Funktion Ed.PlayBeep () auf. Diese Zeile hat keinen Einfluss auf die
Funktionsweise des Zeilenverfolgungsprogramms. Stattdessen dient diese
Zeile zum Debuggen.
Debuggen
Beim Debuggen
werden Fehler in deinem
Programm gefunden. Häufig fügen Programmierer Zeilen wie Zeile 19 in
ihren Code ein, um den Programmfluss zu verfolgen.
Nehmen wir an, du
führst dein Programm aus, aber der Roboter hält nicht an der schwarzen
Linie an. Es gibt zwei mögliche Gründe: (1) Möglicherweise erkennt der
Roboter die schwarze Linie nicht, oder (2) es liegt ein Fehler im
letzten Ed.Drive () - Befehl vor.
Wenn wir den Piepton hören, wissen
wir, dass die schwarze Linie erkannt wurde. Daher wissen wir, dass der
Fehler im nächsten Befehl war. Mit diesem zusätzlichen Debugging-Code
können wir den Fehler leichter ermitteln.
Zum Debuggen können auch
andere Funktionen verwendet werden, z. B. der Befehl Ed.LeftLed (). Mit
diesem Befehl können Sie beispielsweise die linke LED einschalten, um
anzuzeigen, dass ein bestimmter Punkt im Programm erreicht wurde.
Du
bist dran:
Schreibe das Programm mit der EdPy-App und lade es
auf deinen Edison-Roboter herunter. Verwende die schwarze Linie auf dem
Übungsblatt 8.1, um das Programm zu testen. Du kannt auch eine
schwarze Linie auf ein weißes Blatt Papier zeichnen oder schwarzes
Isolierband auf einem weißen Schreibtisch verwenden.
Hinweis: Wenn du in einem Programm den Edison-Zeilensensor verwendest,
starte den
Roboter immer auf der weißen (reflektierenden) Oberfläche - niemals auf
der schwarzen (nicht reflektierenden) Oberfläche.
Stelle Edison
auf die weiße Fläche und fahre den Roboter in Richtung der
schwarzen Linie.
Versuche dann, das Programm erneut mit jeweils
einer der drei farbigen Linien auf dem Übungsblatt 8.1 auszuführen.
Fahre Edison auf jede farbige Linie zu, um zu testen, ob der
Roboter die Linie erkennt und anhält.
1. Gibt es Farben, die
Edison nicht sehr gut erkennen kann? Wenn ja, welche Farbe (n)?
2. Warum hast du wohl die
Antwort auf Frage 1 erhalten? Warum kann Edison diese Farbe (n) nicht
erkennen?
3. Stelle dir vor, du programmierst deinen Edison-Roboter so,
dass er einen Slalomkurs mit drei Slalom-Flaggen fährt. Beschreibe, wie
du die Funktionen Ed.PlayBeep (), Ed.LeftLed () oder Ed.RightLed ()
in einem Programm für Debugging-Zwecke verwenden können und was sie tun
würden.
Arbeitsblatt 8.3 - Fahre innerhalb einer Grenze
In dieser Lektion müssen Sie ein Programm schreiben, mit dem Edison
mithilfe des Zeilensensors des Roboters innerhalb eines schwarzen Randes
bleibt.
Zuerst müssen wir das Programm mit Pseudocode planen.
Pseudocode
Das Planen deines
Programms, bevor du mit dem Codieren
beginnst, ist eine wichtige und nützliche Fähigkeit beim Programmieren.
Eine Möglichkeit, dies zu tun, besteht darin, mithilfe eines
Ablaufdiagramms den Programmablauf zusammenzufassen, den du in Lektion
6 kennengelernt hast. Pseudocode ist eine andere Möglichkeit, dein
Programm darzustellen, bevor du mit dem Codieren beginnst.
Mit
Pseudocode kann ein Programm auf vereinfachte, leicht lesbare Weise
geschrieben werden. Pseudocode ähnelt einer vereinfachten
Programmiersprache, basiert jedoch nicht auf einer bestimmten
Programmiersprache und ist daher syntaxfrei. Stattdessen wird im
Pseudocode die englische Sprache verwendet, um die Funktionsweise des
Programms zu beschreiben. Deshalb wird der Pseudocode auch als
"strukturiertes Englisch" bezeichnet.
Wenn du dein Programm mit
Pseudocode planen, solltest du wie in der Programmiersprache einrücken,
damit der Pseudocode leicht zu lesen und zu verstehen ist.
Hier ist
ein Beispiel für einen Pseudocode, der ein Programm beschreibt, mit dem
der Edison-Roboter mithilfe des Zeilensensors innerhalb einer nicht
reflektierenden Grenze bleibt:
Hier ist der entsprechende Code in
EdPy:
Vergleiche den Pseudocode mit dem Programm. Sieh, wie
der Pseudocode in das Python-Programm übersetzt wurde?
Du bist dran:
Schreibe folgendes Programm:
Lade das
Programm auf deinen
Edison-Roboter herunter und führe es aus, um zu sehen, wie es
funktioniert.
Verwende Übungsblatt 8.2 als Rahmen, um das Programm zu
testen. Du kannst auch einen eigenen Rand mit einem großen Stück Papier
und einem dicken schwarzen Stift erstellen oder ein schwarzes Klebeband
auf einem weißen Schreibtisch oder dem Boden verwenden, um einen großen
Rand zu erstellen.
Ändere das Programm:
Versuchen Sie, den Stop zu entfernen, indem Sie die Zeile 18
des Programms entfernen. Experimentieren Sie dann mit dem Ändern des
Programms, um verschiedene Geschwindigkeiten zu verwenden. Testen Sie
Ihre geänderten Programme, um zu sehen, was passiert.
1. Wie
schnell kann der Roboter fahren, bevor es Probleme gibt?
2.
Was passiert, wenn der Roboter zu schnell fährt?
Arbeitsblatt 8.4 -
Folge einer Linie
In dieser Lektion verwendest du den
Zeilentracker des Edison-Roboters, um ein Programm in EdPy zu schreiben,
mit dem Edison jeder schwarzen Linie folgt.
Dazu müssen wir zunächst
einen Algorithmus zum Folgen einer schwarzen Linie erstellen.
Was ist ein Algorithmus?
Nehmen wir
an, du möchtest deinen Freunden beibringen, wie man Obstkuchen macht.
Wenn du weisst, dass alle Ihre Freunde Äpfel haben, kannst du einfach
ein Rezept für Apfelkuchen aufschreiben.
Möglicherweise haben jedoch
nicht alle deine Freunde Äpfel. Was ist, wenn einer deiner Freunde
Heidelbeeren, ein anderer Kirschen und ein dritter Äpfel hat? Sie können
nicht alle das Apfelkuchenrezept befolgen. Sie müssten für jede Frucht
ein eigenes Rezept schreiben.
Was ist, wenn du nicht weisst, welche
Früchte deine Freunde haben? Wie könntest du ihnen beibringen,
Obstkuchen zu machen?
Unabhängig davon, welche Früchte sie haben,
müssen alle deine Freunde die gleichen grundlegenden Anweisungen
befolgen: Mache den Teig, fülle den Kuchen mit den Früchten und backe
den Kuchen.
Dieser neue Befehlssatz ist ein Beispiel für einen
Algorithmus.
Ein Algorithmus besteht aus einer Reihe von Anweisungen
zur Lösung einer Reihe von Problemen. Ein Algorithmus legt einen Prozess
oder einen Satz von Regeln fest, die befolgt werden müssen, um ein
Problem im Satz zu lösen.
Algorithmen
in der Programmierung
In der Programmierung haben wir oft eine
Reihe von Problemen, die wir lösen möchten.
In dieser Lektion möchten
wir zum Beispiel, dass Edison jeder schwarzen Linie folgt. Wir haben
daher folgende Probleme: Folgen Sie jeder schwarzen Linie. Jede
bestimmte Zeile, der Edison folgt, ist ein neues Problem in diesem Set.
Nehmen wir an, du zeichnest eine schwarze Linie, der Edison folgen soll.
Damit Edison deiner Linie folgt, kannst du ein Programm schreiben, mit
dem Edison den genauen Pfad der Linie ermittelt. Wenn du jedoch eine
neue Zeile erstellen, musst du ein ganz neues Programm für diese neue
Zeile schreiben.
Stattdessen kannst du einen Algorithmus erstellen.
Der Algorithmus erzeugt ein Programm, das für alle Probleme in der Menge
funktioniert. Auf diese Weise wird nicht für jedes neue Problem ein ganz
neues Programm benötigt.
Um unsere Probleme zu lösen, benötigen wir
den Algorithmus, um einen Befehlssatz zu erstellen, der für jede
schwarze Linie funktioniert.
Du kannst einen Algorithmus mit
Pseudocode oder einem Flussdiagramm planen, genau wie du es tust, wenn
du ein Programm planst.
Hier ist ein Algorithmus im Pseudocode, mit
dem Edison jeder schwarzen Linie folgen kann:
Dieser
Algorithmus besagt, dass der Edison-Roboter nach rechts fahren und den
Sensor in Richtung der weißen Oberfläche bewegen sollte, wenn sich der
Zeilensensor auf einer nicht reflektierenden Oberfläche (schwarz)
befindet. Befindet sich der Linienverfolgungssensor nicht auf einer
schwarzen Fläche, sollte der Roboter nach links vorwärts fahren und den
Sensor in Richtung der schwarzen Fläche bewegen. Auf diese Weise bewegt
sich der Roboter kontinuierlich vorwärts und verfolgt den Rand der
Linie.
Beachte,
dass im Pseudocode keine Geschwindigkeiten oder Entfernungen angegeben
sind. Diese Art von Details wird normalerweise der Codierungsphase
überlassen.
Du bist dran:
Übersetze den Pseudocode-Algorithmus in ein Python-Programm, damit dein
Edison-Roboter einer schwarzen Linie folgt. Experimentiere mit
unterschiedlichen Geschwindigkeiten und Entfernungen, um eine möglichst
gleichmäßige Linienverfolgung zu erzielen. Lade deinen Code in Edison
herunter und teste ihn anhand des Tracks im Übungsblatt 8.2.
1. Was
war die beste Kombination aus Geschwindigkeit und Entfernung, um eine
reibungslose Linienverfolgung zu erreichen?
2. Wie sah dein
Python-Programm aus? Schreibe deinen Code hier.
Versuch es!
Mache deineeigene Linie mit einem schwarzen Stift auf
weißem Papier oder schwarzem Klebeband. Kann Edison deiner Linie folgen?