Edison Robotik: Lektion 6
Arbeitsblatt 6.1 -
Blinker der LED als Reaktion auf ein Klatschen
In dieser Lektion musst du ein Programm mit dem
Klatscherkennungssensor von Edison schreiben, damit der Roboter
jedes Mal, wenn er ein Klatschen erkennt, eine LED blinkt.
Das erste, was zu tun ist, ist das Programm zu planen.
Flussdiagramme in der Programmierung
Professionelle
Programmierer planen ihr Programm normalerweise, bevor sie
anfangen, ihren Code zu schreiben. Mithilfe von Flussdiagrammen
können Programmierer ihre Programme organisieren und planen.
Die Idee eines Flussdiagramms besteht darin, grafisch
zusammenzufassen, was im Code geschieht, ohne auf alle Details
eingehen zu müssen. Mithilfe von Flussdiagrammen kann ein
Programmierer visualisieren und kommunizieren, wie der „Fluss“
des Programms abläuft.
In einem Flussdiagramm wird ein
Programm mit verschiedenen Formen und Pfeilen dargestellt. Jede
Form stellt ein anderes Element im Programm dar, und die Pfeile
zeigen, wie die Elemente zusammenarbeiten. In Flussdiagrammen
werden fünf Hauptsymbole verwendet:
Symbol |
Name |
Fuktion |
|
Terminator (Start/Ende) |
Ein Oval gibt Start- oder Endpunkt an |
|
Pfeil |
Eine Linie, die als Konnektor fungiert
und die Beziehungen zwischen repräsentativen Formen zeigt
|
|
Input / Output |
Ein Parallelogramm repräsentiert einen
Eingang oder einen Ausgang
|
|
Prozess |
Ein Rechteck repräsentiert einen Prozess
oder eine Aktion
|
|
Entscheidung |
Eine Raute ist eine Entscheidung |
Bei komplizierteren Flussdiagrammen können auch
zusätzliche Formen mit unterschiedlichen Bedeutungen verwendet werden.
Beim Erstellen eines Flussdiagramms zum Planen eines Programms werden
häufig Wörter in die Formen oder neben die Pfeile eingefügt. Diese
Wörter sind kurze Zusammenfassungen des Prozesses oder der Entscheidung.
Schauen wir uns ein Beispiel-Flussdiagramm an, in dem das Programm
zusammengefasst ist, das wir erstellen möchten.
Hier ist ein
Flussdiagramm für ein Programm, das deinen Edison-Roboter anweist, auf
ein Klatschen zu warten und dann die linke LED zu blinken:
Dieses Programm verwendet Edisons
Geräuscherkennungssensor, um festzustellen, ob ein Klatschen aufgetreten
ist oder nicht. Das Ergebnis bestimmt, wie der Code als nächstes fließt.
Wenn du dir dieses Flussdiagramm ansiehst, stellst du möglicherweise
fest, dass es kein Abschlusszeichen enthält. Dies liegt daran, dass
dieses Programm eine "while" -Schleife verwendet, die so eingerichtet
ist, dass das Programm unbegrenzt fortgesetzt wird.
Eine
Endlosschleife machen
Manchmal möchtest du vielleicht ein Programm
schreiben, das kein Ende hat, sondern eine Endlosschleife durchläuft. In
der Programmierung wird dies oft als Endlosschleife bezeichnet.
Du
kannst eine Endlosschleife verwenden, um das im Ablaufdiagramm geplante
Programm zu erstellen.
Schau dir folgendes Programm an:
Dieses
Programm wird durch unser Flussdiagramm dargestellt und enthält eine
Endlosschleife.
Schau dir sich Zeile 12 des Programms an, in der
eine 'while'-Schleife verwendet wird.
'While'-Schleifen benötigen
immer eine Bedingung. Die Schleife wiederholt jeden eingerückten Code,
während diese Bedingung auf "true" aufgelöst wird.
Wenn die "while"
-Schleife unendlich wiederholt werden soll, ersetzen wir die Bedingung
durch "True", anstatt eine Bedingung anzugeben, die das Programm
auswerten muss.
"True" wird immer in "True" aufgelöst. Indem wir die
Bedingung auf "True" setzen, haben wir die Bedingung unserer "while"
-Schleife fest auf "True" codiert.
Beim Programmieren erzwingst du
beim Hardcodieren einen bestimmten Vorgang, indem du ihn explizit
eingibst.
Durch die Verwendung von "True" als Bedingung für die
"while" -Schleife in unserem Programm kann die Schleifenbedingung
niemals falsch sein und wird sich unendlich wiederholen.
Du bist
dran:
Schreibe den obigen Code, um deinen Edison-Roboter so zu
programmieren, dass die linke LED blinkt, wenn du klatschst. Lade
es herunter und teste, wie es funktioniert.
1. Wie weit kannst du von
deinem deinem Edison entfernt sein, damit er das Klatschen erkennt?
2. Was ist der
Zweck, wenn die Funktion TimeWait () im Code aufgerufen wird? Was würde
passieren, wenn wir sie nicht hätten? Tipp: Versuche, das Programm
ohne die Funktionsaufrufe von TimeWait () auszuführen.
3. Sieh dir das Programm und das Flussdiagramm an, um zu
vergleichen, wie sich der Code im Programm und im Flussdiagramm
zueinander verhalten. Erläutere, was im Code passiert, wenn das
Ergebnis der im Ablaufdiagramm dargestellten Entscheidung "Nein" lautet.
Versuch es!
Kannst du das Programm so ändern, dass beim
Klatschen beide LEDs aufleuchten?
Arbeitsblatt 6.2 - Fahren als Reaktion
auf ein Klatschen
In dieser Aktivität musst du ein
Programm schreiben, mit dem dein Edison-Roboter als Reaktion auf ein Klatschen
vorwärts fährt.
Du bist dran:
Aufgabe 1: Fahre vorwärts, wenn
ein Klatschen festgestellt wird
Schreibe das folgende Programm und
führe es aus:
1. Warum
muss in Zeile 12 ein erster Lesevorgang des Klatschsensors durchgeführt
werden? Was macht das Hinweis: Rückblick auf das Arbeitsblatt 2.5.
________________________________________________________________________
Aufgabe 2: Vorwärts und rückwärts fahren, wenn ein Klatschen
festgestellt wird
Der Geräuschsensor des Edison-Roboters reagiert
nicht nur empfindlich auf Klatschen. Die Sensoren können auf jeden
erkannten lauten Ton reagieren. Aus diesem Grund kannst du in der Nähe
des Lautsprechers auf den Roboter tippen, um den Tonsensor auszulösen.
Die Motoren, Getriebe und Räder von Edison machen beim Drehen Geräusche,
die den Geräuschsensor auslösen können. Um zu verhindern, dass der
Geräuschpegel des Roboters den Geräuschsensor auslöst, musst du das
Programm ändern.
Du musst einen TimeWait () -Funktionsaufruf mit
einem Eingabeparameter von ca. 350 Millisekunden hinzufügen, um den
Robotermotoren Zeit zum Stoppen zu geben.
Du musst auch einen
ReadClapSensor () verwenden, um den Klopfsensor zu löschen.
Schreibe folgendes Programm:
Lade das
Programm herunter und teste es.
2. Normalerweise schreiben wir ein
Flussdiagramm, um unseren Code zu planen. Schreibe zu Übungszwecken ein
Flussdiagramm, das dem soeben geschriebenen Code entspricht. Zeichne
dein Flussdiagramm unten oder verwende ein Programm wie Google Slides,
um dein Flussdiagramm zu erstellen.
Arbeitsblatt 6.3 - Entwerfen Sie Ihre eigene Funktion
In dieser Übung entwirfst du deine eigene Funktion und
schreibst damit ein Programm für
Edison.
Was genau sind Funktionen?
Nachdem
du eine Weile mit
Edison und EdPy programmiert hast, hast du eine Reihe verschiedener
Funktionen aus der EdPy-Bibliothek verwendet.
Wie du weisst, ist
eine Funktion ein Teil des Codes, der abhängig von den verwendeten
Eingabeparametern eine bestimmte Rolle oder einen bestimmten Job im
Programm ausführt.
Möglicherweise hast du jedoch nicht bemerkt, dass
alle Funktionen, die du bisher verwendet hast, tatsächlich
mehrere Codezeilen ausgeführt haben, wenn sie vom Programm ausgeführt
wurden.
Dies liegt daran, dass eine Funktion ein Block aus
organisiertem, wiederverwendbarem Code ist, der zum Ausführen einer
einzelnen, verwandten Aktion verwendet wird.
Funktionen sind sehr
hilfreich, da sie es uns ermöglichen, modularer zu programmieren und an
verschiedenen Stellen im Programm denselben Codeblock zu verwenden.
Damit dein Programm alle diese Codezeilen ausführt, musst du nur eine
Zeile eingeben: Diese Funktion aufrufen.
Funktionen machen die
Wiederverwendung von Code einfacher und effizienter, wenn wir
programmieren.
Mach deine eigene Funktion
Bisher hast du jedes Mal, wenn du eine Funktion in EdPy verwendet hast,
diese Funktion aus der Ed-Bibliothek aufgerufen. Du kannst auch eigene
Funktionen erstellen.
In Python sehen die Funktionen folgendermaßen
aus:
Alles, was
eingerückt ist, ist Teil der Funktion. Alles, was nicht eingerückt ist,
gehört nicht zur Funktion, sondern zur nächsten Codezeile im Programm.
Beachte, dass sich die von dir erstellte Funktionen nicht von den
Funktionen unterscheiden, die du in der Ed-Bibliothek bisher verwendet
hast.
Wenn du deine Funktion (mit oder ohne Parameter) aufrufen,
springt das Programm vom Aufruf zum Code in der Funktion (dem
eingerückten Code). Das Programm führt diesen Code dann aus, bevor es zu
der Leitung zurückkehrt, in der du den Anruf getätigt hast.
Wenn du
deine Funktion so einstellst, dass sie einen Wert zurückgibt, wird
der Funktionsaufruf durch den Wert ersetzt, den die Funktion
zurückgegeben hat, wenn das Programm zu der Zeile zurückkehrt, in der
Sie den Aufruf ausgeführt haben.
Dies ist wichtig, da das Programm
immer Funktionen auflöst und anschließend die mathematischen Anweisungen
und Ausdrücke in dieser Reihenfolge ausführt.
Organisiere deinen Code
Die
Konvention in EdPy besteht darin, die Definition deiner Funktionen am
Ende deines Codes zu schreiben, nachdem du deine Funktion bereits in
deinem Programm verwendet hast.
Dies ist so, dass dein Code schön und
ordentlich ist. Wenn du deinen Code auf diese Weise
organisierst, können alle deine Funktionen, unabhängig davon, ob du
deine
eigenen Funktionen verwendest oder Funktionen aus einer Bibliothek
aufrufen, in den Hauptteil deines Programms auf übersichtliche Weise
geschrieben werden. Deine Funktionsdefinitionen
können sich darüber hinaus weiter unten im Programm befinden.
Du bist
dran:
Aufgabe 1: Übe das Definieren einer Funktion
Schau dir
folgendes Programm an:
Zeile 17 im
Programm ist der Funktionsaufruf. Die Zeilen 21 bis 25 definieren die
Funktion. Denke daran, dass die Konvention darin besteht, deine Funktion
am Ende deines Programms zu definieren, um alles übersichtlich
und übersichtlich zu halten.
Schreibe das Programm und lade es
auf deinen Edison-Roboter herunter. Führe das Programm aus, um zu
sehen, wie es funktioniert.
1. Wir könnten eine Funktion schreiben,
die den Edison-Roboter eine Quadrat abfahren lässt. Fülle die
fehlenden Wörter in der folgenden Funktion aus, um das Schreiben dieser
Funktion abzuschließen.
def driveInaSquare ():
für i in range
(___):
Ed.Drive (_____________, _____________, _____________)
Ed.Drive (_____________, _____________, _____________)
2.
Schreibe die Syntax für den Code, um diese Funktion aufzurufen. Mit
anderen Worten, was würdest du in dein Programm eingeben, um es
aufzurufen?
Schreibe ein Programm, das Edison auf mehreren
Feldern antreibt. Du musst die Funktion "driveInaSquare" definieren und
dein Programm muss diese Funktion mehrmals aufrufen. Lade das Programm
herunter und führe es aus, um zu sehen, wie es funktioniert.
3. Tut
das Programm das, was du erwartest hast? Wenn nicht, beschreibe, was du
erwartest hast und was das Programm tatsächlich getan hat. Beschreibe
alle Probleme, die du hattest, um dein Programm zum Laufen zu bringen.
Aufgabe 2: Entwerfe deineeigene
Funktion
Schreibe deine eigene Funktion, die Edison veranlasst, etwas
zu tun, wenn du klatschst. Du könntest Edison zum Tanzen bringen, eine
LED blinken lassen, sich in einem Kreis drehen oder irgendetwas anderes,
was du magst!
Schritt 1: Design
Schreibe zunächst ein Flussdiagramm, das dein Programm grafisch
zusammenfasst. Erstelle dein Flussdiagramm, indem du es auf Papier
zeichnest, oder verwende ein Programm wie Google Slides. Stelle sicher,
dass du die richtigen Formen in deinem Flussdiagramm verwenden, um den
Start, die Prozesse, die Entscheidungspunkte und den Fluss des Programms
darzustellen.
Welche Formen du benötihst, hängt von deinem
Flussdiagramm ab. Du benötigst mindestens die ovale Startform, die
Rechteckprozessform und die Rautenentscheidungsform in deinem
Flussdiagramm.
Schritt 2: Code
Übersetze deine Idee in der EdPy-App in Code. Verwende dein
Flussdiagramm als Richtlinie und kodiere deine Funktion, um jeden
Schritt, den du in deinem Flussdiagramm festgelegt hast, einzuschließen.
Schritt 3: Test
Schreibe ein
Testprogramm mit deiner Funktion und zusätzlichem Code, um deine
Funktion zu „trainieren“. (Wenn du eine Funktion ausübst, musst du sie
in deinem Code aufrufen.) Überprüfe, ob deine Funktion so funktioniert,
wie du es geplant und erwartet hast. Wenn nicht, überprüfe dein
Flussdiagramm und deinen Code und passe sie nach Bedarf an.
Experimentiere, um zu sehen, was funktioniert!
4. Beschreibe, was
deine Funktion getan hat.
5. Beschreibe alle Probleme, die du
hattest.